mittsu 0.1.1 → 0.1.2

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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -1
  3. data/README.md +1 -1
  4. data/lib/mittsu/cameras/orthographic_camera.rb +13 -0
  5. data/lib/mittsu/cameras/perspective_camera.rb +11 -0
  6. data/lib/mittsu/core/geometry.rb +12 -9
  7. data/lib/mittsu/core/object_3d.rb +33 -66
  8. data/lib/mittsu/lights/ambient_light.rb +8 -0
  9. data/lib/mittsu/lights/directional_light.rb +9 -0
  10. data/lib/mittsu/lights/hemisphere_light.rb +9 -0
  11. data/lib/mittsu/lights/point_light.rb +11 -0
  12. data/lib/mittsu/lights/spot_light.rb +13 -0
  13. data/lib/mittsu/loaders.rb +1 -0
  14. data/lib/mittsu/loaders/mtl_loader.rb +5 -12
  15. data/lib/mittsu/loaders/obj_loader.rb +212 -0
  16. data/lib/mittsu/loaders/obj_mtl_loader.rb +11 -207
  17. data/lib/mittsu/materials/material.rb +5 -2
  18. data/lib/mittsu/materials/mesh_basic_material.rb +0 -9
  19. data/lib/mittsu/math/color.rb +44 -104
  20. data/lib/mittsu/math/matrix3.rb +8 -1
  21. data/lib/mittsu/math/matrix4.rb +6 -0
  22. data/lib/mittsu/math/vector.rb +251 -0
  23. data/lib/mittsu/math/vector2.rb +14 -213
  24. data/lib/mittsu/math/vector3.rb +61 -351
  25. data/lib/mittsu/math/vector4.rb +45 -295
  26. data/lib/mittsu/objects/line.rb +12 -2
  27. data/lib/mittsu/objects/mesh.rb +18 -9
  28. data/lib/mittsu/renderers/glfw_window.rb +15 -13
  29. data/lib/mittsu/renderers/opengl/core/opengl_geometry.rb +253 -0
  30. data/lib/mittsu/renderers/opengl/core/opengl_object_3d.rb +131 -0
  31. data/lib/mittsu/renderers/opengl/lights/opengl_ambient_light.rb +26 -0
  32. data/lib/mittsu/renderers/opengl/lights/opengl_directional_light.rb +35 -0
  33. data/lib/mittsu/renderers/opengl/lights/opengl_hemisphere_light.rb +42 -0
  34. data/lib/mittsu/renderers/opengl/lights/opengl_light.rb +52 -0
  35. data/lib/mittsu/renderers/opengl/lights/opengl_point_light.rb +36 -0
  36. data/lib/mittsu/renderers/opengl/lights/opengl_spot_light.rb +47 -0
  37. data/lib/mittsu/renderers/opengl/materials/opengl_line_basic_material.rb +16 -0
  38. data/lib/mittsu/renderers/opengl/materials/opengl_material.rb +275 -0
  39. data/lib/mittsu/renderers/opengl/materials/opengl_mesh_basic_material.rb +69 -0
  40. data/lib/mittsu/renderers/opengl/materials/opengl_mesh_lambert_material.rb +29 -0
  41. data/lib/mittsu/renderers/opengl/materials/opengl_mesh_phong_material.rb +40 -0
  42. data/lib/mittsu/renderers/opengl/materials/opengl_shader_material.rb +11 -0
  43. data/lib/mittsu/renderers/opengl/objects/opengl_group.rb +8 -0
  44. data/lib/mittsu/renderers/opengl/objects/opengl_line.rb +54 -0
  45. data/lib/mittsu/renderers/opengl/objects/opengl_mesh.rb +77 -0
  46. data/lib/mittsu/renderers/opengl/opengl_buffer.rb +5 -0
  47. data/lib/mittsu/renderers/opengl/opengl_debug.rb +49 -7
  48. data/lib/mittsu/renderers/opengl/opengl_default_target.rb +54 -0
  49. data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +763 -0
  50. data/lib/mittsu/renderers/opengl/opengl_geometry_like.rb +130 -0
  51. data/lib/mittsu/renderers/opengl/opengl_helper.rb +161 -0
  52. data/lib/mittsu/renderers/opengl/opengl_implementations.rb +61 -0
  53. data/lib/mittsu/renderers/opengl/opengl_light_renderer.rb +43 -0
  54. data/lib/mittsu/renderers/opengl/opengl_mittsu_params.rb +53 -0
  55. data/lib/mittsu/renderers/opengl/opengl_program.rb +147 -296
  56. data/lib/mittsu/renderers/opengl/opengl_state.rb +3 -5
  57. data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +12 -10
  58. data/lib/mittsu/renderers/opengl/scenes/opengl_scene.rb +8 -0
  59. data/lib/mittsu/renderers/opengl/textures/opengl_compressed_texture.rb +21 -0
  60. data/lib/mittsu/renderers/opengl/textures/opengl_cube_texture.rb +75 -0
  61. data/lib/mittsu/renderers/opengl/textures/opengl_data_texture.rb +23 -0
  62. data/lib/mittsu/renderers/opengl/textures/opengl_texture.rb +111 -0
  63. data/lib/mittsu/renderers/opengl_render_target.rb +117 -2
  64. data/lib/mittsu/renderers/opengl_renderer.rb +653 -2978
  65. data/lib/mittsu/renderers/shaders/rbsl_loader.rb +166 -0
  66. data/lib/mittsu/renderers/shaders/shader_chunk.rb +6 -9
  67. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_fragment.glsl +36 -37
  68. data/lib/mittsu/renderers/shaders/shader_lib.rb +26 -403
  69. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_fragment.rbsl +37 -0
  70. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_uniforms.rbslu +3 -0
  71. data/lib/mittsu/renderers/shaders/shader_lib/basic/basic_vertex.rbsl +33 -0
  72. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_fragment.rbsl +12 -0
  73. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_uniforms.rbslu +2 -0
  74. data/lib/mittsu/renderers/shaders/shader_lib/cube/cube_vertex.rbsl +12 -0
  75. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_fragment.rbsl +26 -0
  76. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_uniforms.rbslu +0 -0
  77. data/lib/mittsu/renderers/shaders/shader_lib/depth_rgba/depth_rgba_vertex.rbsl +12 -0
  78. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_fragment.rbsl +56 -0
  79. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_uniforms.rbslu +7 -0
  80. data/lib/mittsu/renderers/shaders/shader_lib/lambert/lambert_vertex.rbsl +37 -0
  81. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_fragment.rbsl +45 -0
  82. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_uniforms.rbslu +11 -0
  83. data/lib/mittsu/renderers/shaders/shader_lib/phong/phong_vertex.rbsl +43 -0
  84. data/lib/mittsu/renderers/shaders/shader_templates/fragment.glsl.erb +105 -0
  85. data/lib/mittsu/renderers/shaders/shader_templates/vertex.glsl.erb +143 -0
  86. data/lib/mittsu/renderers/shaders/uniforms_lib.rb +54 -55
  87. data/lib/mittsu/textures/texture.rb +5 -2
  88. data/lib/mittsu/version.rb +1 -1
  89. data/run_all_examples.sh +7 -0
  90. metadata +77 -28
  91. data/.ruby-version +0 -1
  92. data/lib/mittsu/core/hash_object.rb +0 -19
@@ -0,0 +1,130 @@
1
+ module Mittsu
2
+ module OpenGLGeometryLike
3
+ CONST_BUFFER_NAMES = [
4
+ :vertex,
5
+ :color,
6
+ :normal,
7
+ :tangent,
8
+ :uv,
9
+ :uv2,
10
+ :skin_indices,
11
+ :skin_weight,
12
+ :line_distance,
13
+ :face,
14
+ :line
15
+ ]
16
+ attr_accessor(*CONST_BUFFER_NAMES.map(&:to_s).map { |name| "#{name}_buffer" }.map(&:to_sym))
17
+ attr_accessor(*CONST_BUFFER_NAMES.map(&:to_s).map { |name| "#{name}_array" }.map(&:to_sym))
18
+
19
+ attr_accessor :vertex_array_object,
20
+ :num_morph_targets,
21
+ :num_morph_normals,
22
+ :morph_targets_buffers,
23
+ :morph_normals_buffers,
24
+ :morph_targets_arrays,
25
+ :morph_normals_arrays,
26
+ :faces3,
27
+ :type_array,
28
+ :face_count,
29
+ :line_count,
30
+ :initted_arrays,
31
+ :custom_attributes_list,
32
+ :num_vertices
33
+
34
+ def bind_vertex_array_object
35
+ glBindVertexArray(@vertex_array_object) if @vertex_array_object
36
+ end
37
+
38
+ def update_vertex_buffer(attribute)
39
+ glBindBuffer(GL_ARRAY_BUFFER, @vertex_buffer)
40
+ @renderer.state.enable_attribute(attribute)
41
+ glVertexAttribPointer(attribute, 3, GL_FLOAT, GL_FALSE, 0, 0)
42
+ end
43
+
44
+ def update_other_buffers(object, material, attributes)
45
+ update_custom_attributes(attributes)
46
+
47
+ update_color_buffer(attributes['color'], object, material)
48
+ update_normal_buffer(attributes['normal'])
49
+ update_tangent_buffer(attributes['tangent'])
50
+ update_uv_buffers(attributes['uv'], attributes['uv2'], object, material)
51
+
52
+ if material.skinning
53
+ update_skin_buffers(attributes['skin_index'], attributes['skin_weight'])
54
+ end
55
+
56
+ update_line_distances_buffer(attributes['line_distances'])
57
+ end
58
+
59
+ private
60
+
61
+ def attribute_exists?(attribute)
62
+ attribute && attribute >= 0
63
+ end
64
+
65
+ def update_color_buffer(attribute, object, material)
66
+ return unless attribute_exists?(attribute)
67
+ if object.geometry.colors.length > 0 || object.geometry.faces.length > 0
68
+ update_attribute(attribute, @color_buffer, 3)
69
+ elsif material.default_attribute_values
70
+ glVertexAttrib3fv(attribute, material.default_attribute_values.color)
71
+ end
72
+ end
73
+
74
+ def update_normal_buffer(attribute)
75
+ return unless attribute_exists?(attribute)
76
+ update_attribute(attribute, @normal_buffer, 3)
77
+ end
78
+
79
+ def update_tangent_buffer(attribute)
80
+ return unless attribute_exists?(attribute)
81
+ update_attribute(attribute, @tangent_buffer, 4)
82
+ end
83
+
84
+ def update_uv_buffers(uv_attribute, uv2_attribute, object, material)
85
+ update_uv_buffer(uv_attribute, @uv_buffer, object, 0)
86
+ update_uv_buffer(uv2_attribute, @uv2_buffer, object, 1)
87
+ end
88
+
89
+ def update_uv_buffer(attribute, buffer, object, index)
90
+ return unless attribute_exists?(attribute)
91
+ if object.geometry.face_vertex_uvs[index]
92
+ update_attribute(attribute, buffer, 2)
93
+ else
94
+ # TODO default_attribute_value ???
95
+ # glVertexAttrib2fv(attribute, default_attribute_value)
96
+ end
97
+ end
98
+
99
+ def update_skin_buffers(index_attribute, weight_attribute)
100
+ return unless attribute_exists?(index_attribute) && attribute_exists?(weight_attribute)
101
+ update_attribute(attribute, @skin_indices_buffer, 4)
102
+ update_attribute(attribute, @skin_weight_buffer, 4)
103
+ end
104
+
105
+ def update_line_distances_buffer(attribute)
106
+ return unless attribute_exists?(attribute)
107
+ update_attribute(attribute, @line_distance_buffer, 1)
108
+ end
109
+
110
+ def update_custom_attributes(attributes)
111
+ if @custom_attributes_list
112
+ @custom_attributes_list.each do |custom_attribute|
113
+ belongs_to_attribute = attributes[custom_attribute.buffer.belongs_to_attribute]
114
+ update_custom_attribute(custom_attribute, belongs_to_attribute)
115
+ end
116
+ end
117
+ end
118
+
119
+ def update_custom_attribute(custom_attribute, belongs_to_attribute)
120
+ return unless attribute_exists?(belongs_to_attribute)
121
+ update_attribute(attribute, custom_attribute.buffer, custom_attribute.size)
122
+ end
123
+
124
+ def update_attribute(attribute, buffer, size)
125
+ glBindBuffer(GL_ARRAY_BUFFER, buffer)
126
+ @renderer.state.enable_attribute(attribute)
127
+ glVertexAttribPointer(attribute, size, GL_FLOAT, GL_FALSE, 0, 0)
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,161 @@
1
+ module Mittsu
2
+ module OpenGLHelper
3
+ def glCreateBuffer
4
+ @_b ||= ' '*8
5
+ glGenBuffers(1, @_b)
6
+ @_b.unpack('L')[0]
7
+ end
8
+
9
+ def glCreateTexture
10
+ @_b ||= ' '*8
11
+ glGenTextures(1, @_b)
12
+ @_b.unpack('L')[0]
13
+ end
14
+
15
+ def glCreateVertexArray
16
+ @_b ||= ' '*8
17
+ glGenVertexArrays(1, @_b)
18
+ @_b.unpack('L')[0]
19
+ end
20
+
21
+ def glCreateFramebuffer
22
+ @_b ||= ' '*8
23
+ glGenFramebuffers(1, @_b)
24
+ @_b.unpack('L')[0]
25
+ end
26
+
27
+ def glCreateRenderbuffer
28
+ @_b ||= ' '*8
29
+ glGenRenderbuffers(1, @_b)
30
+ @_b.unpack('L')[0]
31
+ end
32
+
33
+ def array_to_ptr_easy(data)
34
+ if data.first.is_a?(Float)
35
+ size_of_element = Fiddle::SIZEOF_FLOAT
36
+ format_of_element = 'F'
37
+ # data.map!{ |d| d.nil? ? 0.0 : d }
38
+ else
39
+ size_of_element = Fiddle::SIZEOF_INT
40
+ format_of_element = 'L'
41
+ # data.map!{ |d| d.nil? ? 0 : d }
42
+ end
43
+ size = data.length * size_of_element
44
+ array_to_ptr(data, size, format_of_element)
45
+ end
46
+
47
+ def array_to_ptr(data, size, format)
48
+ ptr = Fiddle::Pointer.malloc(size)
49
+ ptr[0,size] = data.pack(format * data.length)
50
+ ptr
51
+ end
52
+
53
+ def glBufferData_easy(target, data, usage)
54
+ ptr = array_to_ptr_easy(data)
55
+ glBufferData(target, ptr.size, ptr, usage)
56
+ end
57
+
58
+ def glGetParameter(pname)
59
+ @_b ||= ' '*8
60
+ glGetIntegerv(pname, @_b)
61
+ @_b.unpack('L')[0]
62
+ end
63
+
64
+ class << self
65
+ def mark_uniforms_lights_needs_update(uniforms, value)
66
+ uniforms['ambientLightColor'].needs_update = value
67
+
68
+ uniforms['directionalLightColor'].needs_update = value
69
+ uniforms['directionalLightDirection'].needs_update = value
70
+
71
+ uniforms['pointLightColor'].needs_update = value
72
+ uniforms['pointLightPosition'].needs_update = value
73
+ uniforms['pointLightDistance'].needs_update = value
74
+ uniforms['pointLightDecay'].needs_update = value
75
+
76
+ uniforms['spotLightColor'].needs_update = value
77
+ uniforms['spotLightPosition'].needs_update = value
78
+ uniforms['spotLightDistance'].needs_update = value
79
+ uniforms['spotLightDirection'].needs_update = value
80
+ uniforms['spotLightAngleCos'].needs_update = value
81
+ uniforms['spotLightExponent'].needs_update = value
82
+ uniforms['spotLightDecay'].needs_update = value
83
+
84
+ uniforms['hemisphereLightSkyColor'].needs_update = value
85
+ uniforms['hemisphereLightGroundColor'].needs_update = value
86
+ uniforms['hemisphereLightDirection'].needs_update = value
87
+ end
88
+
89
+ def refresh_uniforms_shadow(uniforms, lights)
90
+ if uniforms['shadowMatrix']
91
+ lights.select(&:cast_shadow).select { |light|
92
+ light.is_a?(SpotLight) || (light.is_a?(DirectionalLight) && !light.shadow_cascade)
93
+ }.each_with_index { |light, i|
94
+ uniforms['shadowMap'].value[i] = light.shadow_map
95
+ uniforms['shadowMapSize'].value[i] = light.shadow_map_size
96
+
97
+ uniforms['shadowMatrix'].value[i] = light.shadow_matrix
98
+
99
+ uniforms['shadowDarkness'].value[i] = light.shadow_darkness
100
+ uniforms['shadowBias'].value[i] = light.shadow_bias
101
+ }
102
+ end
103
+ end
104
+
105
+ def refresh_uniforms_lights(uniforms, lights)
106
+ uniforms['ambientLightColor'].value = lights[:ambient].value
107
+
108
+ uniforms['directionalLightColor'].value = lights[:directional].colors
109
+ uniforms['directionalLightDirection'].value = lights[:directional].positions
110
+
111
+ uniforms['pointLightColor'].value = lights[:point].colors
112
+ uniforms['pointLightPosition'].value = lights[:point].positions
113
+ uniforms['pointLightDistance'].value = lights[:point].distances
114
+ uniforms['pointLightDecay'].value = lights[:point].decays
115
+
116
+ uniforms['spotLightColor'].value = lights[:spot].colors
117
+ uniforms['spotLightPosition'].value = lights[:spot].positions
118
+ uniforms['spotLightDistance'].value = lights[:spot].distances
119
+ uniforms['spotLightDirection'].value = lights[:spot].directions
120
+ uniforms['spotLightAngleCos'].value = lights[:spot].angles_cos
121
+ uniforms['spotLightExponent'].value = lights[:spot].exponents
122
+ uniforms['spotLightDecay'].value = lights[:spot].decays
123
+
124
+ uniforms['hemisphereLightSkyColor'].value = lights[:hemi].sky_colors
125
+ uniforms['hemisphereLightGroundColor'].value = lights[:hemi].ground_colors
126
+ uniforms['hemisphereLightDirection'].value = lights[:hemi].positions
127
+ end
128
+
129
+ def refresh_uniforms_lambert(uniforms, material)
130
+ end
131
+
132
+ def set_color_linear(array, offset, color, intensity)
133
+ array[offset] = color.r * intensity
134
+ array[offset + 1] = color.g * intensity
135
+ array[offset + 2] = color.b * intensity
136
+ end
137
+
138
+ def painter_sort_stable(a, b)
139
+ if a.object.render_order != b.object.render_order
140
+ a.object.render_order - b.object.render_order
141
+ elsif a.material.id != b.material.id
142
+ a.material.id - b.material.id
143
+ elsif a.z != b.z
144
+ a.z - b.z
145
+ else
146
+ a.object.id - b.object.id
147
+ end
148
+ end
149
+
150
+ def reverse_painter_sort_stable(a, b)
151
+ if a.object.render_order != b.object.render_order
152
+ a.object.render_order - b.object.render_order
153
+ elsif a.z != b.z
154
+ b.z - a.z
155
+ else
156
+ a.id - b.id
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,61 @@
1
+ require 'mittsu/core/geometry'
2
+ require 'mittsu/core/object_3d'
3
+ require 'mittsu/objects'
4
+ require 'mittsu/materials'
5
+ require 'mittsu/textures'
6
+ require 'mittsu/scenes'
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'
31
+
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
@@ -0,0 +1,43 @@
1
+ module Mittsu
2
+ class OpenGLLightRenderer
3
+ attr_accessor :lights_need_update, :cache
4
+
5
+ LIGHT_CLASSES = [
6
+ OpenGLAmbientLight,
7
+ OpenGLDirectionalLight,
8
+ OpenGLPointLight,
9
+ OpenGLSpotLight,
10
+ OpenGLHemisphereLight
11
+ ]
12
+ LIGHT_TYPES = LIGHT_CLASSES.map { |klass| klass::TYPE }
13
+
14
+ def initialize(renderer)
15
+ @renderer = renderer
16
+ @lights_need_update = true
17
+ @cache = {}
18
+ LIGHT_CLASSES.each { |klass|
19
+ @cache[klass::TYPE] = klass::Cache.new
20
+ }
21
+ end
22
+
23
+ def setup(lights)
24
+ @cache.values.each(&:reset)
25
+
26
+ lights.each do |light|
27
+ next if light.only_shadow
28
+ light.implementation(self).setup
29
+ end
30
+
31
+ LIGHT_CLASSES.each do |klass|
32
+ cache = @cache[klass::TYPE]
33
+ klass.null_remaining_lights(cache)
34
+ end
35
+
36
+ @lights_need_update = false
37
+ end
38
+
39
+ def reset
40
+ @lights_need_update = true
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,53 @@
1
+ module Mittsu
2
+ GL_MITTSU_PARAMS = {
3
+ RepeatWrapping => GL_REPEAT,
4
+ ClampToEdgeWrapping => GL_CLAMP_TO_EDGE,
5
+ MirroredRepeatWrapping => GL_MIRRORED_REPEAT,
6
+
7
+ NearestFilter => GL_NEAREST,
8
+ NearestMipMapNearestFilter => GL_NEAREST_MIPMAP_NEAREST,
9
+ NearestMipMapLinearFilter => GL_NEAREST_MIPMAP_LINEAR,
10
+
11
+ LinearFilter => GL_LINEAR,
12
+ LinearMipMapNearestFilter => GL_LINEAR_MIPMAP_NEAREST,
13
+ LinearMipMapLinearFilter => GL_LINEAR_MIPMAP_LINEAR,
14
+
15
+ UnsignedByteType => GL_UNSIGNED_BYTE,
16
+ UnsignedShort4444Type => GL_UNSIGNED_SHORT_4_4_4_4,
17
+ UnsignedShort5551Type => GL_UNSIGNED_SHORT_5_5_5_1,
18
+ UnsignedShort565Type => GL_UNSIGNED_SHORT_5_6_5,
19
+
20
+ ByteType => GL_BYTE,
21
+ ShortType => GL_SHORT,
22
+ UnsignedShortType => GL_UNSIGNED_SHORT,
23
+ IntType => GL_INT,
24
+ UnsignedIntType => GL_UNSIGNED_INT,
25
+ FloatType => GL_FLOAT,
26
+
27
+ AlphaFormat => GL_ALPHA,
28
+ RGBFormat => GL_RGB,
29
+ RGBAFormat => GL_RGBA,
30
+ LuminanceFormat => GL_LUMINANCE,
31
+ LuminanceAlphaFormat => GL_LUMINANCE_ALPHA,
32
+
33
+ AddEquation => GL_FUNC_ADD,
34
+ SubtractEquation => GL_FUNC_SUBTRACT,
35
+ ReverseSubtractEquation => GL_FUNC_REVERSE_SUBTRACT,
36
+
37
+ ZeroFactor => GL_ZERO,
38
+ OneFactor => GL_ONE,
39
+ SrcColorFactor => GL_SRC_COLOR,
40
+ OneMinusSrcColorFactor => GL_ONE_MINUS_SRC_COLOR,
41
+ SrcAlphaFactor => GL_SRC_ALPHA,
42
+ OneMinusSrcAlphaFactor => GL_ONE_MINUS_SRC_ALPHA,
43
+ DstAlphaFactor => GL_DST_ALPHA,
44
+ OneMinusDstAlphaFactor => GL_ONE_MINUS_DST_ALPHA,
45
+
46
+ DstColorFactor => GL_DST_COLOR,
47
+ OneMinusDstColorFactor => GL_ONE_MINUS_DST_COLOR,
48
+ SrcAlphaSaturateFactor => GL_SRC_ALPHA_SATURATE
49
+
50
+ # TODO: populate with extension parameters?
51
+ }
52
+ GL_MITTSU_PARAMS.default = 0
53
+ end