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.
- checksums.yaml +4 -4
 - data/README.md +1 -1
 - data/lib/mittsu.rb +8 -0
 - data/lib/mittsu/core/face3.rb +1 -1
 - data/lib/mittsu/core/geometry.rb +0 -4
 - data/lib/mittsu/core/object_3d.rb +7 -6
 - data/lib/mittsu/extras/helpers/camera_helper.rb +2 -2
 - data/lib/mittsu/materials/material.rb +0 -4
 - data/lib/mittsu/renderers/opengl/core/{opengl_geometry.rb → geometry.rb} +23 -32
 - data/lib/mittsu/renderers/opengl/core/{opengl_object_3d.rb → object_3d.rb} +20 -24
 - data/lib/mittsu/renderers/opengl/lights/{opengl_ambient_light.rb → ambient_light.rb} +4 -4
 - data/lib/mittsu/renderers/opengl/lights/{opengl_directional_light.rb → directional_light.rb} +4 -4
 - data/lib/mittsu/renderers/opengl/lights/{opengl_hemisphere_light.rb → hemisphere_light.rb} +4 -7
 - data/lib/mittsu/renderers/opengl/lights/light.rb +55 -0
 - data/lib/mittsu/renderers/opengl/lights/{opengl_point_light.rb → point_light.rb} +5 -5
 - data/lib/mittsu/renderers/opengl/lights/{opengl_spot_light.rb → spot_light.rb} +8 -8
 - data/lib/mittsu/renderers/opengl/materials/{opengl_line_basic_material.rb → line_basic_material.rb} +3 -3
 - data/lib/mittsu/renderers/opengl/materials/{opengl_material.rb → material.rb} +55 -56
 - data/lib/mittsu/renderers/opengl/materials/mesh_basic_material.rb +21 -0
 - data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_lambert_material.rb → mesh_lambert_material.rb} +9 -5
 - data/lib/mittsu/renderers/opengl/materials/{opengl_mesh_phong_material.rb → mesh_phong_material.rb} +11 -7
 - data/lib/mittsu/renderers/opengl/materials/opengl_material_basics.rb +57 -0
 - data/lib/mittsu/renderers/opengl/materials/{opengl_shader_material.rb → shader_material.rb} +1 -1
 - data/lib/mittsu/renderers/opengl/objects/group.rb +9 -0
 - data/lib/mittsu/renderers/opengl/objects/line.rb +45 -0
 - data/lib/mittsu/renderers/opengl/objects/{opengl_mesh.rb → mesh.rb} +15 -22
 - data/lib/mittsu/renderers/opengl/opengl_buffer.rb +4 -0
 - data/lib/mittsu/renderers/opengl/opengl_debug.rb +5 -4
 - data/lib/mittsu/renderers/opengl/opengl_default_target.rb +0 -4
 - data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +2 -8
 - data/lib/mittsu/renderers/opengl/opengl_geometry_like.rb +2 -1
 - data/lib/mittsu/renderers/opengl/opengl_implementations.rb +24 -53
 - data/lib/mittsu/renderers/opengl/opengl_lib.rb +62 -0
 - data/lib/mittsu/renderers/opengl/opengl_light_renderer.rb +6 -6
 - data/lib/mittsu/renderers/opengl/opengl_program.rb +3 -5
 - data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +11 -12
 - data/lib/mittsu/renderers/opengl/scenes/scene.rb +9 -0
 - data/lib/mittsu/renderers/opengl/textures/{opengl_compressed_texture.rb → compressed_texture.rb} +5 -6
 - data/lib/mittsu/renderers/opengl/textures/{opengl_cube_texture.rb → cube_texture.rb} +23 -21
 - data/lib/mittsu/renderers/opengl/textures/{opengl_data_texture.rb → data_texture.rb} +3 -5
 - data/lib/mittsu/renderers/opengl/textures/{opengl_texture.rb → texture.rb} +29 -33
 - data/lib/mittsu/renderers/opengl_render_target.rb +5 -6
 - data/lib/mittsu/renderers/opengl_renderer.rb +35 -44
 - data/lib/mittsu/textures/texture.rb +0 -4
 - data/lib/mittsu/version.rb +1 -1
 - metadata +26 -24
 - data/lib/mittsu/renderers/opengl/lights/opengl_light.rb +0 -52
 - data/lib/mittsu/renderers/opengl/materials/opengl_mesh_basic_material.rb +0 -69
 - data/lib/mittsu/renderers/opengl/objects/opengl_group.rb +0 -8
 - data/lib/mittsu/renderers/opengl/objects/opengl_line.rb +0 -54
 - data/lib/mittsu/renderers/opengl/scenes/opengl_scene.rb +0 -8
 
| 
         @@ -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  
     | 
| 
       3 
     | 
    
         
            -
                 
     | 
| 
       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 
     | 
    
         
            -
                   
     | 
| 
       32 
     | 
    
         
            -
                   
     | 
| 
       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 
     | 
    
         
            -
                     
     | 
| 
       40 
     | 
    
         
            -
                    material_impl = material.implementation(@renderer)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    mat = buffer_material(geometry_group)
         
     | 
| 
       41 
33 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
                    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( 
     | 
| 
      
 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 
     | 
    
         
            -
                   
     | 
| 
      
 49 
     | 
    
         
            +
                  mat.attributes && mat.clear_custom_attributes
         
     | 
| 
       58 
50 
     | 
    
         
             
                end
         
     | 
| 
       59 
51 
     | 
    
         | 
| 
       60 
52 
     | 
    
         
             
                def init_geometry
         
     | 
| 
       61 
     | 
    
         
            -
                   
     | 
| 
      
 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,  
     | 
| 
      
 60 
     | 
    
         
            +
                    @renderer.add_opengl_object(geometry, self)
         
     | 
| 
       69 
61 
     | 
    
         
             
                  when Geometry
         
     | 
| 
       70 
     | 
    
         
            -
                     
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       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
         
     | 
| 
         @@ -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 "#{ 
     | 
| 
      
 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
         
     | 
| 
         @@ -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 =  
     | 
| 
      
 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 =  
     | 
| 
      
 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
         
     | 
| 
         @@ -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/ 
     | 
| 
       9 
     | 
    
         
            -
            require 'mittsu/renderers/opengl/core/ 
     | 
| 
       10 
     | 
    
         
            -
            require 'mittsu/renderers/opengl/objects/ 
     | 
| 
       11 
     | 
    
         
            -
            require 'mittsu/renderers/opengl/objects/ 
     | 
| 
       12 
     | 
    
         
            -
            require 'mittsu/renderers/opengl/objects/ 
     | 
| 
       13 
     | 
    
         
            -
            require 'mittsu/renderers/opengl/scenes/ 
     | 
| 
       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 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       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 
     | 
    
         
            -
                   
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
       8 
     | 
    
         
            -
                   
     | 
| 
       9 
     | 
    
         
            -
                   
     | 
| 
       10 
     | 
    
         
            -
                   
     | 
| 
      
 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. 
     | 
| 
      
 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 
     | 
    
         
            -
                   
     | 
| 
       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 +  
     | 
| 
       172 
     | 
    
         
            -
                  @fragment_shader = OpenGLShader.new(GL_FRAGMENT_SHADER, compile_shader_template(prefix_fragment +  
     | 
| 
      
 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. 
     | 
| 
       53 
     | 
    
         
            -
                  @depth_material_morph. 
     | 
| 
       54 
     | 
    
         
            -
                  @depth_material_skin. 
     | 
| 
       55 
     | 
    
         
            -
                  @depth_material_morph_skin. 
     | 
| 
      
 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 
     | 
    
         
            -
                     
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
                       
     | 
| 
       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 
     | 
    
         
            -
                     
     | 
| 
       172 
     | 
    
         
            -
                     
     | 
| 
      
 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 
     | 
    
         
            -
                         
     | 
| 
       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
         
     |