ray 0.0.1 → 0.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. data/.gemtest +0 -0
  2. data/.yardopts +4 -0
  3. data/README.md +17 -21
  4. data/Rakefile +18 -139
  5. data/VERSION +1 -1
  6. data/ext/audio.cpp +723 -0
  7. data/ext/{color.c → color.cpp} +25 -13
  8. data/ext/drawable.cpp +91 -0
  9. data/ext/event.cpp +460 -0
  10. data/ext/extconf.rb +5 -104
  11. data/ext/font.cpp +190 -0
  12. data/ext/image.cpp +733 -0
  13. data/ext/input.cpp +74 -0
  14. data/ext/ray.cpp +168 -0
  15. data/ext/ray.hpp +356 -0
  16. data/ext/{rect.c → rect.cpp} +51 -37
  17. data/ext/shader.cpp +169 -0
  18. data/ext/shape.cpp +409 -0
  19. data/ext/sprite.cpp +306 -0
  20. data/ext/text.cpp +181 -0
  21. data/ext/vector.cpp +215 -0
  22. data/guide.md +619 -0
  23. data/lib/ray/audio.rb +0 -41
  24. data/lib/ray/color.rb +32 -10
  25. data/lib/ray/drawable.rb +16 -0
  26. data/lib/ray/dsl/event_listener.rb +25 -2
  27. data/lib/ray/dsl/event_runner.rb +33 -5
  28. data/lib/ray/dsl/event_translator.rb +66 -30
  29. data/lib/ray/dsl/handler.rb +3 -2
  30. data/lib/ray/dsl/matcher.rb +58 -14
  31. data/lib/ray/font.rb +38 -96
  32. data/lib/ray/font_set.rb +8 -8
  33. data/lib/ray/game.rb +87 -66
  34. data/lib/ray/helper.rb +105 -10
  35. data/lib/ray/image.rb +150 -24
  36. data/lib/ray/image_set.rb +3 -1
  37. data/lib/ray/input.rb +10 -0
  38. data/lib/ray/music_set.rb +5 -3
  39. data/lib/ray/ray.rb +21 -9
  40. data/lib/ray/rect.rb +48 -7
  41. data/lib/ray/rmagick.rb +41 -0
  42. data/lib/ray/scene.rb +99 -43
  43. data/lib/ray/scene_list.rb +67 -0
  44. data/lib/ray/shape.rb +132 -0
  45. data/lib/ray/sound_set.rb +4 -2
  46. data/lib/ray/sprite.rb +49 -111
  47. data/lib/ray/text.rb +101 -0
  48. data/lib/ray/text_helper.rb +37 -0
  49. data/lib/ray/turtle.rb +215 -0
  50. data/lib/ray/vector.rb +226 -0
  51. data/samples/audio/spacial.rb +44 -0
  52. data/samples/hello_world/hello.rb +9 -13
  53. data/samples/hello_world/hello_dsl.rb +8 -12
  54. data/samples/hello_world/text.rb +15 -0
  55. data/samples/opengl/binding.rb +38 -0
  56. data/samples/opengl/image.rb +32 -0
  57. data/samples/opengl/opengl.rb +34 -0
  58. data/samples/opengl/shader.rb +42 -0
  59. data/samples/pong/pong.rb +14 -10
  60. data/samples/run_scene.rb +53 -0
  61. data/samples/shaders/scene.rb +40 -0
  62. data/samples/shaders/shaders.rb +42 -0
  63. data/samples/shaders/shape.rb +34 -0
  64. data/samples/sokoban/sokoban.rb +18 -18
  65. data/samples/test/actual_scene.rb +41 -0
  66. data/samples/test/scene_riot.rb +39 -0
  67. data/samples/test/scene_spec.rb +32 -0
  68. data/samples/test/scene_test_unit.rb +25 -0
  69. data/samples/turtle/byzantium.rb +45 -0
  70. data/samples/turtle/hilbert.rb +48 -0
  71. data/samples/turtle/koch.rb +55 -0
  72. data/samples/turtle/mandala.rb +61 -0
  73. data/samples/turtle/tree.rb +57 -0
  74. data/test/audio_test.rb +69 -0
  75. data/test/color_test.rb +77 -0
  76. data/test/drawable_test.rb +19 -0
  77. data/test/dsl_test.rb +93 -0
  78. data/test/font_test.rb +57 -0
  79. data/test/helpers.rb +94 -0
  80. data/test/image_test.rb +82 -0
  81. data/test/ray_test.rb +25 -0
  82. data/test/rect_test.rb +121 -0
  83. data/{spec → test}/res/VeraMono.ttf +0 -0
  84. data/{spec → test}/res/aqua.bmp +0 -0
  85. data/{spec → test}/res/aqua.png +0 -0
  86. data/{spec → test}/res/aqua2.bmp +0 -0
  87. data/{spec → test}/res/not_a_jpeg.jpeg +0 -0
  88. data/{spec → test}/res/pop.wav +0 -0
  89. data/test/resource_set_test.rb +99 -0
  90. data/test/run_all.rb +7 -0
  91. data/test/shape_test.rb +101 -0
  92. data/test/sprite_test.rb +89 -0
  93. data/test/text_test.rb +78 -0
  94. data/test/turtle_test.rb +176 -0
  95. data/test/vector_test.rb +111 -0
  96. data/yard_ext.rb +0 -28
  97. metadata +95 -139
  98. data/.gitignore +0 -23
  99. data/.gitmodules +0 -3
  100. data/.rspec +0 -3
  101. data/ext/audio.c +0 -473
  102. data/ext/event.c +0 -557
  103. data/ext/font.c +0 -287
  104. data/ext/image.c +0 -933
  105. data/ext/joystick.c +0 -145
  106. data/ext/ray.c +0 -489
  107. data/ext/ray.h +0 -245
  108. data/ext/ray_osx.m +0 -161
  109. data/lib/ray/joystick.rb +0 -30
  110. data/psp/SDL_psp_main.c +0 -84
  111. data/psp/bigdecimal/README +0 -60
  112. data/psp/bigdecimal/bigdecimal.c +0 -4697
  113. data/psp/bigdecimal/bigdecimal.h +0 -216
  114. data/psp/bigdecimal/lib/bigdecimal/jacobian.rb +0 -85
  115. data/psp/bigdecimal/lib/bigdecimal/ludcmp.rb +0 -84
  116. data/psp/bigdecimal/lib/bigdecimal/math.rb +0 -235
  117. data/psp/bigdecimal/lib/bigdecimal/newton.rb +0 -77
  118. data/psp/bigdecimal/lib/bigdecimal/util.rb +0 -65
  119. data/psp/digest/bubblebabble/bubblebabble.c +0 -142
  120. data/psp/digest/defs.h +0 -20
  121. data/psp/digest/digest.c +0 -643
  122. data/psp/digest/digest.h +0 -32
  123. data/psp/digest/lib/digest.rb +0 -50
  124. data/psp/digest/lib/md5.rb +0 -27
  125. data/psp/digest/lib/sha1.rb +0 -27
  126. data/psp/digest/md5/md5.c +0 -420
  127. data/psp/digest/md5/md5.h +0 -80
  128. data/psp/digest/md5/md5init.c +0 -40
  129. data/psp/digest/rmd160/rmd160.c +0 -457
  130. data/psp/digest/rmd160/rmd160.h +0 -56
  131. data/psp/digest/rmd160/rmd160init.c +0 -40
  132. data/psp/digest/sha1/sha1.c +0 -269
  133. data/psp/digest/sha1/sha1.h +0 -39
  134. data/psp/digest/sha1/sha1init.c +0 -40
  135. data/psp/digest/sha2/lib/sha2.rb +0 -73
  136. data/psp/digest/sha2/sha2.c +0 -919
  137. data/psp/digest/sha2/sha2.h +0 -109
  138. data/psp/digest/sha2/sha2init.c +0 -52
  139. data/psp/enumerator/enumerator.c +0 -298
  140. data/psp/etc/etc.c +0 -559
  141. data/psp/ext.c +0 -289
  142. data/psp/fcntl/fcntl.c +0 -187
  143. data/psp/lib/rbconfig.rb +0 -178
  144. data/psp/nkf/lib/kconv.rb +0 -367
  145. data/psp/nkf/nkf-utf8/config.h +0 -88
  146. data/psp/nkf/nkf-utf8/nkf.c +0 -6040
  147. data/psp/nkf/nkf-utf8/utf8tbl.c +0 -8500
  148. data/psp/nkf/nkf-utf8/utf8tbl.h +0 -34
  149. data/psp/nkf/nkf.c +0 -654
  150. data/psp/socket/addrinfo.h +0 -173
  151. data/psp/socket/getaddrinfo.c +0 -676
  152. data/psp/socket/getnameinfo.c +0 -270
  153. data/psp/socket/pspsocket.c +0 -71
  154. data/psp/socket/pspsocket.h +0 -28
  155. data/psp/socket/socket.c +0 -4662
  156. data/psp/socket/sockport.h +0 -76
  157. data/psp/stringio/stringio.c +0 -1306
  158. data/psp/strscan/strscan.c +0 -1320
  159. data/psp/syck/bytecode.c +0 -1166
  160. data/psp/syck/emitter.c +0 -1242
  161. data/psp/syck/gram.c +0 -1894
  162. data/psp/syck/gram.h +0 -79
  163. data/psp/syck/handler.c +0 -174
  164. data/psp/syck/implicit.c +0 -2990
  165. data/psp/syck/node.c +0 -408
  166. data/psp/syck/rubyext.c +0 -2367
  167. data/psp/syck/syck.c +0 -504
  168. data/psp/syck/syck.h +0 -456
  169. data/psp/syck/token.c +0 -2725
  170. data/psp/syck/yaml2byte.c +0 -257
  171. data/psp/syck/yamlbyte.h +0 -170
  172. data/psp/thread/thread.c +0 -1175
  173. data/psp/zlib/zlib.c +0 -3547
  174. data/script.rb +0 -10
  175. data/spec/ray/audio_spec.rb +0 -146
  176. data/spec/ray/color_spec.rb +0 -57
  177. data/spec/ray/event_spec.rb +0 -80
  178. data/spec/ray/font_spec.rb +0 -93
  179. data/spec/ray/image_set_spec.rb +0 -48
  180. data/spec/ray/image_spec.rb +0 -162
  181. data/spec/ray/joystick_spec.rb +0 -21
  182. data/spec/ray/matcher_spec.rb +0 -50
  183. data/spec/ray/ray_spec.rb +0 -88
  184. data/spec/ray/rect_spec.rb +0 -154
  185. data/spec/ray/resource_set_spec.rb +0 -105
  186. data/spec/ray/sprite_spec.rb +0 -163
  187. data/spec/spec.opts +0 -4
  188. data/spec/spec_helper.rb +0 -8
@@ -0,0 +1,44 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ def path_of(res)
5
+ File.expand_path(File.dirname(__FILE__) + "/../../test/res/#{res}")
6
+ end
7
+
8
+ require 'ray'
9
+
10
+ SPEED = 5
11
+
12
+ Ray::Game.new("Spacial sounds") do
13
+ register do
14
+ add_hook :quit, method(:exit!)
15
+ end
16
+
17
+ scene :spacial do
18
+ @sound = sound path_of("pop.wav")
19
+ @sound.attenuation = 0.1
20
+ @sound.min_distance = 10
21
+ @sound.pos = [(640 / 2) - 5, (480 / 2) - 5, 0]
22
+
23
+ @rect = Ray::Rect.new(0, 0, 10, 10)
24
+
25
+ always do
26
+ @sound.play if (Time.now.to_i % 2) == 0
27
+
28
+ @rect.x += SPEED if holding? :right
29
+ @rect.x -= SPEED if holding? :left
30
+ @rect.y += SPEED if holding? :down
31
+ @rect.y -= SPEED if holding? :up
32
+
33
+ Ray::Audio.pos = [@rect.x, @rect.y, 0]
34
+ end
35
+
36
+ render do |win|
37
+ win.fill(Ray::Color.black)
38
+ win.draw_filled_rect(@rect, Ray::Color.green)
39
+ win.draw_filled_rect([(640 / 2) - 5, (480 / 2) - 5, 10, 10], Ray::Color.red)
40
+ end
41
+ end
42
+
43
+ push_scene :spacial
44
+ end
@@ -1,35 +1,31 @@
1
- $: << File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
- $: << File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
-
4
- def path_of(res)
5
- File.expand_path(File.dirname(__FILE__) + "/../../spec/res/#{res}")
6
- end
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
7
3
 
8
4
  require 'ray'
9
5
 
10
6
  class HelloScene < Ray::Scene
11
7
  scene_name :hello
12
-
8
+
13
9
  def setup
14
- @font = font(path_of("VeraMono.ttf"), 12)
10
+ @font = Ray::Font.default
15
11
  end
16
-
12
+
17
13
  def render(win)
18
- @font.draw("Hello world!", :on => win, :at => [0, 0])
14
+ @font.draw("Hello world!", :on => win, :at => [0, 0], :size => 12)
19
15
  end
20
16
  end
21
17
 
22
18
  class HelloWorld < Ray::Game
23
19
  def initialize
24
20
  super("Hello world!")
25
-
21
+
26
22
  HelloScene.bind(self)
27
23
  push_scene :hello
28
24
  end
29
-
25
+
30
26
  def register
31
27
  add_hook :quit, method(:exit!)
32
28
  end
33
29
  end
34
30
 
35
- HelloWorld.new.run
31
+ HelloWorld.new.run
@@ -1,9 +1,5 @@
1
- $: << File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
- $: << File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
-
4
- def path_of(res)
5
- File.expand_path(File.dirname(__FILE__) + "/../../spec/res/#{res}")
6
- end
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
7
3
 
8
4
  require 'ray'
9
5
 
@@ -11,14 +7,14 @@ Ray::Game.new("Hello world!") do
11
7
  register do
12
8
  add_hook :quit, method(:exit!)
13
9
  end
14
-
10
+
15
11
  scene :hello do
16
- @font = font(path_of("VeraMono.ttf"), 12)
17
-
12
+ @font = Ray::Font.default
13
+
18
14
  render do |win|
19
- @font.draw("Hello world", :on => win, :at => [0, 0])
15
+ @font.draw("Hello world", :on => win, :at => [0, 0], :size => 12)
20
16
  end
21
17
  end
22
-
18
+
23
19
  push_scene :hello
24
- end
20
+ end
@@ -0,0 +1,15 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ require 'ray'
5
+
6
+ Ray.game "Hello world!" do
7
+ register { add_hook :quit, method(:exit!) }
8
+
9
+ scene :hello do
10
+ @text = text "Hello world!", :angle => 30, :at => [100, 100], :size => 30
11
+ render { |win| @text.draw_on win }
12
+ end
13
+
14
+ push_scene :hello
15
+ end
@@ -0,0 +1,38 @@
1
+ require 'ffi'
2
+
3
+ module GL
4
+ extend FFI::Library
5
+
6
+ if RUBY_PLATFORM.include? "darwin"
7
+ ffi_lib "/System/Library/Frameworks/OpenGL.framework/OpenGL"
8
+ else
9
+ ffi_lib "GL"
10
+ end
11
+
12
+ Triangles = 4
13
+ Quads = 7
14
+
15
+ attach_function :glBegin, [:uint], :void
16
+ attach_function :glEnd, [], :void
17
+
18
+ attach_function :glVertex2f, [:float, :float], :void
19
+ attach_function :glColor3f, [:float, :float, :float], :void
20
+ attach_function :glTexCoord2f, [:float, :float], :void
21
+
22
+ attach_function :glScalef, [:float, :float, :float], :void
23
+
24
+ class << self
25
+ def begin(mode)
26
+ glBegin(mode)
27
+ yield
28
+ ensure
29
+ glEnd
30
+ end
31
+
32
+ alias :vertex :glVertex2f
33
+ alias :color :glColor3f
34
+ alias :tex_coord :glTexCoord2f
35
+
36
+ alias :scale :glScalef
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ require File.expand_path(File.dirname(__FILE__)) + "/binding.rb"
5
+ require 'ray'
6
+
7
+ Ray::Game.new("OpenGL test") do
8
+ register do
9
+ add_hook :quit, method(:exit!)
10
+ end
11
+
12
+ scene :triangle do
13
+ image = Ray::Image.new(:w => 50, :h => 50).fill(Ray::Color.blue).update
14
+
15
+ @drawable = Ray::Drawable.new do |img|
16
+ image.bind
17
+
18
+ GL.begin GL::Quads do
19
+ GL.tex_coord(0.0, 0.0); GL.vertex(250.0, 300.0)
20
+ GL.tex_coord(0.0, 1.0); GL.vertex(250.0, 250.0)
21
+ GL.tex_coord(1.0, 1.0); GL.vertex(300.0, 250.0)
22
+ GL.tex_coord(1.0, 0.0); GL.vertex(300.0, 300.0)
23
+ end
24
+ end
25
+
26
+ render do |win|
27
+ @drawable.draw_on win
28
+ end
29
+ end
30
+
31
+ push_scene :triangle
32
+ end
@@ -0,0 +1,34 @@
1
+ # FFI is required to run this sample.
2
+ # You could use any OpenGL binding instead.
3
+ # In fact, using an FFI with hard-coded constants is probably
4
+ # not really a good idea...
5
+
6
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
7
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
8
+
9
+ require File.expand_path(File.dirname(__FILE__)) + "/binding.rb"
10
+ require 'ray'
11
+
12
+ Ray::Game.new("OpenGL test") do
13
+ register do
14
+ add_hook :quit, method(:exit!)
15
+ end
16
+
17
+ scene :triangle do
18
+ @drawable = Ray::Drawable.new do |img|
19
+ GL.scale(2.0, 1.0, 1.0)
20
+
21
+ GL.begin GL::Triangles do
22
+ GL.color(1.0, 0.0, 0.0); GL.vertex(300.0, 300.0)
23
+ GL.color(1.0, 1.0, 0.0); GL.vertex(100.0, 300.0)
24
+ GL.color(1.0, 1.0, 1.0); GL.vertex(300.0, 100.0)
25
+ end
26
+ end
27
+
28
+ render do |win|
29
+ @drawable.draw_on win
30
+ end
31
+ end
32
+
33
+ push_scene :triangle
34
+ end
@@ -0,0 +1,42 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ require File.expand_path(File.dirname(__FILE__)) + "/binding.rb"
5
+ require 'ray'
6
+
7
+ Ray::Game.new("OpenGL test") do
8
+ register do
9
+ add_hook :quit, method(:exit!)
10
+ end
11
+
12
+ scene :triangle do
13
+ shader = Ray::Shader.new StringIO.new(<<-SHADER)
14
+ uniform vec3 ratio;
15
+
16
+ void main() {
17
+ vec4 color = gl_Color;
18
+ float gray = dot(color.xyz, ratio);
19
+
20
+ gl_FragColor = vec4(gray, gray, gray, 1.0);
21
+ }
22
+ SHADER
23
+
24
+ shader["ratio"] = [0.299, 0.587, 0.114]
25
+
26
+ @drawable = Ray::Drawable.new do |img|
27
+ shader.bind do
28
+ GL.begin GL::Triangles do
29
+ GL.color(1.0, 0.0, 0.0); GL.vertex(300.0, 300.0)
30
+ GL.color(1.0, 1.0, 0.0); GL.vertex(100.0, 300.0)
31
+ GL.color(1.0, 1.0, 1.0); GL.vertex(300.0, 100.0)
32
+ end
33
+ end
34
+ end
35
+
36
+ render do |win|
37
+ @drawable.draw_on win
38
+ end
39
+ end
40
+
41
+ push_scene :triangle
42
+ end
@@ -1,8 +1,8 @@
1
- $: << File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
- $: << File.expand_path(File.dirname(__FILE__) + "/../../ext")
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
3
 
4
4
  def path_of(res)
5
- File.expand_path(File.dirname(__FILE__) + "/../../spec/res/#{res}")
5
+ File.expand_path(File.dirname(__FILE__) + "/../../test/res/#{res}")
6
6
  end
7
7
 
8
8
  require 'ray'
@@ -12,16 +12,19 @@ module Pong
12
12
  scene_name :pong_scene
13
13
 
14
14
  def setup
15
- @font = font(path_of("VeraMono.ttf"), 12)
15
+ @font = Ray::Font.default
16
16
 
17
17
  player_img = Ray::Image.new(:w => 20, :h => 50)
18
18
  player_img.draw_filled_rect(Ray::Rect.new(0, 0, 20, 50), Ray::Color.blue)
19
+ player_img.update
19
20
 
20
21
  adv_img = Ray::Image.new(:w => 20, :h => 50)
21
22
  adv_img.draw_filled_rect(Ray::Rect.new(0, 0, 20, 50), Ray::Color.red)
23
+ adv_img.update
22
24
 
23
25
  ball_img = Ray::Image.new(:w => 10, :h => 10)
24
26
  ball_img.draw_filled_circle([5, 5], 5, Ray::Color.white)
27
+ ball_img.update
25
28
 
26
29
  @player = sprite(player_img)
27
30
  @adv = sprite(adv_img)
@@ -68,9 +71,9 @@ module Pong
68
71
  end
69
72
 
70
73
  if @ball.x >= @screen_rect.w
71
- raise_event(:point_gained, :player)
74
+ raise_event :point_gained, :player
72
75
  elsif @ball.x <= 0
73
- raise_event(:point_gained, :adv)
76
+ raise_event :point_gained, :adv
74
77
  end
75
78
 
76
79
  if @ball.collide?(@player) || @ball.collide?(@adv) ||
@@ -101,13 +104,14 @@ module Pong
101
104
  def render(win)
102
105
  win.fill(Ray::Color.black)
103
106
 
104
- @player.draw
105
- @adv.draw
106
- @ball.draw
107
+ @player.draw_on win
108
+ @adv.draw_on win
109
+ @ball.draw_on win
107
110
 
108
111
  @font.draw("#{@scores[:player]} - #{@scores[:adv]}",
109
112
  :at => [0, 0], :on => win,
110
- :color => Ray::Color.white)
113
+ :color => Ray::Color.white,
114
+ :size => 12)
111
115
  end
112
116
  end
113
117
 
@@ -0,0 +1,53 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../ext")
3
+
4
+ require 'ray'
5
+
6
+ $stdout = StringIO.new
7
+
8
+ Ray.game "run_scene" do
9
+ register do
10
+ add_hook :quit, method(:exit!)
11
+
12
+ on :key_press, key(:up) do
13
+ puts "#{self} knows you pressed up"
14
+ end
15
+ end
16
+
17
+ font = Ray::Font.default
18
+
19
+ scene :sec do
20
+ on :key_press, key(:down) do
21
+ puts "#{self} knows you pressed down"
22
+ end
23
+
24
+ on :key_press, key(:left) do
25
+ pop_scene
26
+ end
27
+
28
+ puts "In scene :sec"
29
+
30
+ render do |win|
31
+ font.draw($stdout.string, :on => win, :size => 12)
32
+ end
33
+ end
34
+
35
+ scene :first do
36
+ on :key_press, key(:left) do
37
+ puts "#{self} knows you pressed left"
38
+ end
39
+
40
+ on :key_press, key(:right) do
41
+ run_scene :sec
42
+ puts "Back to scene :first"
43
+ end
44
+
45
+ puts "In scene :first"
46
+
47
+ render do |win|
48
+ font.draw($stdout.string, :on => win, :size => 12)
49
+ end
50
+ end
51
+
52
+ push_scene :first
53
+ end
@@ -0,0 +1,40 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../../ext")
3
+
4
+ require 'ray'
5
+
6
+ Ray::Game.new("Shaders test") do
7
+ register do
8
+ add_hook :quit, method(:exit!)
9
+ end
10
+
11
+ scene :shader do
12
+ self.lazy_rendering = true
13
+
14
+ shape = Ray::Shape.rectangle([0, 0, 100, 100], Ray::Color.black)
15
+ shape.each do |point|
16
+ point.color = Ray::Color.new(rand(256), rand(256), rand(256))
17
+ end
18
+
19
+ self.shader = Ray::Shader.new StringIO.new(<<-SHADER)
20
+ uniform sampler2D texture;
21
+ uniform vec3 ratio;
22
+
23
+ void main() {
24
+ vec4 color = texture2D(texture, gl_TexCoord[0].xy);
25
+ float gray = dot(color.xyz, ratio);
26
+
27
+ gl_FragColor = vec4(gray, gray, gray, 1.0);
28
+ }
29
+ SHADER
30
+
31
+ shader["texture"] = :current
32
+ shader["ratio"] = [0.299, 0.587, 0.114]
33
+
34
+ render do |win|
35
+ shape.draw_on win
36
+ end
37
+ end
38
+
39
+ push_scene :shader
40
+ end