mittsu 0.3.1 → 0.4.0
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/.github/workflows/build-workflow.yml +71 -0
- data/.gitignore +1 -0
- data/Gemfile +0 -3
- data/LICENSE.txt +1 -1
- data/README.md +6 -8
- data/Rakefile +1 -0
- data/install-glfw.ps1 +13 -0
- data/lib/mittsu/cameras/camera.rb +0 -2
- data/lib/mittsu/cameras/cube_camera.rb +0 -2
- data/lib/mittsu/cameras/orthographic_camera.rb +2 -4
- data/lib/mittsu/cameras/perspective_camera.rb +4 -5
- data/lib/mittsu/core/buffer_attribute.rb +12 -0
- data/lib/mittsu/core/buffer_geometry.rb +3 -3
- data/lib/mittsu/core/geometry.rb +2 -4
- data/lib/mittsu/core/object_3d.rb +9 -7
- data/lib/mittsu/core/raycaster.rb +0 -2
- data/lib/mittsu/extras/geometries/circle_geometry.rb +3 -3
- data/lib/mittsu/extras/geometries/cylinder_geometry.rb +5 -5
- data/lib/mittsu/extras/geometries/dodecahedron_geometry.rb +2 -2
- data/lib/mittsu/extras/geometries/icosahedron_geometry.rb +2 -2
- data/lib/mittsu/extras/geometries/lathe_geometry.rb +3 -3
- data/lib/mittsu/extras/geometries/parametric_geometry.rb +19 -19
- data/lib/mittsu/extras/geometries/polyhedron_geometry.rb +6 -7
- data/lib/mittsu/extras/geometries/ring_geometry.rb +4 -4
- data/lib/mittsu/extras/geometries/sphere_geometry.rb +4 -4
- data/lib/mittsu/extras/geometries/torus_geometry.rb +7 -7
- data/lib/mittsu/extras/geometries/torus_knot_buffer_geometry.rb +9 -9
- data/lib/mittsu/extras/helpers/camera_helper.rb +38 -38
- data/lib/mittsu/extras/image_utils.rb +1 -1
- data/lib/mittsu/lights/directional_light.rb +9 -5
- data/lib/mittsu/lights/spot_light.rb +1 -1
- data/lib/mittsu/loaders/loader.rb +2 -2
- data/lib/mittsu/loaders/obj_loader.rb +4 -0
- data/lib/mittsu/materials/material.rb +6 -3
- data/lib/mittsu/math/box2.rb +0 -2
- data/lib/mittsu/math/box3.rb +0 -2
- data/lib/mittsu/math/color.rb +3 -4
- data/lib/mittsu/math/euler.rb +25 -26
- data/lib/mittsu/math/frustum.rb +0 -2
- data/lib/mittsu/math/line3.rb +0 -2
- data/lib/mittsu/math/matrix3.rb +0 -2
- data/lib/mittsu/math/matrix4.rb +10 -12
- data/lib/mittsu/math/plane.rb +0 -2
- data/lib/mittsu/math/quaternion.rb +18 -20
- data/lib/mittsu/math/ray.rb +1 -3
- data/lib/mittsu/math/sphere.rb +1 -3
- data/lib/mittsu/math/spline.rb +0 -2
- data/lib/mittsu/math/triangle.rb +1 -3
- data/lib/mittsu/math/vector.rb +3 -3
- data/lib/mittsu/math/vector2.rb +0 -1
- data/lib/mittsu/math/vector3.rb +108 -1
- data/lib/mittsu/math/vector4.rb +8 -9
- data/lib/mittsu/math.rb +0 -5
- data/lib/mittsu/objects/line.rb +0 -1
- data/lib/mittsu/renderers/glfw_lib.rb +24 -3
- data/lib/mittsu/renderers/glfw_window.rb +6 -2
- data/lib/mittsu/renderers/opengl/core/object_3d.rb +1 -1
- data/lib/mittsu/renderers/opengl/lights/spot_light.rb +1 -1
- data/lib/mittsu/renderers/opengl/opengl_geometry_group.rb +1 -0
- data/lib/mittsu/renderers/opengl/opengl_program.rb +1 -2
- data/lib/mittsu/renderers/opengl/textures/texture.rb +2 -2
- data/lib/mittsu/renderers/opengl_renderer.rb +9 -14
- data/lib/mittsu/scenes/scene.rb +0 -2
- data/lib/mittsu/textures/texture.rb +4 -2
- data/lib/mittsu/utils.rb +15 -0
- data/lib/mittsu/version.rb +1 -2
- data/lib/mittsu.rb +1 -16
- data/mittsu.gemspec +14 -13
- metadata +60 -47
- data/.circleci/config.yml +0 -87
- data/.circleci/images/primary/Dockerfile +0 -10
- data/appveyor.yml +0 -23
- data/install_glfw.ps1 +0 -11
data/lib/mittsu/math/triangle.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'mittsu/math'
|
2
|
-
|
3
1
|
module Mittsu
|
4
2
|
class Triangle
|
5
3
|
attr_accessor :a, :b, :c
|
@@ -73,7 +71,7 @@ module Mittsu
|
|
73
71
|
|
74
72
|
result_length_sq = target.length_sq
|
75
73
|
if (result_length_sq > 0)
|
76
|
-
target.multiply_scalar(1.0 / Math.sqrt(result_length_sq))
|
74
|
+
target.multiply_scalar(1.0 / ::Math.sqrt(result_length_sq))
|
77
75
|
else
|
78
76
|
target.set(0.0, 0.0, 0.0)
|
79
77
|
end
|
data/lib/mittsu/math/vector.rb
CHANGED
@@ -160,7 +160,7 @@ module Mittsu
|
|
160
160
|
end
|
161
161
|
|
162
162
|
def length
|
163
|
-
Math.sqrt(length_sq)
|
163
|
+
::Math.sqrt(length_sq)
|
164
164
|
end
|
165
165
|
|
166
166
|
def normalize
|
@@ -211,11 +211,11 @@ module Mittsu
|
|
211
211
|
theta = self.dot(v) / (self.length * v.length)
|
212
212
|
|
213
213
|
# clamp, to handle numerical problems
|
214
|
-
Math.acos(Math.clamp(theta, -1.0, 1.0))
|
214
|
+
::Math.acos(Math.clamp(theta, -1.0, 1.0))
|
215
215
|
end
|
216
216
|
|
217
217
|
def distance_to(v)
|
218
|
-
Math.sqrt(self.distance_to_squared(v))
|
218
|
+
::Math.sqrt(self.distance_to_squared(v))
|
219
219
|
end
|
220
220
|
|
221
221
|
def ==(v)
|
data/lib/mittsu/math/vector2.rb
CHANGED
data/lib/mittsu/math/vector3.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'mittsu/math'
|
2
1
|
require 'mittsu/math/vector'
|
3
2
|
|
4
3
|
module Mittsu
|
@@ -188,6 +187,114 @@ module Mittsu
|
|
188
187
|
self
|
189
188
|
end
|
190
189
|
|
190
|
+
def set_scalar(scalar)
|
191
|
+
set(scalar, scalar, scalar)
|
192
|
+
|
193
|
+
self
|
194
|
+
end
|
195
|
+
|
196
|
+
def set_component(index, value)
|
197
|
+
_x, _y, _z = *@elements
|
198
|
+
|
199
|
+
case index
|
200
|
+
when 0
|
201
|
+
set(value, _y, _z)
|
202
|
+
when 1
|
203
|
+
set(_x, value, _z)
|
204
|
+
when 2
|
205
|
+
set(_x, _y, value)
|
206
|
+
else
|
207
|
+
raise ArgumentError, "index is out of range: #{index}"
|
208
|
+
end
|
209
|
+
|
210
|
+
self
|
211
|
+
end
|
212
|
+
|
213
|
+
def get_component(index)
|
214
|
+
_x, _y, _z = *@elements
|
215
|
+
|
216
|
+
case index
|
217
|
+
when 0
|
218
|
+
return _x
|
219
|
+
when 1
|
220
|
+
return _y
|
221
|
+
when 2
|
222
|
+
return _z
|
223
|
+
else
|
224
|
+
raise ArgumentError, "index is out of range: #{index}"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def add_scaled_vector(vector, scalar)
|
229
|
+
set(vector.x * scalar, vector.y * scalar, vector.z * scalar)
|
230
|
+
|
231
|
+
self
|
232
|
+
end
|
233
|
+
|
234
|
+
def set_from_spherical(sphere)
|
235
|
+
set_from_spherical_coords(sphere.radius, sphere.phi, sphere.theta)
|
236
|
+
end
|
237
|
+
|
238
|
+
def set_from_spherical_coords(radius, phi, theta)
|
239
|
+
sin_phi_radius = ::Math.sin(phi) * radius
|
240
|
+
set(sin_phi_radius * ::Math.sin(theta), ::Math.cos(phi) * radius, sin_phi_radius * ::Math.cos(theta))
|
241
|
+
|
242
|
+
self
|
243
|
+
end
|
244
|
+
|
245
|
+
def set_from_cylindrical(cylinder)
|
246
|
+
set_from_cylindrical_coords(cylinder.radius, cylinder.theta, cylinder.y)
|
247
|
+
end
|
248
|
+
|
249
|
+
def set_from_cylindrical_coords(radius, theta, y)
|
250
|
+
set(radius * ::Math.sin(theta), y, radius * ::Math.sin(theta))
|
251
|
+
|
252
|
+
self
|
253
|
+
end
|
254
|
+
|
255
|
+
def set_from_matrix3_column(matrix, index)
|
256
|
+
from_array(matrix.elements, index * 3)
|
257
|
+
end
|
258
|
+
|
259
|
+
def equals(vector)
|
260
|
+
_x, _y, _z = *@elements
|
261
|
+
|
262
|
+
((vector.x == _x) && (vector.y == _y) && (vector.z == _z ))
|
263
|
+
end
|
264
|
+
|
265
|
+
def from_buffer_attribute(attribute, index)
|
266
|
+
set(attribute.get_x(index), attribute.get_y(index), attribute.get_z(index))
|
267
|
+
|
268
|
+
self
|
269
|
+
end
|
270
|
+
|
271
|
+
def clamp_length(min, max)
|
272
|
+
divide_scalar(length || 1).multiply_scalar([min, [max, length].min].max)
|
273
|
+
end
|
274
|
+
|
275
|
+
def manhattan_distance_to(vector)
|
276
|
+
_x, _y, _z = *@elements
|
277
|
+
|
278
|
+
(_x - vector.x).abs + (_y - vector.y).abs + (_z - vector.z).abs
|
279
|
+
end
|
280
|
+
|
281
|
+
# TODO: maybe add range 3 values as arguments (range_x, range_y, range_z) to this method
|
282
|
+
def random()
|
283
|
+
set(Random.new.rand, Random.new.rand, Random.new.rand)
|
284
|
+
|
285
|
+
self
|
286
|
+
end
|
287
|
+
|
288
|
+
def random_direction()
|
289
|
+
u = (Random.new.rand - 0.5) *2
|
290
|
+
t = Random.new.rand * ::Math::PI * 2
|
291
|
+
f = ::Math.sqrt(1 - u ** 2)
|
292
|
+
|
293
|
+
set(f * ::Math.cos(t), f * ::Math.sin(t), u)
|
294
|
+
|
295
|
+
self
|
296
|
+
end
|
297
|
+
|
191
298
|
def from_attribute(attribute, index, offset = 0)
|
192
299
|
index = index * attribute.itemSize + offset
|
193
300
|
|
data/lib/mittsu/math/vector4.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'mittsu/math'
|
2
1
|
require 'mittsu/math/vector'
|
3
2
|
|
4
3
|
module Mittsu
|
@@ -50,8 +49,8 @@ module Mittsu
|
|
50
49
|
def set_axis_angle_from_quaternion(q)
|
51
50
|
# http:#www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
|
52
51
|
# q is assumed to be normalized
|
53
|
-
@elements[3] = 2.0 * Math.acos(q.w)
|
54
|
-
s = Math.sqrt(1.0 - q.w * q.w)
|
52
|
+
@elements[3] = 2.0 * ::Math.acos(q.w)
|
53
|
+
s = ::Math.sqrt(1.0 - q.w * q.w)
|
55
54
|
if s < 0.0001
|
56
55
|
@elements[0] = 1.0
|
57
56
|
@elements[1] = 0.0
|
@@ -89,7 +88,7 @@ module Mittsu
|
|
89
88
|
return self # zero angle, arbitrary axis
|
90
89
|
end
|
91
90
|
# otherwise self singularity is angle = 180
|
92
|
-
angle = Math::PI
|
91
|
+
angle = ::Math::PI
|
93
92
|
xx = (m11 + 1.0) / 2.0
|
94
93
|
yy = (m22 + 1.0) / 2.0
|
95
94
|
zz = (m33 + 1.0) / 2.0
|
@@ -102,7 +101,7 @@ module Mittsu
|
|
102
101
|
y1 = 0.707106781
|
103
102
|
z1 = 0.707106781
|
104
103
|
else
|
105
|
-
x1 = Math.sqrt(xx)
|
104
|
+
x1 = ::Math.sqrt(xx)
|
106
105
|
y1 = xy / x1
|
107
106
|
z1 = xz / x1
|
108
107
|
end
|
@@ -112,7 +111,7 @@ module Mittsu
|
|
112
111
|
y1 = 0.0
|
113
112
|
z1 = 0.707106781
|
114
113
|
else
|
115
|
-
y1 = Math.sqrt(yy)
|
114
|
+
y1 = ::Math.sqrt(yy)
|
116
115
|
x1 = xy / y1
|
117
116
|
z1 = yz / y1
|
118
117
|
end
|
@@ -122,7 +121,7 @@ module Mittsu
|
|
122
121
|
y1 = 0.707106781
|
123
122
|
z1 = 0.0
|
124
123
|
else
|
125
|
-
z1 = Math.sqrt(zz)
|
124
|
+
z1 = ::Math.sqrt(zz)
|
126
125
|
x1 = xz / z1
|
127
126
|
y1 = yz / z1
|
128
127
|
end
|
@@ -131,7 +130,7 @@ module Mittsu
|
|
131
130
|
return self # return 180 deg rotation
|
132
131
|
end
|
133
132
|
# as we have reached here there are no singularities so we can handle normally
|
134
|
-
s = Math.sqrt((m32 - m23) * (m32 - m23) +
|
133
|
+
s = ::Math.sqrt((m32 - m23) * (m32 - m23) +
|
135
134
|
(m13 - m31) * (m13 - m31) +
|
136
135
|
(m21 - m12) * (m21 - m12)) # used to normalize
|
137
136
|
s = 1.0 if (s.abs < 0.001)
|
@@ -140,7 +139,7 @@ module Mittsu
|
|
140
139
|
@elements[0] = (m32 - m23) / s
|
141
140
|
@elements[1] = (m13 - m31) / s
|
142
141
|
@elements[2] = (m21 - m12) / s
|
143
|
-
@elements[3] = Math.acos((m11 + m22 + m33 - 1.0) / 2.0)
|
142
|
+
@elements[3] = ::Math.acos((m11 + m22 + m33 - 1.0) / 2.0)
|
144
143
|
self
|
145
144
|
end
|
146
145
|
|
data/lib/mittsu/math.rb
CHANGED
@@ -17,13 +17,8 @@ require 'mittsu/math/vector2'
|
|
17
17
|
require 'mittsu/math/vector3'
|
18
18
|
require 'mittsu/math/vector4'
|
19
19
|
|
20
|
-
BuiltInMath = Math
|
21
|
-
|
22
20
|
module Mittsu
|
23
21
|
module Math
|
24
|
-
extend BuiltInMath
|
25
|
-
include BuiltInMath
|
26
|
-
BuiltInMath.methods.each { |m| public_class_method m }
|
27
22
|
|
28
23
|
def self.sign(x)
|
29
24
|
return Float::NAN unless x.is_a? Numeric
|
data/lib/mittsu/objects/line.rb
CHANGED
@@ -25,17 +25,38 @@ module Mittsu
|
|
25
25
|
end
|
26
26
|
|
27
27
|
class Windows < GenericLib::Base
|
28
|
+
def file
|
29
|
+
'glfw3.dll'
|
30
|
+
end
|
28
31
|
end
|
29
32
|
|
30
33
|
class MacOS < GenericLib::Base
|
34
|
+
SEARCH_GLOBS = ['/usr/local/lib/**',
|
35
|
+
'/usr/lib/**',
|
36
|
+
'/opt/homebrew/**']
|
37
|
+
|
31
38
|
def path
|
32
|
-
|
39
|
+
File.dirname(match)
|
33
40
|
end
|
34
41
|
|
35
42
|
def file
|
36
|
-
|
37
|
-
return matches.find { |m| m == 'libglfw3.dylib' || m == 'libglfw.3.dylib' } || matches.first
|
43
|
+
File.basename(match)
|
38
44
|
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def match
|
49
|
+
@match ||= find_match
|
50
|
+
end
|
51
|
+
|
52
|
+
def find_match
|
53
|
+
SEARCH_GLOBS.each do |glob|
|
54
|
+
matches = Dir.glob("#{glob}/libglfw*.dylib")
|
55
|
+
next if matches.empty?
|
56
|
+
|
57
|
+
return matches.find { |m| m.end_with?('libglfw3.dylib') || m.end_with?('libglfw.3.dylib') } || matches.first
|
58
|
+
end
|
59
|
+
end
|
39
60
|
end
|
40
61
|
end
|
41
62
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'opengl'
|
2
2
|
require 'glfw'
|
3
3
|
|
4
|
-
require 'mittsu'
|
4
|
+
require 'mittsu/utils'
|
5
5
|
require 'mittsu/renderers/glfw_lib'
|
6
6
|
glfw_lib = Mittsu::GLFWLib.discover
|
7
7
|
GLFW.load_lib(ENV["MITTSU_LIBGLFW_FILE"] || glfw_lib.file, ENV["MITTSU_LIBGLFW_PATH"] || glfw_lib.path) unless Mittsu.test?
|
@@ -13,7 +13,7 @@ module Mittsu
|
|
13
13
|
class Window
|
14
14
|
attr_accessor :key_press_handler, :key_release_handler, :key_repeat_handler, :char_input_handler, :cursor_pos_handler, :mouse_button_press_handler, :mouse_button_release_handler, :scroll_handler, :framebuffer_size_handler
|
15
15
|
|
16
|
-
def initialize(width, height, title)
|
16
|
+
def initialize(width, height, title, antialias: 0)
|
17
17
|
glfwInit
|
18
18
|
|
19
19
|
glfwWindowHint GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE
|
@@ -22,6 +22,10 @@ module Mittsu
|
|
22
22
|
glfwWindowHint GLFW_CONTEXT_VERSION_MINOR, 3
|
23
23
|
glfwWindowHint GLFW_CONTEXT_REVISION, 0
|
24
24
|
|
25
|
+
if antialias > 0
|
26
|
+
glfwWindowHint GLFW_SAMPLES, antialias
|
27
|
+
end
|
28
|
+
|
25
29
|
@width, @height, @title = width, height, title
|
26
30
|
@handle = glfwCreateWindow(@width, @height, @title, nil, nil)
|
27
31
|
if @handle.null?
|
@@ -35,7 +35,7 @@ module Mittsu
|
|
35
35
|
directions[offset + 1] = @_direction.y
|
36
36
|
directions[offset + 2] = @_direction.z
|
37
37
|
|
38
|
-
@cache.angles_cos[index] = Math.cos(angle)
|
38
|
+
@cache.angles_cos[index] = ::Math.cos(angle)
|
39
39
|
@cache.exponents[index] = exponent;
|
40
40
|
@cache.decays[index] = distance.zero? ? 0.0 : decay
|
41
41
|
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'erb'
|
2
|
-
|
3
2
|
require 'mittsu/renderers/opengl/opengl_shader'
|
4
3
|
|
5
4
|
module Mittsu
|
6
5
|
class OpenGLProgram
|
7
|
-
attr_reader :id, :program, :uniforms
|
6
|
+
attr_reader :id, :program, :uniforms
|
8
7
|
attr_accessor :code, :used_times, :attributes, :vertex_shader, :fragment_shader
|
9
8
|
|
10
9
|
def initialize(renderer, code, material, parameters)
|
@@ -61,14 +61,14 @@ module Mittsu
|
|
61
61
|
glTexParameteri(texture_type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
|
62
62
|
|
63
63
|
if wrap_s != ClampToEdgeWrapping || wrap_t != ClampToEdgeWrapping
|
64
|
-
puts "WARNING: Mittsu::Texture: Texture is not power of two. Texture.wrap_s and Texture.wrap_t should be set to Mittsu::ClampToEdgeWrapping. (#{
|
64
|
+
puts "WARNING: Mittsu::Texture: Texture is not power of two. Texture.wrap_s and Texture.wrap_t should be set to Mittsu::ClampToEdgeWrapping. (#{source_file})"
|
65
65
|
end
|
66
66
|
|
67
67
|
glTexParameteri(texture_type, GL_TEXTURE_MAG_FILTER, filter_fallback(mag_filter))
|
68
68
|
glTexParameteri(texture_type, GL_TEXTURE_MIN_FILTER, filter_fallback(min_filter))
|
69
69
|
|
70
70
|
if min_filter != NearestFilter && min_filter != LinearFilter
|
71
|
-
puts "WARNING: Mittsu::Texture: Texture is not a power of two. Texture.min_filter should be set to Mittsu::NearestFilter or Mittsu::LinearFilter. (#{
|
71
|
+
puts "WARNING: Mittsu::Texture: Texture is not a power of two. Texture.min_filter should be set to Mittsu::NearestFilter or Mittsu::LinearFilter. (#{source_file})"
|
72
72
|
end
|
73
73
|
|
74
74
|
# TODO: anisotropic extension ???
|
@@ -2,12 +2,10 @@ require 'opengl'
|
|
2
2
|
require 'glfw'
|
3
3
|
require 'fiddle'
|
4
4
|
|
5
|
-
|
6
5
|
require 'mittsu/renderers/opengl/opengl_lib'
|
7
6
|
opengl_lib = Mittsu::OpenGLLib.discover
|
8
7
|
OpenGL.load_lib(ENV["MITTSU_LIBGL_FILE"] || opengl_lib.file, ENV["MITTSU_LIBGL_PATH"] || opengl_lib.path)
|
9
8
|
|
10
|
-
require 'mittsu'
|
11
9
|
require 'mittsu/renderers/glfw_window'
|
12
10
|
require 'mittsu/renderers/opengl/opengl_implementations'
|
13
11
|
require 'mittsu/renderers/opengl/opengl_debug'
|
@@ -30,12 +28,14 @@ require 'mittsu/renderers/opengl/opengl_mittsu_params'
|
|
30
28
|
|
31
29
|
module Mittsu
|
32
30
|
class OpenGLRenderer
|
33
|
-
attr_accessor :auto_clear, :auto_clear_color, :auto_clear_depth, :auto_clear_stencil, :sort_objects, :gamma_factor, :gamma_input,
|
31
|
+
attr_accessor :auto_clear, :auto_clear_color, :auto_clear_depth, :auto_clear_stencil, :sort_objects, :gamma_factor, :gamma_input,
|
32
|
+
:gamma_output, :shadow_map_enabled, :shadow_map_type, :shadow_map_cull_face, :shadow_map_debug, :shadow_map_cascade,
|
33
|
+
:max_morph_targets, :max_morph_normals, :info, :pixel_ratio, :window, :width, :height, :state
|
34
34
|
|
35
|
-
attr_reader :logarithmic_depth_buffer, :
|
35
|
+
attr_reader :logarithmic_depth_buffer, :programs, :light_renderer, :proj_screen_matrix
|
36
36
|
|
37
37
|
def initialize(parameters = {})
|
38
|
-
puts "
|
38
|
+
puts "Mittsu OpenGL Renderer #{VERSION}"
|
39
39
|
|
40
40
|
fetch_parameters(parameters)
|
41
41
|
|
@@ -81,11 +81,6 @@ module Mittsu
|
|
81
81
|
|
82
82
|
# TODO: get_context ???
|
83
83
|
# TODO: force_context_loss ???
|
84
|
-
|
85
|
-
def supports_vertex_textures?
|
86
|
-
@_supports_vertex_textures
|
87
|
-
end
|
88
|
-
|
89
84
|
# TODO: supports_float_textures? ???
|
90
85
|
# TODO: supports[half|standard|compressed|blend min max] ... ???
|
91
86
|
|
@@ -940,14 +935,14 @@ module Mittsu
|
|
940
935
|
@_alpha = parameters.fetch(:alpha, false)
|
941
936
|
@_depth = parameters.fetch(:depth, true)
|
942
937
|
@_stencil = parameters.fetch(:stencil, true)
|
943
|
-
@_antialias = parameters.fetch(:antialias, false)
|
944
938
|
@_premultiplied_alpha = parameters.fetch(:premultiplied_alpha, true)
|
945
939
|
@_preserve_drawing_buffer = parameters.fetch(:preserve_drawing_buffer, false)
|
946
940
|
@logarithmic_depth_buffer = parameters.fetch(:logarithmic_depth_buffer, false)
|
947
941
|
|
948
942
|
@width = parameters.fetch(:width, 800)
|
949
943
|
@height = parameters.fetch(:height, 600)
|
950
|
-
@title = parameters.fetch(:title, "Mittsu #{
|
944
|
+
@title = parameters.fetch(:title, "Mittsu #{VERSION}")
|
945
|
+
@antialias = parameters.fetch(:antialias, 0)
|
951
946
|
end
|
952
947
|
|
953
948
|
def get_gpu_capabilities
|
@@ -979,7 +974,7 @@ module Mittsu
|
|
979
974
|
# preserve_drawing_buffer: _preserve_drawing_buffer
|
980
975
|
# }
|
981
976
|
|
982
|
-
@window = GLFW::Window.new(@width, @height, @title)
|
977
|
+
@window = GLFW::Window.new(@width, @height, @title, antialias: @antialias)
|
983
978
|
|
984
979
|
default_target.set_viewport_size(*(@window.framebuffer_size))
|
985
980
|
|
@@ -1006,7 +1001,7 @@ module Mittsu
|
|
1006
1001
|
glUniformMatrix4fv(uniforms['projectionMatrix'], 1, GL_FALSE, array_to_ptr_easy(camera.projection_matrix.elements))
|
1007
1002
|
|
1008
1003
|
if @logarithmic_depth_buffer
|
1009
|
-
glUniform1f(uniforms['logDepthBuffFC'], 2.0 / Math.log(camera.far + 1.0) / Math::LN2)
|
1004
|
+
glUniform1f(uniforms['logDepthBuffFC'], 2.0 / ::Math.log(camera.far + 1.0) / Math::LN2)
|
1010
1005
|
end
|
1011
1006
|
|
1012
1007
|
if material.needs_camera_position_uniform? && !uniforms['cameraPosition'].nil?
|
data/lib/mittsu/scenes/scene.rb
CHANGED
@@ -10,9 +10,10 @@ module Mittsu
|
|
10
10
|
DEFAULT_IMAGE = nil
|
11
11
|
DEFAULT_MAPPING = UVMapping
|
12
12
|
|
13
|
-
attr_reader :id, :uuid
|
13
|
+
attr_reader :id, :uuid
|
14
14
|
|
15
|
-
attr_accessor :image, :name, :source_file, :mipmaps, :offset, :repeat, :generate_mipmaps, :premultiply_alpha, :filp_y,
|
15
|
+
attr_accessor :image, :name, :source_file, :mipmaps, :offset, :repeat, :generate_mipmaps, :premultiply_alpha, :filp_y,
|
16
|
+
:unpack_alignment, :on_update, :mapping, :wrap_s, :wrap_t, :mag_filter, :min_filter, :anisotropy, :format, :type
|
16
17
|
|
17
18
|
def initialize(image = DEFAULT_IMAGE, mapping = DEFAULT_MAPPING, wrap_s = ClampToEdgeWrapping, wrap_t = ClampToEdgeWrapping, mag_filter = LinearFilter, min_filter = LinearMipMapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1)
|
18
19
|
super()
|
@@ -42,6 +43,7 @@ module Mittsu
|
|
42
43
|
|
43
44
|
@_needs_update = false
|
44
45
|
@on_update = nil
|
46
|
+
@_listeners = {}
|
45
47
|
end
|
46
48
|
|
47
49
|
def needs_update?
|
data/lib/mittsu/utils.rb
ADDED
data/lib/mittsu/version.rb
CHANGED
data/lib/mittsu.rb
CHANGED
@@ -1,19 +1,4 @@
|
|
1
|
-
|
2
|
-
DEBUG = ENV["DEBUG"] == "true"
|
3
|
-
|
4
|
-
def self.debug?
|
5
|
-
DEBUG
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.env
|
9
|
-
ENV["MITTSU_ENV"]
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.test?
|
13
|
-
env == 'test'
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
1
|
+
require "mittsu/utils"
|
17
2
|
require "mittsu/version"
|
18
3
|
require "mittsu/math"
|
19
4
|
require "mittsu/core"
|
data/mittsu.gemspec
CHANGED
@@ -6,15 +6,15 @@ require 'mittsu/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "mittsu"
|
8
8
|
spec.version = Mittsu::VERSION
|
9
|
-
spec.authors = ["
|
10
|
-
spec.email = ["
|
9
|
+
spec.authors = ["Danielle Smith"]
|
10
|
+
spec.email = ["danini@hey.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{3D Graphics Library for Ruby}
|
13
13
|
spec.description = %q{Mittsu makes 3D graphics easier by providing an abstraction over OpenGL, and is based heavily off of THREE.js. No more weird pointers and wondering about the difference between a VAO and a VBO (besides the letter). Simply think of something awesome and make it!}
|
14
|
-
spec.homepage = "https://github.com/
|
14
|
+
spec.homepage = "https://github.com/danini-the-panini/mittsu"
|
15
15
|
spec.license = "MIT"
|
16
16
|
spec.metadata = {
|
17
|
-
"bug_tracker" => "https://github.com/
|
17
|
+
"bug_tracker" => "https://github.com/danini-the-panini/mittsu/issues"
|
18
18
|
}
|
19
19
|
|
20
20
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{(^(test|examples)/|\.sh$)}) }
|
@@ -23,14 +23,15 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.required_ruby_version = '>= 2.0.0'
|
24
24
|
spec.requirements << 'OpenGL 3.3+ capable hardware and drivers'
|
25
25
|
|
26
|
-
spec.add_runtime_dependency 'opengl-bindings'
|
27
|
-
spec.add_runtime_dependency 'ffi'
|
28
|
-
spec.add_runtime_dependency 'chunky_png'
|
26
|
+
spec.add_runtime_dependency 'opengl-bindings'
|
27
|
+
spec.add_runtime_dependency 'ffi'
|
28
|
+
spec.add_runtime_dependency 'chunky_png'
|
29
29
|
|
30
|
-
spec.add_development_dependency "bundler"
|
31
|
-
spec.add_development_dependency "rake"
|
32
|
-
spec.add_development_dependency 'minitest'
|
33
|
-
spec.add_development_dependency 'minitest-reporters'
|
34
|
-
spec.add_development_dependency 'pry'
|
35
|
-
spec.add_development_dependency 'benchmark-ips'
|
30
|
+
spec.add_development_dependency "bundler"
|
31
|
+
spec.add_development_dependency "rake"
|
32
|
+
spec.add_development_dependency 'minitest'
|
33
|
+
spec.add_development_dependency 'minitest-reporters'
|
34
|
+
spec.add_development_dependency 'pry'
|
35
|
+
spec.add_development_dependency 'benchmark-ips'
|
36
|
+
spec.add_development_dependency 'simplecov', '0.17.1'
|
36
37
|
end
|