mittsu 0.2.3 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build-workflow.yml +95 -0
  3. data/.gitignore +1 -0
  4. data/Gemfile +3 -2
  5. data/README.md +3 -7
  6. data/Rakefile +1 -0
  7. data/install-glfw.ps1 +13 -0
  8. data/lib/mittsu.rb +1 -16
  9. data/lib/mittsu/cameras/camera.rb +0 -2
  10. data/lib/mittsu/cameras/cube_camera.rb +0 -2
  11. data/lib/mittsu/cameras/orthographic_camera.rb +2 -4
  12. data/lib/mittsu/cameras/perspective_camera.rb +4 -5
  13. data/lib/mittsu/core/buffer_geometry.rb +3 -3
  14. data/lib/mittsu/core/geometry.rb +10 -9
  15. data/lib/mittsu/core/object_3d.rb +9 -7
  16. data/lib/mittsu/core/raycaster.rb +0 -2
  17. data/lib/mittsu/extras/geometries.rb +13 -0
  18. data/lib/mittsu/extras/geometries/circle_geometry.rb +48 -0
  19. data/lib/mittsu/extras/geometries/cylinder_geometry.rb +145 -0
  20. data/lib/mittsu/extras/geometries/dodecahedron_geometry.rb +56 -0
  21. data/lib/mittsu/extras/geometries/icosahedron_geometry.rb +33 -0
  22. data/lib/mittsu/extras/geometries/lathe_geometry.rb +78 -0
  23. data/lib/mittsu/extras/geometries/octahedron_geometry.rb +26 -0
  24. data/lib/mittsu/extras/geometries/parametric_buffer_geometry.rb +92 -0
  25. data/lib/mittsu/extras/geometries/parametric_geometry.rb +93 -0
  26. data/lib/mittsu/extras/geometries/plane_buffer_geometry.rb +81 -0
  27. data/lib/mittsu/extras/geometries/plane_geometry.rb +22 -0
  28. data/lib/mittsu/extras/geometries/polyhedron_geometry.rb +168 -0
  29. data/lib/mittsu/extras/geometries/ring_geometry.rb +80 -0
  30. data/lib/mittsu/extras/geometries/sphere_geometry.rb +4 -4
  31. data/lib/mittsu/extras/geometries/tetrahedron_geometry.rb +26 -0
  32. data/lib/mittsu/extras/geometries/torus_geometry.rb +63 -0
  33. data/lib/mittsu/extras/geometries/torus_knot_buffer_geometry.rb +120 -0
  34. data/lib/mittsu/extras/geometries/torus_knot_geometry.rb +25 -0
  35. data/lib/mittsu/extras/helpers/camera_helper.rb +38 -38
  36. data/lib/mittsu/extras/image_utils.rb +1 -1
  37. data/lib/mittsu/lights/directional_light.rb +9 -5
  38. data/lib/mittsu/lights/spot_light.rb +1 -1
  39. data/lib/mittsu/loaders/loader.rb +2 -2
  40. data/lib/mittsu/loaders/obj_loader.rb +4 -0
  41. data/lib/mittsu/materials/material.rb +6 -3
  42. data/lib/mittsu/math.rb +0 -5
  43. data/lib/mittsu/math/box2.rb +0 -2
  44. data/lib/mittsu/math/box3.rb +0 -2
  45. data/lib/mittsu/math/color.rb +3 -4
  46. data/lib/mittsu/math/euler.rb +25 -26
  47. data/lib/mittsu/math/frustum.rb +0 -2
  48. data/lib/mittsu/math/line3.rb +0 -2
  49. data/lib/mittsu/math/matrix3.rb +0 -2
  50. data/lib/mittsu/math/matrix4.rb +10 -12
  51. data/lib/mittsu/math/plane.rb +0 -2
  52. data/lib/mittsu/math/quaternion.rb +18 -20
  53. data/lib/mittsu/math/ray.rb +1 -3
  54. data/lib/mittsu/math/sphere.rb +1 -3
  55. data/lib/mittsu/math/spline.rb +0 -2
  56. data/lib/mittsu/math/triangle.rb +1 -3
  57. data/lib/mittsu/math/vector.rb +4 -4
  58. data/lib/mittsu/math/vector2.rb +0 -1
  59. data/lib/mittsu/math/vector3.rb +0 -1
  60. data/lib/mittsu/math/vector4.rb +8 -9
  61. data/lib/mittsu/objects/line.rb +0 -1
  62. data/lib/mittsu/renderers/glfw_lib.rb +1 -1
  63. data/lib/mittsu/renderers/glfw_window.rb +1 -1
  64. data/lib/mittsu/renderers/opengl/core/object_3d.rb +1 -1
  65. data/lib/mittsu/renderers/opengl/lights/spot_light.rb +1 -1
  66. data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +1 -0
  67. data/lib/mittsu/renderers/opengl/opengl_program.rb +1 -2
  68. data/lib/mittsu/renderers/opengl/textures/texture.rb +1 -1
  69. data/lib/mittsu/renderers/opengl_renderer.rb +5 -10
  70. data/lib/mittsu/scenes/scene.rb +0 -2
  71. data/lib/mittsu/textures/texture.rb +4 -2
  72. data/lib/mittsu/utils.rb +15 -0
  73. data/lib/mittsu/version.rb +1 -1
  74. data/mittsu.gemspec +10 -9
  75. metadata +75 -47
  76. data/.circleci/config.yml +0 -44
  77. data/.travis.yml +0 -20
  78. data/appveyor.yml +0 -23
  79. data/install_glfw.ps1 +0 -11
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Frustum
5
3
  attr_accessor :planes
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Line3
5
3
  attr_accessor :start_point, :end_point
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Matrix3
5
3
  attr_accessor :elements
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Matrix4
5
3
  attr_accessor :elements
@@ -88,9 +86,9 @@ module Mittsu
88
86
  def make_rotation_from_euler(euler)
89
87
  te = self.elements
90
88
  x, y, z = euler.x, euler.y, euler.z
91
- a, b = Math.cos(x), Math.sin(x)
92
- c, d = Math.cos(y), Math.sin(y)
93
- e, f = Math.cos(z), Math.sin(z)
89
+ a, b = ::Math.cos(x), ::Math.sin(x)
90
+ c, d = ::Math.cos(y), ::Math.sin(y)
91
+ e, f = ::Math.cos(z), ::Math.sin(z)
94
92
  if euler.order == 'XYZ'
95
93
  ae = a * e; af = a * f; be = b * e; bf = b * f
96
94
  te[0] = c * e
@@ -401,7 +399,7 @@ module Mittsu
401
399
  scale_x_sq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2]
402
400
  scale_y_sq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6]
403
401
  scale_z_sq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10]
404
- Math.sqrt([scale_x_sq, scale_y_sq, scale_z_sq].max)
402
+ ::Math.sqrt([scale_x_sq, scale_y_sq, scale_z_sq].max)
405
403
  end
406
404
 
407
405
  def make_translation(x, y, z)
@@ -415,7 +413,7 @@ module Mittsu
415
413
  end
416
414
 
417
415
  def make_rotation_x(theta)
418
- c, s = Math.cos(theta), Math.sin(theta)
416
+ c, s = ::Math.cos(theta), ::Math.sin(theta)
419
417
  self.set(
420
418
  1.0, 0.0, 0.0, 0.0,
421
419
  0.0, c, -s, 0.0,
@@ -426,7 +424,7 @@ module Mittsu
426
424
  end
427
425
 
428
426
  def make_rotation_y(theta)
429
- c, s = Math.cos(theta), Math.sin(theta)
427
+ c, s = ::Math.cos(theta), ::Math.sin(theta)
430
428
  self.set(
431
429
  c, 0.0, s, 0.0,
432
430
  0.0, 1.0, 0.0, 0.0,
@@ -437,7 +435,7 @@ module Mittsu
437
435
  end
438
436
 
439
437
  def make_rotation_z(theta)
440
- c, s = Math.cos(theta), Math.sin(theta)
438
+ c, s = ::Math.cos(theta), ::Math.sin(theta)
441
439
  self.set(
442
440
  c, -s, 0.0, 0.0,
443
441
  s, c, 0.0, 0.0,
@@ -449,8 +447,8 @@ module Mittsu
449
447
 
450
448
  def make_rotation_axis(axis, angle)
451
449
  # Based on http:#www.gamedev.net/reference/articles/article1199.asp
452
- c = Math.cos(angle)
453
- s = Math.sin(angle)
450
+ c = ::Math.cos(angle)
451
+ s = ::Math.sin(angle)
454
452
  t = 1.0 - c
455
453
  x, y, z = axis.x, axis.y, axis.z
456
454
  tx, ty = t * x, t * y
@@ -536,7 +534,7 @@ module Mittsu
536
534
  def make_perspective(fov, aspect, near, far)
537
535
  fov, aspect, near, far =
538
536
  fov.to_f, aspect.to_f, near.to_f, far.to_f
539
- ymax = near * Math.tan(Math.deg_to_rad(fov * 0.5))
537
+ ymax = near * ::Math.tan(Math.deg_to_rad(fov * 0.5))
540
538
  ymin = -ymax
541
539
  xmin = ymin * aspect
542
540
  xmax = ymax * aspect
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Plane
5
3
  attr_accessor :normal, :constant
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Quaternion
5
3
  EPS = 0.000001
@@ -8,6 +6,7 @@ module Mittsu
8
6
 
9
7
  def initialize(x = 0.0, y = 0.0, z = 0.0, w = 1.0)
10
8
  @x, @y, @z, @w = x, y, z, w
9
+ @on_change_callback = nil
11
10
  end
12
11
 
13
12
  def set(x, y, z, w)
@@ -52,12 +51,12 @@ module Mittsu
52
51
  # http:#www.mathworks.com/matlabcentral/fileexchange/
53
52
  # 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/
54
53
  # content/SpinCalc.m
55
- c1 = Math.cos(euler.x / 2.0)
56
- c2 = Math.cos(euler.y / 2.0)
57
- c3 = Math.cos(euler.z / 2.0)
58
- s1 = Math.sin(euler.x / 2.0)
59
- s2 = Math.sin(euler.y / 2.0)
60
- s3 = Math.sin(euler.z / 2.0)
54
+ c1 = ::Math.cos(euler.x / 2.0)
55
+ c2 = ::Math.cos(euler.y / 2.0)
56
+ c3 = ::Math.cos(euler.z / 2.0)
57
+ s1 = ::Math.sin(euler.x / 2.0)
58
+ s2 = ::Math.sin(euler.y / 2.0)
59
+ s3 = ::Math.sin(euler.z / 2.0)
61
60
  if euler.order == 'XYZ'
62
61
  @x = s1 * c2 * c3 + c1 * s2 * s3
63
62
  @y = c1 * s2 * c3 - s1 * c2 * s3
@@ -97,11 +96,11 @@ module Mittsu
97
96
  # http:#www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm
98
97
  # assumes axis is normalized
99
98
  half_angle = angle / 2.0
100
- s = Math.sin(half_angle)
99
+ s = ::Math.sin(half_angle)
101
100
  @x = axis.x * s
102
101
  @y = axis.y * s
103
102
  @z = axis.z * s
104
- @w = Math.cos(half_angle)
103
+ @w = ::Math.cos(half_angle)
105
104
  self.on_change_callback
106
105
  self
107
106
  end
@@ -115,25 +114,25 @@ module Mittsu
115
114
  m31 = te[2]; m32 = te[6]; m33 = te[10]
116
115
  trace = m11 + m22 + m33
117
116
  if trace > 0
118
- s = 0.5 / Math.sqrt(trace + 1.0)
117
+ s = 0.5 / ::Math.sqrt(trace + 1.0)
119
118
  @w = 0.25 / s
120
119
  @x = (m32 - m23) * s
121
120
  @y = (m13 - m31) * s
122
121
  @z = (m21 - m12) * s
123
122
  elsif m11 > m22 && m11 > m33
124
- s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33)
123
+ s = 2.0 * ::Math.sqrt(1.0 + m11 - m22 - m33)
125
124
  @w = (m32 - m23) / s
126
125
  @x = 0.25 * s
127
126
  @y = (m12 + m21) / s
128
127
  @z = (m13 + m31) / s
129
128
  elsif m22 > m33
130
- s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33)
129
+ s = 2.0 * ::Math.sqrt(1.0 + m22 - m11 - m33)
131
130
  @w = (m13 - m31) / s
132
131
  @x = (m12 + m21) / s
133
132
  @y = 0.25 * s
134
133
  @z = (m23 + m32) / s
135
134
  else
136
- s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22)
135
+ s = 2.0 * ::Math.sqrt(1.0 + m33 - m11 - m22)
137
136
  @w = (m21 - m12) / s
138
137
  @x = (m13 + m31) / s
139
138
  @y = (m23 + m32) / s
@@ -188,7 +187,7 @@ module Mittsu
188
187
  end
189
188
 
190
189
  def length
191
- Math.sqrt(@x * @x + @y * @y + @z * @z + @w * @w)
190
+ ::Math.sqrt(@x * @x + @y * @y + @z * @z + @w * @w)
192
191
  end
193
192
 
194
193
  def normalize
@@ -247,8 +246,8 @@ module Mittsu
247
246
  @z = _z
248
247
  return self
249
248
  end
250
- half_theta = Math.acos(cos_half_theta)
251
- sin_half_theta = Math.sqrt(1.0 - cos_half_theta * cos_half_theta)
249
+ half_theta = ::Math.acos(cos_half_theta)
250
+ sin_half_theta = ::Math.sqrt(1.0 - cos_half_theta * cos_half_theta)
252
251
  if sin_half_theta.abs < 0.001
253
252
  @w = 0.5 * (_w + @w)
254
253
  @x = 0.5 * (_x + @x)
@@ -256,8 +255,8 @@ module Mittsu
256
255
  @z = 0.5 * (_z + @z)
257
256
  return self
258
257
  end
259
- ratio_a = Math.sin((1.0. - t) * half_theta) / sin_half_theta,
260
- ratio_b = Math.sin(t * half_theta) / sin_half_theta
258
+ ratio_a = ::Math.sin((1.0. - t) * half_theta) / sin_half_theta,
259
+ ratio_b = ::Math.sin(t * half_theta) / sin_half_theta
261
260
  @w = (_w * ratio_a + @w * ratio_b)
262
261
  @x = (_x * ratio_a + @x * ratio_b)
263
262
  @y = (_y * ratio_a + @y * ratio_b)
@@ -304,6 +303,5 @@ module Mittsu
304
303
  def self.slerp(qa, qb, qm, t)
305
304
  qm.copy(qa).slerp(qb, t)
306
305
  end
307
-
308
306
  end
309
307
  end
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Ray
5
3
  attr_accessor :origin, :direction
@@ -140,7 +138,7 @@ module Mittsu
140
138
  d2 = v1.dot(v1) - tca * tca
141
139
  radius2 = sphere.radius * sphere.radius
142
140
  return nil if d2 > radius2
143
- thc = Math.sqrt(radius2 - d2)
141
+ thc = ::Math.sqrt(radius2 - d2)
144
142
  # t0 = first intersect point - entrance on front of sphere
145
143
  t0 = tca - thc
146
144
  # t1 = second intersect point - exit point on back of sphere
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Sphere
5
3
  attr_accessor :center, :radius
@@ -26,7 +24,7 @@ module Mittsu
26
24
  points.each do |point|
27
25
  max_radius_sq = [max_radius_sq, c.distance_to_squared(point)].max
28
26
  end
29
- @radius = Math.sqrt(max_radius_sq)
27
+ @radius = ::Math.sqrt(max_radius_sq)
30
28
  self
31
29
  end
32
30
 
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Spline
5
3
  Point = Struct.new(:x, :y, :z)
@@ -1,5 +1,3 @@
1
- require 'mittsu/math'
2
-
3
1
  module Mittsu
4
2
  class Triangle
5
3
  attr_accessor :a, :b, :c
@@ -73,7 +71,7 @@ module Mittsu
73
71
 
74
72
  result_length_sq = target.length_sq
75
73
  if (result_length_sq > 0)
76
- target.multiply_scalar(1.0 / Math.sqrt(result_length_sq))
74
+ target.multiply_scalar(1.0 / ::Math.sqrt(result_length_sq))
77
75
  else
78
76
  target.set(0.0, 0.0, 0.0)
79
77
  end
@@ -1,6 +1,6 @@
1
1
  module Mittsu
2
2
  class Vector
3
- attr_accessor :elements
3
+ attr_accessor :elements, :uv, :index
4
4
 
5
5
  def initialize(elements)
6
6
  @elements = elements
@@ -160,7 +160,7 @@ module Mittsu
160
160
  end
161
161
 
162
162
  def length
163
- Math.sqrt(length_sq)
163
+ ::Math.sqrt(length_sq)
164
164
  end
165
165
 
166
166
  def normalize
@@ -211,11 +211,11 @@ module Mittsu
211
211
  theta = self.dot(v) / (self.length * v.length)
212
212
 
213
213
  # clamp, to handle numerical problems
214
- Math.acos(Math.clamp(theta, -1.0, 1.0))
214
+ ::Math.acos(Math.clamp(theta, -1.0, 1.0))
215
215
  end
216
216
 
217
217
  def distance_to(v)
218
- Math.sqrt(self.distance_to_squared(v))
218
+ ::Math.sqrt(self.distance_to_squared(v))
219
219
  end
220
220
 
221
221
  def ==(v)
@@ -1,4 +1,3 @@
1
- require 'mittsu/math'
2
1
  require 'mittsu/math/vector'
3
2
 
4
3
  module Mittsu
@@ -1,4 +1,3 @@
1
- require 'mittsu/math'
2
1
  require 'mittsu/math/vector'
3
2
 
4
3
  module Mittsu
@@ -1,4 +1,3 @@
1
- require 'mittsu/math'
2
1
  require 'mittsu/math/vector'
3
2
 
4
3
  module Mittsu
@@ -50,8 +49,8 @@ module Mittsu
50
49
  def set_axis_angle_from_quaternion(q)
51
50
  # http:#www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
52
51
  # q is assumed to be normalized
53
- @elements[3] = 2.0 * Math.acos(q.w)
54
- s = Math.sqrt(1.0 - q.w * q.w)
52
+ @elements[3] = 2.0 * ::Math.acos(q.w)
53
+ s = ::Math.sqrt(1.0 - q.w * q.w)
55
54
  if s < 0.0001
56
55
  @elements[0] = 1.0
57
56
  @elements[1] = 0.0
@@ -89,7 +88,7 @@ module Mittsu
89
88
  return self # zero angle, arbitrary axis
90
89
  end
91
90
  # otherwise self singularity is angle = 180
92
- angle = Math::PI
91
+ angle = ::Math::PI
93
92
  xx = (m11 + 1.0) / 2.0
94
93
  yy = (m22 + 1.0) / 2.0
95
94
  zz = (m33 + 1.0) / 2.0
@@ -102,7 +101,7 @@ module Mittsu
102
101
  y1 = 0.707106781
103
102
  z1 = 0.707106781
104
103
  else
105
- x1 = Math.sqrt(xx)
104
+ x1 = ::Math.sqrt(xx)
106
105
  y1 = xy / x1
107
106
  z1 = xz / x1
108
107
  end
@@ -112,7 +111,7 @@ module Mittsu
112
111
  y1 = 0.0
113
112
  z1 = 0.707106781
114
113
  else
115
- y1 = Math.sqrt(yy)
114
+ y1 = ::Math.sqrt(yy)
116
115
  x1 = xy / y1
117
116
  z1 = yz / y1
118
117
  end
@@ -122,7 +121,7 @@ module Mittsu
122
121
  y1 = 0.707106781
123
122
  z1 = 0.0
124
123
  else
125
- z1 = Math.sqrt(zz)
124
+ z1 = ::Math.sqrt(zz)
126
125
  x1 = xz / z1
127
126
  y1 = yz / z1
128
127
  end
@@ -131,7 +130,7 @@ module Mittsu
131
130
  return self # return 180 deg rotation
132
131
  end
133
132
  # as we have reached here there are no singularities so we can handle normally
134
- s = Math.sqrt((m32 - m23) * (m32 - m23) +
133
+ s = ::Math.sqrt((m32 - m23) * (m32 - m23) +
135
134
  (m13 - m31) * (m13 - m31) +
136
135
  (m21 - m12) * (m21 - m12)) # used to normalize
137
136
  s = 1.0 if (s.abs < 0.001)
@@ -140,7 +139,7 @@ module Mittsu
140
139
  @elements[0] = (m32 - m23) / s
141
140
  @elements[1] = (m13 - m31) / s
142
141
  @elements[2] = (m21 - m12) / s
143
- @elements[3] = Math.acos((m11 + m22 + m33 - 1.0) / 2.0)
142
+ @elements[3] = ::Math.acos((m11 + m22 + m33 - 1.0) / 2.0)
144
143
  self
145
144
  end
146
145
 
@@ -54,7 +54,6 @@ module Mittsu
54
54
  offsets.each_with_index do |offset, oi|
55
55
  start = offset[:start]
56
56
  count = offset[:count]
57
- index = offset[:index]
58
57
 
59
58
  (start...(count-1)).step(step).each do |i|
60
59
  v_start.from_array(positions, a * 3)
@@ -34,7 +34,7 @@ module Mittsu
34
34
 
35
35
  def file
36
36
  matches = Dir.glob('/usr/local/lib/libglfw*.dylib').map { |path| File.basename(path) }
37
- return matches.find('libglfw3.dylib') || matches.find('libglfw.3.dylib') || matches.first
37
+ return matches.find { |m| m == 'libglfw3.dylib' || m == 'libglfw.3.dylib' } || matches.first
38
38
  end
39
39
  end
40
40
  end
@@ -1,7 +1,7 @@
1
1
  require 'opengl'
2
2
  require 'glfw'
3
3
 
4
- require 'mittsu'
4
+ require 'mittsu/utils'
5
5
  require 'mittsu/renderers/glfw_lib'
6
6
  glfw_lib = Mittsu::GLFWLib.discover
7
7
  GLFW.load_lib(ENV["MITTSU_LIBGLFW_FILE"] || glfw_lib.file, ENV["MITTSU_LIBGLFW_PATH"] || glfw_lib.path) unless Mittsu.test?
@@ -1,6 +1,6 @@
1
1
  module Mittsu
2
2
  class Object3D
3
- attr_accessor :morph_target_influences, :renderer
3
+ attr_accessor :morph_target_influences, :renderer, :initted
4
4
  attr_reader :model_view_matrix
5
5
  attr_writer :active
6
6
 
@@ -35,7 +35,7 @@ module Mittsu
35
35
  directions[offset + 1] = @_direction.y
36
36
  directions[offset + 2] = @_direction.z
37
37
 
38
- @cache.angles_cos[index] = Math.cos(angle)
38
+ @cache.angles_cos[index] = ::Math.cos(angle)
39
39
  @cache.exponents[index] = exponent;
40
40
  @cache.decays[index] = distance.zero? ? 0.0 : decay
41
41
  end
@@ -20,6 +20,7 @@ module Mittsu
20
20
  @num_morph_normals = num_morph_normals
21
21
 
22
22
  @renderer = renderer
23
+ @custom_attributes_list = []
23
24
  end
24
25
 
25
26
  def create_mesh_buffers
@@ -1,10 +1,9 @@
1
1
  require 'erb'
2
-
3
2
  require 'mittsu/renderers/opengl/opengl_shader'
4
3
 
5
4
  module Mittsu
6
5
  class OpenGLProgram
7
- attr_reader :id, :program, :uniforms, :attributes
6
+ attr_reader :id, :program, :uniforms
8
7
  attr_accessor :code, :used_times, :attributes, :vertex_shader, :fragment_shader
9
8
 
10
9
  def initialize(renderer, code, material, parameters)