mittsu 0.2.3 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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)