ray 0.1.1 → 0.2.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.
- data/README.md +9 -6
- data/Rakefile +1 -5
- data/ext/audio.c +25 -19
- data/ext/audio_source.c +67 -39
- data/ext/color.c +19 -19
- data/ext/drawable.c +190 -31
- data/ext/extconf.rb +16 -14
- data/ext/gl.c +310 -30
- data/ext/gl_buffer.c +223 -2
- data/ext/gl_index_buffer.c +11 -0
- data/ext/gl_int_array.c +24 -22
- data/ext/gl_vertex.c +84 -49
- data/ext/image.c +115 -51
- data/ext/image_target.c +58 -10
- data/ext/input.c +73 -6
- data/ext/mo.c +583 -0
- data/ext/mo.h +189 -0
- data/ext/music.c +9 -8
- data/ext/pixel_bus.c +349 -0
- data/ext/polygon.c +68 -45
- data/ext/ray.c +1 -0
- data/ext/ray.h +19 -1
- data/ext/rect.c +9 -47
- data/ext/say.h +1 -2
- data/ext/say_all.h +6 -0
- data/ext/say_audio.h +3 -0
- data/ext/say_audio_context.c +1 -4
- data/ext/say_basic_type.c +24 -0
- data/ext/say_basic_type.h +4 -0
- data/ext/say_buffer.c +217 -88
- data/ext/say_buffer.h +20 -5
- data/ext/say_buffer_renderer.c +10 -7
- data/ext/say_buffer_renderer.h +1 -1
- data/ext/say_buffer_slice.c +70 -76
- data/ext/say_context.c +109 -22
- data/ext/say_context.h +14 -0
- data/ext/say_drawable.c +113 -25
- data/ext/say_drawable.h +23 -2
- data/ext/say_error.c +7 -2
- data/ext/say_font.c +30 -27
- data/ext/say_font.h +3 -6
- data/ext/say_get_proc.c +35 -0
- data/ext/say_image.c +102 -27
- data/ext/say_image.h +11 -4
- data/ext/say_image_target.c +88 -34
- data/ext/say_image_target.h +3 -2
- data/ext/say_index_buffer.c +31 -19
- data/ext/say_index_buffer.h +4 -2
- data/ext/say_index_buffer_slice.c +78 -70
- data/ext/say_music.c +4 -2
- data/ext/say_osx.h +3 -2
- data/ext/say_osx_context.h +37 -4
- data/ext/say_osx_window.h +32 -37
- data/ext/say_pixel_bus.c +163 -0
- data/ext/say_pixel_bus.h +44 -0
- data/ext/say_polygon.c +2 -2
- data/ext/say_shader.c +66 -62
- data/ext/say_shader.h +2 -0
- data/ext/say_sprite.c +1 -2
- data/ext/say_target.c +14 -23
- data/ext/say_target.h +3 -1
- data/ext/say_text.c +45 -7
- data/ext/say_text.h +12 -3
- data/ext/say_thread.c +13 -6
- data/ext/say_thread.h +1 -1
- data/ext/say_thread_variable.c +5 -5
- data/ext/say_vertex_type.c +79 -41
- data/ext/say_vertex_type.h +6 -2
- data/ext/say_view.c +10 -31
- data/ext/say_view.h +1 -5
- data/ext/say_win.h +2 -2
- data/ext/say_win_context.h +49 -11
- data/ext/say_win_window.h +30 -27
- data/ext/say_window.c +3 -3
- data/ext/say_x11.h +3 -1
- data/ext/say_x11_context.h +64 -10
- data/ext/say_x11_window.h +22 -17
- data/ext/shader.c +9 -0
- data/ext/sprite.c +7 -1
- data/ext/target.c +80 -28
- data/ext/text.c +43 -1
- data/ext/view.c +53 -1
- data/ext/window.c +4 -0
- data/lib/ray/animation_list.rb +17 -2
- data/lib/ray/audio_source.rb +11 -0
- data/lib/ray/color.rb +14 -0
- data/lib/ray/drawable.rb +23 -0
- data/lib/ray/dsl/event.rb +1 -9
- data/lib/ray/dsl/event_runner.rb +3 -4
- data/lib/ray/dsl/matcher.rb +20 -1
- data/lib/ray/effect.rb +116 -0
- data/lib/ray/effect/black_and_white.rb +38 -0
- data/lib/ray/effect/color_inversion.rb +16 -0
- data/lib/ray/effect/generator.rb +145 -0
- data/lib/ray/effect/grayscale.rb +32 -0
- data/lib/ray/game.rb +25 -5
- data/lib/ray/gl/vertex.rb +105 -26
- data/lib/ray/helper.rb +5 -0
- data/lib/ray/image.rb +54 -13
- data/lib/ray/image_target.rb +7 -0
- data/lib/ray/matrix.rb +26 -0
- data/lib/ray/music.rb +4 -0
- data/lib/ray/pixel_bus.rb +22 -0
- data/lib/ray/polygon.rb +17 -0
- data/lib/ray/pp.rb +28 -0
- data/lib/ray/ray.rb +7 -1
- data/lib/ray/rect.rb +7 -13
- data/lib/ray/scene.rb +24 -5
- data/lib/ray/scene_list.rb +9 -0
- data/lib/ray/shader.rb +11 -2
- data/lib/ray/sound.rb +4 -0
- data/lib/ray/sprite.rb +23 -62
- data/lib/ray/target.rb +25 -0
- data/lib/ray/text.rb +10 -0
- data/lib/ray/turtle.rb +9 -3
- data/lib/ray/vector.rb +18 -0
- data/lib/ray/vertex.rb +6 -0
- data/lib/ray/view.rb +22 -0
- data/samples/animation/sprite_motion.rb +0 -60
- data/samples/audio/{spacial.rb → spatial.rb} +1 -1
- data/samples/buffer/buffer.rb +1 -0
- data/samples/buffer/index_buffer.rb +2 -0
- data/samples/cptn_ruby/cptn_ruby.rb +6 -7
- data/samples/effects/effect.rb +39 -0
- data/samples/effects/grayscale.rb +27 -0
- data/samples/opengl/image.rb +7 -5
- data/samples/opengl/instancing.rb +159 -0
- data/samples/opengl/instancing.rbc +3231 -0
- data/samples/opengl/obj_loader.rb +9 -8
- data/samples/opengl/shader.rb +1 -3
- data/samples/shaders/geometry.rb +108 -38
- data/samples/shaders/geometry.rbc +2074 -0
- data/samples/shaders/shape.rb +2 -2
- data/samples/starfighter/starfighter.rb +5 -5
- data/samples/window/get_pixel.rb +1 -1
- data/test/animation_list_test.rb +18 -4
- data/test/drawable_test.rb +70 -1
- data/test/effect_generator_test.rb +63 -0
- data/test/effect_test.rb +61 -0
- data/test/game_test.rb +18 -0
- data/test/gl_buffer_test.rb +43 -1
- data/test/gl_index_buffer_test.rb +5 -0
- data/test/gl_vertex_test.rb +28 -1
- data/test/image_test.rb +5 -5
- data/test/input_test.rb +49 -0
- data/test/pixel_bus_test.rb +28 -0
- data/test/rect_test.rb +4 -0
- data/{samples/_media → test/res}/Beep.wav +0 -0
- data/samples/_media/CptnRuby Gem.png b/data/test/res/CptnRuby → Gem.png +0 -0
- data/samples/_media/CptnRuby Map.txt b/data/test/res/CptnRuby → Map.txt +0 -0
- data/samples/_media/CptnRuby Tileset.png b/data/test/res/CptnRuby → Tileset.png +0 -0
- data/{samples/_media → test/res}/CptnRuby.png +0 -0
- data/{samples/_media → test/res}/Space.png +0 -0
- data/{samples/_media → test/res}/Star.png +0 -0
- data/{samples/_media → test/res}/Starfighter.png +0 -0
- data/test/res/cube.obj +28 -0
- data/test/res/light3d.c +2 -2
- data/test/res/stone.png +0 -0
- data/test/scene_test.rb +3 -0
- data/test/sprite_test.rb +10 -0
- data/test/text_test.rb +31 -2
- data/test/view_test.rb +13 -1
- metadata +38 -17
- data/ext/say_array.c +0 -124
- data/ext/say_array.h +0 -34
- data/ext/say_table.c +0 -86
- data/ext/say_table.h +0 -24
data/samples/shaders/shape.rb
CHANGED
@@ -19,11 +19,11 @@ Ray::Game.new("Shaders test") do
|
|
19
19
|
@shape.shader = Ray::Shader.new :frag => StringIO.new(<<-SHADER)
|
20
20
|
#version 110
|
21
21
|
|
22
|
-
uniform vec3 ratio
|
22
|
+
uniform vec3 ratio;
|
23
23
|
varying vec4 var_Color;
|
24
24
|
|
25
25
|
void main() {
|
26
|
-
float gray = dot(var_Color.rgb, ratio
|
26
|
+
float gray = dot(var_Color.rgb, ratio);
|
27
27
|
gl_FragColor = vec4(gray, gray, gray, 1.0);
|
28
28
|
}
|
29
29
|
SHADER
|
@@ -7,7 +7,7 @@ require 'ray'
|
|
7
7
|
require 'forwardable'
|
8
8
|
|
9
9
|
def path_of(resource)
|
10
|
-
File.
|
10
|
+
File.join(File.dirname(__FILE__), "../../test/res", resource)
|
11
11
|
end
|
12
12
|
|
13
13
|
class Player
|
@@ -20,10 +20,10 @@ class Player
|
|
20
20
|
|
21
21
|
def initialize(stars)
|
22
22
|
@stars = stars
|
23
|
-
@sprite = Ray::Sprite.new path_of("
|
23
|
+
@sprite = Ray::Sprite.new path_of("Starfighter.png")
|
24
24
|
@sprite.origin = @sprite.image.size / 2
|
25
25
|
|
26
|
-
@beep = sound path_of("
|
26
|
+
@beep = sound path_of("Beep.wav")
|
27
27
|
|
28
28
|
@vel_x = @vel_y = 0.0
|
29
29
|
|
@@ -89,7 +89,7 @@ class Star
|
|
89
89
|
attr_reader :sprite
|
90
90
|
|
91
91
|
def initialize(position)
|
92
|
-
@sprite = Ray::Sprite.new path_of("
|
92
|
+
@sprite = Ray::Sprite.new path_of("Star.png"), :at => position
|
93
93
|
@sprite.sheet_size = [10, 1]
|
94
94
|
@sprite.origin = (@sprite.image.size / @sprite.sheet_size) / 2
|
95
95
|
@animation = sprite_animation(:from => [0, 0], :to => [9, 0],
|
@@ -122,7 +122,7 @@ Ray::Game.new("Starfighter --- [LEFT/RIGHT/UP to move; collect the stars]") do
|
|
122
122
|
end
|
123
123
|
|
124
124
|
scene :game do
|
125
|
-
@background_image = sprite path_of("
|
125
|
+
@background_image = sprite path_of("Space.png")
|
126
126
|
@score_text = text("", :at => [10, 10], :size => 20,
|
127
127
|
:color => Ray::Color.yellow)
|
128
128
|
|
data/samples/window/get_pixel.rb
CHANGED
data/test/animation_list_test.rb
CHANGED
@@ -40,8 +40,15 @@ context "an animation list" do
|
|
40
40
|
context "after #update" do
|
41
41
|
hookup { topic.update }
|
42
42
|
|
43
|
-
|
44
|
-
asserts(:to_a).equals []
|
43
|
+
denies :empty?
|
44
|
+
asserts(:to_a).equals { [@anim] }
|
45
|
+
|
46
|
+
context "and #remove_unused" do
|
47
|
+
hookup { topic.remove_unused }
|
48
|
+
|
49
|
+
asserts :empty?
|
50
|
+
asserts(:to_a).equals []
|
51
|
+
end
|
45
52
|
end
|
46
53
|
end
|
47
54
|
|
@@ -77,8 +84,15 @@ context "an animation list" do
|
|
77
84
|
context "after #update" do
|
78
85
|
hookup { topic.update }
|
79
86
|
|
80
|
-
|
81
|
-
asserts(:to_a).equals []
|
87
|
+
denies :empty?
|
88
|
+
asserts(:to_a).equals { [@anim] }
|
89
|
+
|
90
|
+
context "and #remove_unused" do
|
91
|
+
hookup { topic.remove_unused }
|
92
|
+
|
93
|
+
asserts :empty?
|
94
|
+
asserts(:to_a).equals []
|
95
|
+
end
|
82
96
|
end
|
83
97
|
end
|
84
98
|
|
data/test/drawable_test.rb
CHANGED
@@ -9,6 +9,14 @@ context "a drawable" do
|
|
9
9
|
asserts(:z).equals 0
|
10
10
|
asserts(:angle).equals 0
|
11
11
|
asserts(:shader).nil
|
12
|
+
asserts(:shader_attributes).nil
|
13
|
+
asserts(:matrix_proc).nil
|
14
|
+
asserts(:blend_mode).equals :alpha
|
15
|
+
|
16
|
+
context "after changing blend mode" do
|
17
|
+
hookup { topic.blend_mode = :add }
|
18
|
+
asserts(:blend_mode).equals :add
|
19
|
+
end
|
12
20
|
|
13
21
|
context "after changing origin" do
|
14
22
|
hookup { topic.origin = Ray::Vector2[10, 20] }
|
@@ -61,12 +69,16 @@ context "a drawable" do
|
|
61
69
|
end
|
62
70
|
|
63
71
|
context "with several transformations" do
|
72
|
+
attr = {:foo => 3}
|
73
|
+
|
64
74
|
hookup do
|
65
75
|
topic.origin = [30, 40]
|
66
76
|
topic.pos = [10, 20]
|
67
77
|
topic.angle = 90
|
68
78
|
topic.scale = [2, 0.5]
|
69
79
|
topic.z = 9
|
80
|
+
|
81
|
+
topic.shader_attributes = attr
|
70
82
|
end
|
71
83
|
|
72
84
|
# (10, 30) => (-20, -10) (origin)
|
@@ -88,6 +100,11 @@ context "a drawable" do
|
|
88
100
|
asserts(:angle).equals 90
|
89
101
|
asserts(:scale).equals Ray::Vector2[2, 0.5]
|
90
102
|
asserts(:z).equals 9
|
103
|
+
|
104
|
+
asserts(:shader_attributes).equals attr
|
105
|
+
asserts("shader_attributes are copied") do
|
106
|
+
!(topic.shader_attributes.equal? attr)
|
107
|
+
end
|
91
108
|
end
|
92
109
|
|
93
110
|
context "and a custom matrix" do
|
@@ -107,6 +124,35 @@ context "a drawable" do
|
|
107
124
|
1e-6)
|
108
125
|
end
|
109
126
|
end
|
127
|
+
|
128
|
+
context "and a custom matrix proc" do
|
129
|
+
matrix_proc = proc { Ray::Matrix.identity }
|
130
|
+
|
131
|
+
hookup do
|
132
|
+
proxy(matrix_proc).call
|
133
|
+
|
134
|
+
topic.matrix_proc = matrix_proc
|
135
|
+
topic.matrix # calls proc
|
136
|
+
end
|
137
|
+
|
138
|
+
asserts(:matrix).equals Ray::Matrix.new
|
139
|
+
asserts(:matrix_proc).equals matrix_proc
|
140
|
+
asserts(:matrix_proc).received(:call) { topic }
|
141
|
+
|
142
|
+
context "when matrix is accessed twice" do
|
143
|
+
hookup { topic.matrix }
|
144
|
+
denies(:matrix_proc).received(:call => 2) { topic }
|
145
|
+
end
|
146
|
+
|
147
|
+
context "when matrix is accessed after a change" do
|
148
|
+
hookup do
|
149
|
+
topic.matrix_changed!
|
150
|
+
topic.matrix
|
151
|
+
end
|
152
|
+
|
153
|
+
asserts(:matrix_proc).received(:call => 2) { topic }
|
154
|
+
end
|
155
|
+
end
|
110
156
|
end
|
111
157
|
|
112
158
|
context "after changing shader" do
|
@@ -194,15 +240,38 @@ context "a custom drawable" do
|
|
194
240
|
end
|
195
241
|
end
|
196
242
|
|
197
|
-
context "with indices" do
|
243
|
+
context "drawn with indices" do
|
198
244
|
hookup do
|
199
245
|
proxy(topic).fill_indices
|
246
|
+
proxy(topic).render
|
247
|
+
|
200
248
|
topic.index_count = 3
|
201
249
|
|
202
250
|
target.draw topic
|
203
251
|
end
|
204
252
|
|
205
253
|
asserts_topic.received :fill_indices, is_a(Integer)
|
254
|
+
asserts_topic.received :render, is_a(Integer), is_a(Integer)
|
255
|
+
|
256
|
+
context "but no vertices" do
|
257
|
+
hookup do
|
258
|
+
topic.vertex_count = 0
|
259
|
+
target.draw topic
|
260
|
+
end
|
261
|
+
|
262
|
+
asserts_topic.received({:render => 2}, is_a(Integer), is_a(Integer))
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
context "drawn without vertices" do
|
267
|
+
hookup do
|
268
|
+
topic.vertex_count = 0
|
269
|
+
|
270
|
+
proxy(topic).render
|
271
|
+
target.draw topic
|
272
|
+
end
|
273
|
+
|
274
|
+
asserts_topic.received :render, 0, 0
|
206
275
|
end
|
207
276
|
|
208
277
|
context "with more indices than it gives" do
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/helpers.rb'
|
2
|
+
|
3
|
+
context "an effect generator" do
|
4
|
+
setup do
|
5
|
+
gen = Ray::Effect::Generator.new
|
6
|
+
gen << (@effect = Ray::Effect::Grayscale.new([3, 5, 2]))
|
7
|
+
end
|
8
|
+
|
9
|
+
asserts(:effects).equals { [@effect] }
|
10
|
+
|
11
|
+
asserts(:version).equals 110
|
12
|
+
|
13
|
+
asserts(:input).matches "vec4 var_Color"
|
14
|
+
asserts(:input).matches "vec2 var_TexCoord"
|
15
|
+
asserts(:input).matches "varying "
|
16
|
+
denies(:input).matches "in "
|
17
|
+
|
18
|
+
asserts(:uniforms).matches "uniform sampler2D in_Texture"
|
19
|
+
asserts(:uniforms).matches "uniform bool in_TextureEnabled"
|
20
|
+
|
21
|
+
context "code" do
|
22
|
+
setup do
|
23
|
+
@struct = @effect.struct
|
24
|
+
@code = @effect.code
|
25
|
+
stub(@effect).header { "HEADER" }
|
26
|
+
topic.code
|
27
|
+
end
|
28
|
+
|
29
|
+
asserts_topic.matches "gl_FragColor"
|
30
|
+
denies_topic.matches "out_FragColor"
|
31
|
+
|
32
|
+
asserts_topic.matches "uniform ray_grayscale grayscale;"
|
33
|
+
|
34
|
+
asserts("headers are before structs") {
|
35
|
+
topic.index("HEADER") < topic.index(@struct)
|
36
|
+
}
|
37
|
+
|
38
|
+
asserts("structs are before functions") {
|
39
|
+
topic.index(@struct) < topic.index(@code)
|
40
|
+
}
|
41
|
+
|
42
|
+
asserts_topic.matches "if (grayscale.enabled)"
|
43
|
+
end
|
44
|
+
|
45
|
+
context "built shader" do
|
46
|
+
setup do
|
47
|
+
shader = Ray::Shader.new
|
48
|
+
|
49
|
+
proxy(shader).compile
|
50
|
+
proxy(shader).__send__(:[]=)
|
51
|
+
|
52
|
+
topic.build shader
|
53
|
+
|
54
|
+
shader
|
55
|
+
end
|
56
|
+
|
57
|
+
asserts_topic.received(:compile, is_a(Hash))
|
58
|
+
asserts_topic.received(:[]=, "grayscale.enabled", true)
|
59
|
+
asserts_topic.received(:[]=, "grayscale.ratio", [3, 5, 2])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
run_tests if __FILE__ == $0
|
data/test/effect_test.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/helpers.rb'
|
2
|
+
|
3
|
+
class SomeEffect < Ray::Effect
|
4
|
+
Code = %{
|
5
|
+
vec4 effect(ray_some_effect args, vec4 color) {
|
6
|
+
return color;
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
Header = %{
|
11
|
+
foo bar;
|
12
|
+
}
|
13
|
+
|
14
|
+
effect_name :some_effect
|
15
|
+
attribute :thing, "vec4"
|
16
|
+
attribute :array, "vec2[10]"
|
17
|
+
|
18
|
+
def code
|
19
|
+
Code
|
20
|
+
end
|
21
|
+
|
22
|
+
def header
|
23
|
+
Header
|
24
|
+
end
|
25
|
+
|
26
|
+
def defaults
|
27
|
+
{
|
28
|
+
:thing => [4, 3, 2, 1],
|
29
|
+
"array[0]" => [10, 20]
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "an effect" do
|
35
|
+
setup { SomeEffect.new }
|
36
|
+
|
37
|
+
asserts(:name).equals :some_effect
|
38
|
+
|
39
|
+
asserts(:header).equals SomeEffect::Header
|
40
|
+
|
41
|
+
asserts(:struct).matches "struct ray_some_effect"
|
42
|
+
asserts(:struct).matches "bool enabled;"
|
43
|
+
asserts(:struct).matches "vec4 thing;"
|
44
|
+
asserts(:struct).matches "vec2 array[10];"
|
45
|
+
|
46
|
+
asserts(:code).equals SomeEffect::Code
|
47
|
+
|
48
|
+
context "default elements" do
|
49
|
+
setup do
|
50
|
+
hash = {}
|
51
|
+
topic.apply_defaults hash
|
52
|
+
hash
|
53
|
+
end
|
54
|
+
|
55
|
+
asserts_topic.equals("some_effect.enabled" => true,
|
56
|
+
"some_effect.thing" => [4, 3, 2, 1],
|
57
|
+
"some_effect.array[0]" => [10, 20])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
run_tests if __FILE__ == $0
|
data/test/game_test.rb
CHANGED
@@ -60,6 +60,24 @@ context "a game" do
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
+
context "with several scenes" do
|
64
|
+
hookup { topic.scenes << :scene_0 << :scene_1 << :scene_2 }
|
65
|
+
|
66
|
+
asserts :running?
|
67
|
+
asserts("current_scene") { topic.scenes.current }.equals {
|
68
|
+
topic.registered_scene(:scene_2)
|
69
|
+
}
|
70
|
+
|
71
|
+
context "after removing a few scenes" do
|
72
|
+
hookup { topic.pop_scene_while { |scene| scene.name != :scene_0 } }
|
73
|
+
|
74
|
+
asserts :running?
|
75
|
+
asserts("current_scene") { topic.scenes.current }.equals {
|
76
|
+
topic.registered_scene(:scene_0)
|
77
|
+
}
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
63
81
|
context "after changing event_runner" do
|
64
82
|
hookup do
|
65
83
|
topic.event_runner = @runner = Ray::DSL::EventRunner.new
|
data/test/gl_buffer_test.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require File.expand_path("helpers.rb", File.dirname(__FILE__))
|
2
2
|
|
3
|
-
MagicVertex = Ray::GL::Vertex.make [
|
3
|
+
MagicVertex = Ray::GL::Vertex.make [
|
4
|
+
[:vertex, "bar", :float],
|
5
|
+
[:instance, "baz", :float, true],
|
6
|
+
]
|
4
7
|
|
5
8
|
context "a buffer" do
|
6
9
|
setup { Ray::GL::Buffer.new :static, Ray::Vertex }
|
@@ -11,8 +14,16 @@ context "a buffer" do
|
|
11
14
|
asserts(:[], 256).nil
|
12
15
|
asserts(:[]=, 257, Ray::Vertex.new).raises_kind_of RangeError
|
13
16
|
|
17
|
+
denies :has_instance?
|
18
|
+
asserts(:instance_size).nil
|
19
|
+
asserts(:resize_instance, 300).raises_kind_of RuntimeError
|
20
|
+
asserts(:get_instance, 0).raises_kind_of RuntimeError
|
21
|
+
asserts(:set_instance, 0, MagicVertex::Instance.new).
|
22
|
+
raises_kind_of RuntimeError
|
23
|
+
|
14
24
|
context "nth vertex after setting it" do
|
15
25
|
setup do
|
26
|
+
@buf = topic
|
16
27
|
topic[34] = Ray::Vertex.new([10, 20], Ray::Color.red, [30, 40])
|
17
28
|
topic[34]
|
18
29
|
end
|
@@ -20,6 +31,37 @@ context "a buffer" do
|
|
20
31
|
asserts(:pos).equals Ray::Vector2[10, 20]
|
21
32
|
asserts(:col).equals Ray::Color.red
|
22
33
|
asserts(:tex).equals Ray::Vector2[30, 40]
|
34
|
+
|
35
|
+
context "and resizing the buffer" do
|
36
|
+
setup do
|
37
|
+
@buf.resize 300
|
38
|
+
@buf[34]
|
39
|
+
end
|
40
|
+
|
41
|
+
asserts(:pos).equals Ray::Vector2[10, 20]
|
42
|
+
asserts(:col).equals Ray::Color.red
|
43
|
+
asserts(:tex).equals Ray::Vector2[30, 40]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "a buffer with per-instance data" do
|
49
|
+
setup { Ray::GL::Buffer.new :static, MagicVertex }
|
50
|
+
|
51
|
+
asserts :has_instance?
|
52
|
+
asserts(:instance_size).equals 0
|
53
|
+
asserts(:get_instance, 0).nil
|
54
|
+
asserts(:set_instance, 0, MagicVertex::Instance.new).
|
55
|
+
raises_kind_of RangeError
|
56
|
+
|
57
|
+
context "resized" do
|
58
|
+
hookup { topic.resize_instance 300 }
|
59
|
+
asserts(:instance_size).equals 300
|
60
|
+
|
61
|
+
context "nth instance" do
|
62
|
+
setup { topic.set_instance 10, MagicVertex::Instance.new(42) }
|
63
|
+
asserts(:instance).equals 42
|
64
|
+
end
|
23
65
|
end
|
24
66
|
end
|
25
67
|
|
@@ -11,6 +11,11 @@ context "an index buffer" do
|
|
11
11
|
context "after changing an element" do
|
12
12
|
hookup { topic[34] = 30 }
|
13
13
|
asserts(:[], 34).equals 30
|
14
|
+
|
15
|
+
context "and resizing the buffer" do
|
16
|
+
hookup { topic.resize 300 }
|
17
|
+
asserts(:[], 34).equals 30
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
|
data/test/gl_vertex_test.rb
CHANGED
@@ -7,7 +7,10 @@ TestVertex = Ray::GL::Vertex.make [
|
|
7
7
|
[:bool, "in_Bool", :bool],
|
8
8
|
[:color, "in_Color", :color],
|
9
9
|
[:vector2, "in_Vector2", :vector2],
|
10
|
-
[:vector3, "in_Vector3", :vector3]
|
10
|
+
[:vector3, "in_Vector3", :vector3],
|
11
|
+
|
12
|
+
[:magic, "in_Magic", :vector3, true],
|
13
|
+
[:foo, "in_Foo", :bool, true],
|
11
14
|
]
|
12
15
|
|
13
16
|
context "a custom vertex" do
|
@@ -114,4 +117,28 @@ context "a custom vertex" do
|
|
114
117
|
end
|
115
118
|
end
|
116
119
|
|
120
|
+
context "an instance block" do
|
121
|
+
setup { TestVertex::Instance.new([1, 2, 3]) }
|
122
|
+
|
123
|
+
asserts(:magic).equals Ray::Vector3[1, 2, 3]
|
124
|
+
asserts(:foo)
|
125
|
+
asserts(:foo?)
|
126
|
+
|
127
|
+
context "after changing magic" do
|
128
|
+
hookup { topic.magic = [3, 2, 1] }
|
129
|
+
|
130
|
+
asserts(:magic).equals Ray::Vector3[3, 2, 1]
|
131
|
+
asserts(:foo)
|
132
|
+
asserts(:foo?)
|
133
|
+
end
|
134
|
+
|
135
|
+
context "after changing foo" do
|
136
|
+
hookup { topic.foo = false }
|
137
|
+
|
138
|
+
asserts(:magic).equals Ray::Vector3[1, 2, 3]
|
139
|
+
denies(:foo)
|
140
|
+
denies(:foo?)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
117
144
|
run_tests if __FILE__ == $0
|