mittsu 0.1.2 → 0.1.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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/mittsu.rb +8 -0
  4. data/lib/mittsu/core/face3.rb +1 -1
  5. data/lib/mittsu/core/geometry.rb +0 -4
  6. data/lib/mittsu/core/object_3d.rb +7 -6
  7. data/lib/mittsu/extras/helpers/camera_helper.rb +2 -2
  8. data/lib/mittsu/materials/material.rb +0 -4
  9. data/lib/mittsu/renderers/opengl/core/{opengl_geometry.rb → geometry.rb} +23 -32
  10. data/lib/mittsu/renderers/opengl/core/{opengl_object_3d.rb → object_3d.rb} +20 -24
  11. data/lib/mittsu/renderers/opengl/lights/{opengl_ambient_light.rb → ambient_light.rb} +4 -4
  12. data/lib/mittsu/renderers/opengl/lights/{opengl_directional_light.rb → directional_light.rb} +4 -4
  13. data/lib/mittsu/renderers/opengl/lights/{opengl_hemisphere_light.rb → hemisphere_light.rb} +4 -7
  14. data/lib/mittsu/renderers/opengl/lights/light.rb +55 -0
  15. data/lib/mittsu/renderers/opengl/lights/{opengl_point_light.rb → point_light.rb} +5 -5
  16. data/lib/mittsu/renderers/opengl/lights/{opengl_spot_light.rb → spot_light.rb} +8 -8
  17. data/lib/mittsu/renderers/opengl/materials/{opengl_line_basic_material.rb → line_basic_material.rb} +3 -3
  18. data/lib/mittsu/renderers/opengl/materials/{opengl_material.rb → material.rb} +55 -56
  19. data/lib/mittsu/renderers/opengl/materials/mesh_basic_material.rb +21 -0
  20. data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_lambert_material.rb → mesh_lambert_material.rb} +9 -5
  21. data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_phong_material.rb → mesh_phong_material.rb} +11 -7
  22. data/lib/mittsu/renderers/opengl/materials/opengl_material_basics.rb +57 -0
  23. data/lib/mittsu/renderers/opengl/materials/{opengl_shader_material.rb → shader_material.rb} +1 -1
  24. data/lib/mittsu/renderers/opengl/objects/group.rb +9 -0
  25. data/lib/mittsu/renderers/opengl/objects/line.rb +45 -0
  26. data/lib/mittsu/renderers/opengl/objects/{opengl_mesh.rb → mesh.rb} +15 -22
  27. data/lib/mittsu/renderers/opengl/opengl_buffer.rb +4 -0
  28. data/lib/mittsu/renderers/opengl/opengl_debug.rb +5 -4
  29. data/lib/mittsu/renderers/opengl/opengl_default_target.rb +0 -4
  30. data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +2 -8
  31. data/lib/mittsu/renderers/opengl/opengl_geometry_like.rb +2 -1
  32. data/lib/mittsu/renderers/opengl/opengl_implementations.rb +24 -53
  33. data/lib/mittsu/renderers/opengl/opengl_lib.rb +62 -0
  34. data/lib/mittsu/renderers/opengl/opengl_light_renderer.rb +6 -6
  35. data/lib/mittsu/renderers/opengl/opengl_program.rb +3 -5
  36. data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +11 -12
  37. data/lib/mittsu/renderers/opengl/scenes/scene.rb +9 -0
  38. data/lib/mittsu/renderers/opengl/textures/{opengl_compressed_texture.rb → compressed_texture.rb} +5 -6
  39. data/lib/mittsu/renderers/opengl/textures/{opengl_cube_texture.rb → cube_texture.rb} +23 -21
  40. data/lib/mittsu/renderers/opengl/textures/{opengl_data_texture.rb → data_texture.rb} +3 -5
  41. data/lib/mittsu/renderers/opengl/textures/{opengl_texture.rb → texture.rb} +29 -33
  42. data/lib/mittsu/renderers/opengl_render_target.rb +5 -6
  43. data/lib/mittsu/renderers/opengl_renderer.rb +35 -44
  44. data/lib/mittsu/textures/texture.rb +0 -4
  45. data/lib/mittsu/version.rb +1 -1
  46. metadata +26 -24
  47. data/lib/mittsu/renderers/opengl/lights/opengl_light.rb +0 -52
  48. data/lib/mittsu/renderers/opengl/materials/opengl_mesh_basic_material.rb +0 -69
  49. data/lib/mittsu/renderers/opengl/objects/opengl_group.rb +0 -8
  50. data/lib/mittsu/renderers/opengl/objects/opengl_line.rb +0 -54
  51. data/lib/mittsu/renderers/opengl/scenes/opengl_scene.rb +0 -8
@@ -1,5 +1,5 @@
1
1
  module Mittsu
2
- class OpenGLShaderMaterial < OpenGLMaterial
2
+ class ShaderMaterial
3
3
  def needs_camera_position_uniform?
4
4
  true
5
5
  end
@@ -0,0 +1,9 @@
1
+ module Mittsu
2
+ class Group
3
+ def project(renderer)
4
+ @renderer = renderer
5
+ return unless visible
6
+ project_children
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,45 @@
1
+ module Mittsu
2
+ class Line
3
+ def render_buffer(camera, lights, fog, material, geometry_group, update_buffers)
4
+ opengl_mode = mode == LineStrip ? GL_LINE_STRIP : GL_LINES
5
+
6
+ @renderer.state.set_line_width(material.line_width * @renderer.pixel_ratio)
7
+
8
+ glDrawArrays(opengl_mode, 0, geometry_group.line_count)
9
+
10
+ @renderer.info[:render][:calls] += 1
11
+ end
12
+
13
+ def update
14
+ # TODO: glBindVertexArray ???
15
+ material = buffer_material(geometry)
16
+ custom_attributes_dirty = material.attributes && material.custom_attributes_dirty?
17
+
18
+ if geometry.vertices_need_update || geometry.colors_need_update || geometry.line_distances_need_update || custom_attributes_dirty
19
+ geometry.set_line_buffers(GL_DYNAMIC_DRAW)
20
+ end
21
+
22
+ geometry.vertices_need_update = false
23
+ geometry.colors_need_update = false
24
+ geometry.line_distances_need_update = false
25
+
26
+ material.attributes && material.clear_custom_attributes
27
+ end
28
+
29
+ def init_geometry
30
+ geometry.renderer = @renderer
31
+ if geometry.vertex_buffer.nil?
32
+ geometry.create_line_buffers
33
+ geometry.init_line_buffers(self)
34
+
35
+ geometry.vertices_need_update = true
36
+ geometry.colors_need_update = true
37
+ geometry.line_distances_need_update
38
+ end
39
+ end
40
+
41
+ def add_opengl_object
42
+ @renderer.add_opengl_object(geometry, self)
43
+ end
44
+ end
45
+ end
@@ -1,9 +1,6 @@
1
1
  module Mittsu
2
- class OpenGLMesh < OpenGLObject3D
3
- def initialize(mesh, renderer)
4
- super
5
- @mesh = mesh
6
- end
2
+ class Mesh
3
+ attr_accessor :renderer
7
4
 
8
5
  def render_buffer(camera, lights, fog, material, geometry_group, update_buffers)
9
6
  type = GL_UNSIGNED_INT # geometry_group.type_array == Uint32Array ? GL_UNSIGNED_INT : GL_UNSIGNED_SHORT
@@ -28,21 +25,16 @@ module Mittsu
28
25
 
29
26
  def update
30
27
  # check all geometry groubs
31
- geometry = @mesh.geometry
32
- geometry_impl = geometry.implementation(self)
33
-
34
- material = nil
35
- material_impl = nil
36
- geometry_impl.groups.each do |geometry_group|
28
+ mat = nil
29
+ geometry.groups.each do |geometry_group|
37
30
  # TODO: place to put this???
38
31
  # glBindVertexArray(geometry_group.vertex_array_object)
39
- material = buffer_material(geometry_group)
40
- material_impl = material.implementation(@renderer)
32
+ mat = buffer_material(geometry_group)
41
33
 
42
- custom_attributes_dirty = material.attributes && material_impl.custom_attributes_dirty?
34
+ custom_attributes_dirty = mat.attributes && mat.custom_attributes_dirty?
43
35
 
44
36
  if geometry.vertices_need_update || geometry.morph_targets_need_update || geometry.elements_need_update || geometry.uvs_need_update || geometry.normals_need_update || geometry.colors_need_update || geometry.tangents_need_update || custom_attributes_dirty
45
- geometry_group.set_mesh_buffers(@mesh, GL_DYNAMIC_DRAW, !geometry.dynamic, material)
37
+ geometry_group.set_mesh_buffers(self, GL_DYNAMIC_DRAW, !geometry.dynamic, mat)
46
38
  end
47
39
  end
48
40
 
@@ -54,23 +46,24 @@ module Mittsu
54
46
  geometry.colors_need_update = false
55
47
  geometry.tangents_need_update = false
56
48
 
57
- material.attributes && material_impl.clear_custom_attributes(material)
49
+ mat.attributes && mat.clear_custom_attributes
58
50
  end
59
51
 
60
52
  def init_geometry
61
- @object.geometry.implementation(@renderer).init_geometry_groups(@object)
53
+ geometry.renderer = @renderer
54
+ geometry.init_geometry_groups(self)
62
55
  end
63
56
 
64
57
  def add_opengl_object
65
- geometry = @object.geometry
66
58
  case geometry
67
59
  when BufferGeometry
68
- @renderer.add_opengl_object(geometry, @object)
60
+ @renderer.add_opengl_object(geometry, self)
69
61
  when Geometry
70
- geometry_impl = geometry.implementation(self)
71
- geometry_impl.groups.each do |group|
72
- @renderer.add_opengl_object(group, @object)
62
+ geometry.groups.each do |group|
63
+ @renderer.add_opengl_object(group, self)
73
64
  end
65
+ else
66
+ raise "GEOMETRY IS NULL"
74
67
  end
75
68
  end
76
69
  end
@@ -1,5 +1,9 @@
1
1
  module Mittsu
2
2
  class OpenGLBuffer < Struct.new(:buffer, :object, :material, :z)
3
3
  attr_accessor :render, :transparent, :opaque
4
+
5
+ def name
6
+ "BUFFER(#{object.name})"
7
+ end
4
8
  end
5
9
  end
@@ -31,8 +31,8 @@ module OpenGLDebug
31
31
  extend OpenGL
32
32
  end
33
33
 
34
- def self.load_lib
35
- OpenGL.load_lib
34
+ def self.load_lib(*args)
35
+ OpenGL.load_lib(*args)
36
36
  end
37
37
 
38
38
  OpenGL.constants.each do |c|
@@ -40,15 +40,16 @@ module OpenGLDebug
40
40
  end
41
41
 
42
42
  def call_debug_method m, *args
43
- r = OpenGLProxy.send(m, *args)
44
43
  if m.to_s.start_with?('glUniform')
45
44
  uniform_name = @@current_shader.get_uniform_name(args.first)
46
45
  call = "#{m}('#{uniform_name}',#{args[1..-1].map { |s| s.to_s[0..20] }.join(', ')})"
47
46
  else
48
47
  call = "#{m}(#{args.map { |s| s.to_s[0..20] }.join(', ')})"
49
48
  end
49
+ print call
50
+ r = OpenGLProxy.send(m, *args)
50
51
  ret = r.nil? ? '' : " => #{r}"
51
- puts "#{call}#{ret} (#{caller[0]})"
52
+ puts "#{ret} (#{caller[0]})"
52
53
  e = OpenGLProxy.glGetError
53
54
  raise "ERROR: #{m} => #{ERROR_STRINGS[e]}" unless e == OpenGL::GL_NO_ERROR
54
55
  r
@@ -46,9 +46,5 @@ module Mittsu
46
46
  def set_viewport_size(width, height)
47
47
  @viewport_width, @viewport_height = width, height
48
48
  end
49
-
50
- def implementation(_)
51
- self
52
- end
53
49
  end
54
50
  end
@@ -57,7 +57,6 @@ module Mittsu
57
57
 
58
58
  def init_mesh_buffers(object)
59
59
  geometry = object.geometry
60
- object_impl = object.implementation(@renderer)
61
60
 
62
61
  nvertices = @faces3.length * 3
63
62
  nvertices2 = nvertices * 2
@@ -66,7 +65,7 @@ module Mittsu
66
65
  ntris = @faces3.length * 1
67
66
  nlines = @faces3.length * 3
68
67
 
69
- material = object_impl.buffer_material(self)
68
+ material = object.buffer_material(self)
70
69
 
71
70
  @vertex_array = Array.new(nvertices3) # Float32Array
72
71
  @normal_array = Array.new(nvertices3) # Float32Array
@@ -159,9 +158,8 @@ module Mittsu
159
158
  return unless @initted_arrays
160
159
 
161
160
  geometry = object.geometry
162
- material_impl = material.implementation(@renderer)
163
161
 
164
- needs_face_normals = material_impl.needs_face_normals?
162
+ needs_face_normals = material.needs_face_normals?
165
163
 
166
164
  vertex_index = 0
167
165
 
@@ -755,9 +753,5 @@ module Mittsu
755
753
  @skin_index_array = nil
756
754
  @skin_weight_array = nil
757
755
  end
758
-
759
- def implementation(_)
760
- self
761
- end
762
756
  end
763
757
  end
@@ -29,7 +29,8 @@ module Mittsu
29
29
  :line_count,
30
30
  :initted_arrays,
31
31
  :custom_attributes_list,
32
- :num_vertices
32
+ :num_vertices,
33
+ :renderer
33
34
 
34
35
  def bind_vertex_array_object
35
36
  glBindVertexArray(@vertex_array_object) if @vertex_array_object
@@ -5,57 +5,28 @@ require 'mittsu/materials'
5
5
  require 'mittsu/textures'
6
6
  require 'mittsu/scenes'
7
7
 
8
- require 'mittsu/renderers/opengl/core/opengl_geometry'
9
- require 'mittsu/renderers/opengl/core/opengl_object_3d'
10
- require 'mittsu/renderers/opengl/objects/opengl_mesh'
11
- require 'mittsu/renderers/opengl/objects/opengl_line'
12
- require 'mittsu/renderers/opengl/objects/opengl_group'
13
- require 'mittsu/renderers/opengl/scenes/opengl_scene'
14
- require 'mittsu/renderers/opengl/materials/opengl_material'
15
- require 'mittsu/renderers/opengl/materials/opengl_mesh_basic_material'
16
- require 'mittsu/renderers/opengl/materials/opengl_mesh_lambert_material'
17
- require 'mittsu/renderers/opengl/materials/opengl_mesh_phong_material'
18
- require 'mittsu/renderers/opengl/materials/opengl_line_basic_material'
19
- require 'mittsu/renderers/opengl/materials/opengl_shader_material'
20
- require 'mittsu/renderers/opengl/textures/opengl_texture'
21
- require 'mittsu/renderers/opengl/textures/opengl_cube_texture'
22
- require 'mittsu/renderers/opengl/textures/opengl_data_texture'
23
- require 'mittsu/renderers/opengl/textures/opengl_compressed_texture'
24
- require 'mittsu/renderers/opengl/lights/opengl_light'
25
- require 'mittsu/renderers/opengl/lights/opengl_light'
26
- require 'mittsu/renderers/opengl/lights/opengl_spot_light'
27
- require 'mittsu/renderers/opengl/lights/opengl_point_light'
28
- require 'mittsu/renderers/opengl/lights/opengl_hemisphere_light'
29
- require 'mittsu/renderers/opengl/lights/opengl_ambient_light'
30
- require 'mittsu/renderers/opengl/lights/opengl_directional_light'
8
+ require 'mittsu/renderers/opengl/core/geometry'
9
+ require 'mittsu/renderers/opengl/core/object_3d'
10
+ require 'mittsu/renderers/opengl/objects/mesh'
11
+ require 'mittsu/renderers/opengl/objects/line'
12
+ require 'mittsu/renderers/opengl/objects/group'
13
+ require 'mittsu/renderers/opengl/scenes/scene'
31
14
 
32
- module Mittsu
33
- OPENGL_IMPLEMENTATIONS = {
34
- Object3D => OpenGLObject3D,
35
- Geometry => OpenGLGeometry,
36
- Material => OpenGLMaterial,
37
- Texture => OpenGLTexture,
38
- Light => OpenGLLight,
39
- CubeTexture => OpenGLCubeTexture,
40
- Mesh => OpenGLMesh,
41
- Line => OpenGLLine,
42
- SpotLight => OpenGLSpotLight,
43
- PointLight => OpenGLPointLight,
44
- HemisphereLight => OpenGLHemisphereLight,
45
- AmbientLight => OpenGLAmbientLight,
46
- DirectionalLight => OpenGLDirectionalLight,
47
- DataTexture => OpenGLDataTexture,
48
- CompressedTexture => OpenGLCompressedTexture,
49
- Scene => OpenGLScene,
50
- Group => OpenGLGroup,
51
- MeshBasicMaterial => OpenGLMeshBasicMaterial,
52
- MeshLambertMaterial => OpenGLMeshLambertMaterial,
53
- MeshPhongMaterial => OpenGLMeshPhongMaterial,
54
- LineBasicMaterial => OpenGLLineBasicMaterial,
55
- ShaderMaterial => OpenGLShaderMaterial
56
- }
57
- OPENGL_IMPLEMENTATIONS.default_proc = -> (hash, key) {
58
- super_klass = key.ancestors.find { |a| hash.has_key?(a) }
59
- super_klass ? (hash[key] = hash[super_klass]) : nil
60
- }
61
- end
15
+ require 'mittsu/renderers/opengl/lights/light'
16
+ require 'mittsu/renderers/opengl/lights/spot_light'
17
+ require 'mittsu/renderers/opengl/lights/point_light'
18
+ require 'mittsu/renderers/opengl/lights/hemisphere_light'
19
+ require 'mittsu/renderers/opengl/lights/ambient_light'
20
+ require 'mittsu/renderers/opengl/lights/directional_light'
21
+
22
+ require 'mittsu/renderers/opengl/materials/material'
23
+ require 'mittsu/renderers/opengl/materials/mesh_basic_material'
24
+ require 'mittsu/renderers/opengl/materials/mesh_lambert_material'
25
+ require 'mittsu/renderers/opengl/materials/mesh_phong_material'
26
+ require 'mittsu/renderers/opengl/materials/line_basic_material'
27
+ require 'mittsu/renderers/opengl/materials/shader_material'
28
+
29
+ require 'mittsu/renderers/opengl/textures/texture'
30
+ require 'mittsu/renderers/opengl/textures/cube_texture'
31
+ require 'mittsu/renderers/opengl/textures/data_texture'
32
+ require 'mittsu/renderers/opengl/textures/compressed_texture'
@@ -0,0 +1,62 @@
1
+ module OpenGLLib
2
+ def self.discover
3
+ case OpenGL.get_platform
4
+ when :OPENGL_PLATFORM_WINDOWS
5
+ Windows.new
6
+ when :OPENGL_PLATFORM_MACOSX
7
+ MacOS.new
8
+ when :OPENGL_PLATFORM_LINUX
9
+ Linux.new
10
+ else
11
+ fail "Unsupported platform."
12
+ end
13
+ end
14
+
15
+ class Linux
16
+ def path
17
+ # http://www.pilotlogic.com/sitejoom/index.php/wiki?id=398<F37>
18
+ # 32 64
19
+ # /usr/lib /usr/lib64 redhat, mandriva
20
+ # /usr/lib32 /usr/lib64 arch, gento
21
+ # /usr/lib /usr/lib64 slackware
22
+ # /usr/lib/i386.. /usr/libx86_64/ debian
23
+ libs = Dir.glob("/usr/lib*/**/libGL.so")
24
+ if libs.size == 0
25
+ puts "no libGL.so"
26
+ exit 1
27
+ end
28
+ case kernel_module_in_use
29
+ when /nvidia/
30
+ return File.dirname(libs.grep(/nvidia/)[0])
31
+ end
32
+ # Get the same architecture that the runnning ruby
33
+ if 1.size == 8 # 64 bits
34
+ File.dirname(libs.grep(/64/)[0])
35
+ else # 32 bits
36
+ File.dirname(libs[0])
37
+ end
38
+ end
39
+
40
+ def file
41
+ 'libGL.so'
42
+ end
43
+
44
+ private
45
+ def kernel_module_in_use
46
+ lspci_line = `lspci -nnk | grep -i vga -A3 | grep 'in use'`
47
+ return /in use:\s*(\S+)/ =~ lspci_line && $1
48
+ end
49
+ end
50
+
51
+ # TODO
52
+ class Windows
53
+ def path; nil; end
54
+ def file; nil; end
55
+ end
56
+
57
+ # TODO
58
+ class MacOS
59
+ def path; nil; end
60
+ def file; nil; end
61
+ end
62
+ end
@@ -3,11 +3,11 @@ module Mittsu
3
3
  attr_accessor :lights_need_update, :cache
4
4
 
5
5
  LIGHT_CLASSES = [
6
- OpenGLAmbientLight,
7
- OpenGLDirectionalLight,
8
- OpenGLPointLight,
9
- OpenGLSpotLight,
10
- OpenGLHemisphereLight
6
+ AmbientLight,
7
+ DirectionalLight,
8
+ PointLight,
9
+ SpotLight,
10
+ HemisphereLight
11
11
  ]
12
12
  LIGHT_TYPES = LIGHT_CLASSES.map { |klass| klass::TYPE }
13
13
 
@@ -25,7 +25,7 @@ module Mittsu
25
25
 
26
26
  lights.each do |light|
27
27
  next if light.only_shadow
28
- light.implementation(self).setup
28
+ light.setup(self)
29
29
  end
30
30
 
31
31
  LIGHT_CLASSES.each do |klass|
@@ -13,8 +13,7 @@ module Mittsu
13
13
 
14
14
  compile_and_link_program(material, parameters)
15
15
 
16
- material_impl = material.implementation(@renderer)
17
- cache_uniform_locations(material_impl.shader[:uniforms] || {}, parameters)
16
+ cache_uniform_locations(material.shader[:uniforms] || {}, parameters)
18
17
  cache_attribute_locations(material.attributes || {}, parameters)
19
18
 
20
19
  @code = code
@@ -149,7 +148,6 @@ module Mittsu
149
148
  end
150
149
 
151
150
  def compile_shaders(material, parameters)
152
- material_impl = material.implementation(@renderer)
153
151
  shadow_map_type_define = get_shadow_map_define(parameters[:shadow_map_type])
154
152
 
155
153
  env_map_type_define = get_env_map_type_define(parameters[:env_map], material)
@@ -168,8 +166,8 @@ module Mittsu
168
166
  prefix_fragment = File.read(File.expand_path('../../shaders/shader_templates/fragment.glsl.erb', __FILE__))
169
167
  end
170
168
 
171
- @vertex_shader = OpenGLShader.new(GL_VERTEX_SHADER, compile_shader_template(prefix_vertex + material_impl.shader[:vertex_shader], binding))
172
- @fragment_shader = OpenGLShader.new(GL_FRAGMENT_SHADER, compile_shader_template(prefix_fragment + material_impl.shader[:fragment_shader], binding))
169
+ @vertex_shader = OpenGLShader.new(GL_VERTEX_SHADER, compile_shader_template(prefix_vertex + material.shader[:vertex_shader], binding))
170
+ @fragment_shader = OpenGLShader.new(GL_FRAGMENT_SHADER, compile_shader_template(prefix_fragment + material.shader[:fragment_shader], binding))
173
171
 
174
172
  glAttachShader(@program, @vertex_shader.shader)
175
173
  glAttachShader(@program, @fragment_shader.shader)
@@ -49,10 +49,10 @@ module Mittsu
49
49
  skinning: true
50
50
  )
51
51
 
52
- @depth_material.implementation(renderer).shadow_pass = true
53
- @depth_material_morph.implementation(renderer).shadow_pass = true
54
- @depth_material_skin.implementation(renderer).shadow_pass = true
55
- @depth_material_morph_skin.implementation(renderer).shadow_pass = true
52
+ @depth_material.shadow_pass = true
53
+ @depth_material_morph.shadow_pass = true
54
+ @depth_material_skin.shadow_pass = true
55
+ @depth_material_morph_skin.shadow_pass = true
56
56
  end
57
57
 
58
58
  def render(scene, camera)
@@ -122,6 +122,7 @@ module Mittsu
122
122
  pars = { min_filter: shadow_filter, mag_filter: shadow_filter, format: RGBAFormat }
123
123
 
124
124
  light.shadow_map = OpenGLRenderTarget.new(light.shadow_map_width, light.shadow_map_height, pars)
125
+ light.shadow_map.renderer = @renderer
125
126
  light.shadow_map_size = Vector2.new(light.shadow_map_width, light.shadow_map_height)
126
127
 
127
128
  light.shadow_matrix = Matrix4.new
@@ -142,10 +143,9 @@ module Mittsu
142
143
  scene.update_matrix_world if scene.auto_update
143
144
  end
144
145
 
145
- light_impl = light.implementation(@renderer)
146
- if light.shadow_camera_visible && !light_impl.camera_helper
147
- light_impl.camera_helper = CameraHelper.new(light.shadow_camera)
148
- scene.add(light_impl.camera_helper)
146
+ if light.shadow_camera_visible && !light.camera_helper
147
+ light.camera_helper = CameraHelper.new(light.shadow_camera)
148
+ scene.add(light.camera_helper)
149
149
  end
150
150
 
151
151
  if light.virtual? && virtual_light.original_camera == camera
@@ -168,8 +168,8 @@ module Mittsu
168
168
  #
169
169
 
170
170
 
171
- light_impl.camera_helper.visible = light.shadow_camera_visible if light_impl.camera_helper
172
- light_impl.camera_helper.update if light.shadow_camera_visible
171
+ light.camera_helper.visible = light.shadow_camera_visible if light.camera_helper
172
+ light.camera_helper.update_points if light.shadow_camera_visible
173
173
 
174
174
  # compute shadow matrix
175
175
 
@@ -274,8 +274,7 @@ module Mittsu
274
274
 
275
275
  if opengl_objects && object.cast_shadow && (object.frustum_culled == false || @frustum.intersects_object?(object) == true)
276
276
  opengl_objects.each do |opengl_object|
277
- object_impl = object.implementation(@renderer)
278
- object_impl.model_view_matrix.multiply_matrices(shadow_camera.matrix_world_inverse, object.matrix_world)
277
+ object.model_view_matrix.multiply_matrices(shadow_camera.matrix_world_inverse, object.matrix_world)
279
278
  @render_list << opengl_object
280
279
  end
281
280
  end