ray 0.1.0.pre1 → 0.1.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.
Files changed (370) hide show
  1. data/README.md +235 -32
  2. data/Rakefile +20 -49
  3. data/ext/audio.c +68 -0
  4. data/ext/audio_source.c +197 -0
  5. data/ext/buffer_renderer.c +130 -0
  6. data/ext/color.c +179 -0
  7. data/ext/drawable.c +446 -0
  8. data/ext/event.c +337 -0
  9. data/ext/extconf.rb +80 -6
  10. data/ext/font.c +97 -0
  11. data/ext/gl.c +114 -0
  12. data/ext/gl_buffer.c +224 -0
  13. data/ext/gl_index_buffer.c +202 -0
  14. data/ext/gl_int_array.c +139 -0
  15. data/ext/gl_vertex.c +157 -0
  16. data/ext/image.c +263 -0
  17. data/ext/image_target.c +84 -0
  18. data/ext/input.c +53 -0
  19. data/ext/matrix.c +374 -0
  20. data/ext/music.c +113 -0
  21. data/ext/polygon.c +426 -0
  22. data/ext/ray.c +59 -0
  23. data/ext/ray.h +168 -0
  24. data/ext/rect.c +255 -0
  25. data/ext/say.h +31 -0
  26. data/ext/say_all.h +77 -0
  27. data/ext/say_arial.h +14689 -0
  28. data/ext/say_array.c +124 -0
  29. data/ext/say_array.h +34 -0
  30. data/ext/say_audio.c +64 -0
  31. data/ext/say_audio.h +170 -0
  32. data/ext/say_audio_context.c +40 -0
  33. data/ext/say_audio_source.c +96 -0
  34. data/ext/say_basic_type.c +17 -0
  35. data/ext/say_basic_type.h +47 -0
  36. data/ext/say_buffer.c +277 -0
  37. data/ext/say_buffer.h +37 -0
  38. data/ext/say_buffer_renderer.c +121 -0
  39. data/ext/say_buffer_renderer.h +33 -0
  40. data/ext/say_buffer_slice.c +247 -0
  41. data/ext/say_buffer_slice.h +29 -0
  42. data/ext/say_clean_up.c +14 -0
  43. data/ext/say_context.c +163 -0
  44. data/ext/say_context.h +26 -0
  45. data/ext/say_drawable.c +350 -0
  46. data/ext/say_drawable.h +100 -0
  47. data/ext/say_error.c +27 -0
  48. data/ext/say_event.h +213 -0
  49. data/ext/say_font.c +335 -0
  50. data/ext/say_font.h +51 -0
  51. data/ext/say_image.c +283 -0
  52. data/ext/say_image.h +52 -0
  53. data/ext/say_image_target.c +134 -0
  54. data/ext/say_image_target.h +25 -0
  55. data/ext/say_imp.h +70 -0
  56. data/ext/say_index_buffer.c +90 -0
  57. data/ext/say_index_buffer.h +29 -0
  58. data/ext/say_index_buffer_slice.c +227 -0
  59. data/ext/say_index_buffer_slice.h +28 -0
  60. data/ext/say_input.c +35 -0
  61. data/ext/say_matrix.c +314 -0
  62. data/ext/say_matrix.h +55 -0
  63. data/ext/say_music.c +225 -0
  64. data/ext/say_osx.h +62 -0
  65. data/ext/say_osx_context.h +98 -0
  66. data/ext/say_osx_window.h +766 -0
  67. data/ext/say_polygon.c +358 -0
  68. data/ext/say_polygon.h +62 -0
  69. data/ext/say_renderer.c +42 -0
  70. data/ext/say_renderer.h +22 -0
  71. data/ext/say_shader.c +375 -0
  72. data/ext/say_shader.h +91 -0
  73. data/ext/say_sound.c +67 -0
  74. data/ext/say_sound_buffer.c +96 -0
  75. data/ext/say_sprite.c +273 -0
  76. data/ext/say_sprite.h +53 -0
  77. data/ext/say_string.c +9 -0
  78. data/ext/say_table.c +86 -0
  79. data/ext/say_table.h +24 -0
  80. data/ext/say_target.c +264 -0
  81. data/ext/say_target.h +67 -0
  82. data/ext/say_text.c +441 -0
  83. data/ext/say_text.h +56 -0
  84. data/ext/say_thread.c +46 -0
  85. data/ext/say_thread.h +39 -0
  86. data/ext/say_thread_variable.c +44 -0
  87. data/ext/say_utf.c +62 -0
  88. data/ext/say_vertex_type.c +113 -0
  89. data/ext/say_vertex_type.h +40 -0
  90. data/ext/say_vfile.c +57 -0
  91. data/ext/say_view.c +150 -0
  92. data/ext/say_view.h +44 -0
  93. data/ext/say_win.h +24 -0
  94. data/ext/say_win_context.h +91 -0
  95. data/ext/say_win_window.h +670 -0
  96. data/ext/say_window.c +155 -0
  97. data/ext/say_window.h +43 -0
  98. data/ext/say_x11.h +41 -0
  99. data/ext/say_x11_context.h +96 -0
  100. data/ext/say_x11_window.h +818 -0
  101. data/ext/shader.c +302 -0
  102. data/ext/sound.c +118 -0
  103. data/ext/sound_buffer.c +75 -0
  104. data/ext/sprite.c +241 -0
  105. data/ext/stb_image.h +4971 -0
  106. data/ext/stb_image_write.h +511 -0
  107. data/ext/target.c +184 -0
  108. data/ext/text.c +162 -0
  109. data/ext/utils.c +10 -0
  110. data/ext/vector.c +261 -0
  111. data/ext/vendor/freetype/bin/freetype6.dll +0 -0
  112. data/ext/vendor/freetype/bin/zlib1.dll +0 -0
  113. data/ext/vendor/freetype/include/freetype2/freetype/config/ftconfig.h +350 -0
  114. data/ext/vendor/freetype/include/freetype2/freetype/config/ftheader.h +729 -0
  115. data/ext/vendor/freetype/include/freetype2/freetype/config/ftmodule.h +22 -0
  116. data/ext/vendor/freetype/include/freetype2/freetype/config/ftoption.h +695 -0
  117. data/ext/vendor/freetype/include/freetype2/freetype/config/ftstdlib.h +180 -0
  118. data/ext/vendor/freetype/include/freetype2/freetype/freetype.h +3434 -0
  119. data/ext/vendor/freetype/include/freetype2/freetype/ftbbox.h +94 -0
  120. data/ext/vendor/freetype/include/freetype2/freetype/ftbdf.h +200 -0
  121. data/ext/vendor/freetype/include/freetype2/freetype/ftbitmap.h +206 -0
  122. data/ext/vendor/freetype/include/freetype2/freetype/ftcache.h +1110 -0
  123. data/ext/vendor/freetype/include/freetype2/freetype/ftchapters.h +100 -0
  124. data/ext/vendor/freetype/include/freetype2/freetype/fterrdef.h +239 -0
  125. data/ext/vendor/freetype/include/freetype2/freetype/fterrors.h +206 -0
  126. data/ext/vendor/freetype/include/freetype2/freetype/ftgasp.h +113 -0
  127. data/ext/vendor/freetype/include/freetype2/freetype/ftglyph.h +575 -0
  128. data/ext/vendor/freetype/include/freetype2/freetype/ftgxval.h +358 -0
  129. data/ext/vendor/freetype/include/freetype2/freetype/ftgzip.h +102 -0
  130. data/ext/vendor/freetype/include/freetype2/freetype/ftimage.h +1237 -0
  131. data/ext/vendor/freetype/include/freetype2/freetype/ftincrem.h +331 -0
  132. data/ext/vendor/freetype/include/freetype2/freetype/ftlcdfil.h +166 -0
  133. data/ext/vendor/freetype/include/freetype2/freetype/ftlist.h +273 -0
  134. data/ext/vendor/freetype/include/freetype2/freetype/ftlzw.h +99 -0
  135. data/ext/vendor/freetype/include/freetype2/freetype/ftmac.h +272 -0
  136. data/ext/vendor/freetype/include/freetype2/freetype/ftmm.h +378 -0
  137. data/ext/vendor/freetype/include/freetype2/freetype/ftmodapi.h +406 -0
  138. data/ext/vendor/freetype/include/freetype2/freetype/ftmoderr.h +155 -0
  139. data/ext/vendor/freetype/include/freetype2/freetype/ftotval.h +198 -0
  140. data/ext/vendor/freetype/include/freetype2/freetype/ftoutln.h +526 -0
  141. data/ext/vendor/freetype/include/freetype2/freetype/ftpfr.h +172 -0
  142. data/ext/vendor/freetype/include/freetype2/freetype/ftrender.h +229 -0
  143. data/ext/vendor/freetype/include/freetype2/freetype/ftsizes.h +159 -0
  144. data/ext/vendor/freetype/include/freetype2/freetype/ftsnames.h +170 -0
  145. data/ext/vendor/freetype/include/freetype2/freetype/ftstroke.h +716 -0
  146. data/ext/vendor/freetype/include/freetype2/freetype/ftsynth.h +73 -0
  147. data/ext/vendor/freetype/include/freetype2/freetype/ftsystem.h +346 -0
  148. data/ext/vendor/freetype/include/freetype2/freetype/fttrigon.h +350 -0
  149. data/ext/vendor/freetype/include/freetype2/freetype/fttypes.h +583 -0
  150. data/ext/vendor/freetype/include/freetype2/freetype/ftwinfnt.h +263 -0
  151. data/ext/vendor/freetype/include/freetype2/freetype/ftxf86.h +80 -0
  152. data/ext/vendor/freetype/include/freetype2/freetype/t1tables.h +450 -0
  153. data/ext/vendor/freetype/include/freetype2/freetype/ttnameid.h +1132 -0
  154. data/ext/vendor/freetype/include/freetype2/freetype/tttables.h +756 -0
  155. data/ext/vendor/freetype/include/freetype2/freetype/tttags.h +99 -0
  156. data/ext/vendor/freetype/include/freetype2/freetype/ttunpat.h +59 -0
  157. data/ext/vendor/freetype/include/ft2build.h +61 -0
  158. data/ext/vendor/freetype/lib/freetype-bcc.lib +0 -0
  159. data/ext/vendor/freetype/lib/freetype6.def +249 -0
  160. data/ext/vendor/freetype/lib/libfreetype.dll.a +0 -0
  161. data/ext/vendor/freetype/lib/tmp.freetype.lib +0 -0
  162. data/ext/vendor/glew/LICENSE.txt +73 -0
  163. data/ext/vendor/glew/README.txt +18 -0
  164. data/ext/vendor/glew/include/GL/glew.h +15507 -0
  165. data/ext/vendor/glew/include/GL/glxew.h +1568 -0
  166. data/ext/vendor/glew/include/GL/wglew.h +1361 -0
  167. data/ext/vendor/glew/lib/glew32.dll +0 -0
  168. data/ext/vendor/glew/lib/glew32mx.dll +0 -0
  169. data/ext/vendor/glew/lib/libglew32.a +0 -0
  170. data/ext/vendor/glew/lib/libglew32.dll.a +0 -0
  171. data/ext/vendor/glew/lib/libglew32mx.a +0 -0
  172. data/ext/vendor/glew/lib/libglew32mx.dll.a +0 -0
  173. data/ext/vendor/openal/COPYING +484 -0
  174. data/ext/vendor/openal/Win32/soft_oal.dll +0 -0
  175. data/ext/vendor/openal/include/AL/al.h +724 -0
  176. data/ext/vendor/openal/include/AL/alc.h +277 -0
  177. data/ext/vendor/openal/include/AL/alext.h +165 -0
  178. data/ext/vendor/openal/include/AL/efx-creative.h +3 -0
  179. data/ext/vendor/openal/include/AL/efx.h +758 -0
  180. data/ext/vendor/openal/lib/libOpenAL32.dll.a +0 -0
  181. data/ext/vendor/sndfile/bin/libsndfile-1.dll +0 -0
  182. data/ext/vendor/sndfile/include/sndfile.h +666 -0
  183. data/ext/vendor/sndfile/include/sndfile.hh +422 -0
  184. data/ext/vendor/sndfile/lib/libsndfile-1.def +41 -0
  185. data/ext/vendor/sndfile/lib/libsndfile-1.lib +0 -0
  186. data/ext/vertex.c +96 -0
  187. data/ext/view.c +131 -0
  188. data/ext/window.c +183 -0
  189. data/lib/ray/animation.rb +248 -0
  190. data/lib/ray/animation/block_animation.rb +36 -0
  191. data/lib/ray/animation/circular_motion.rb +57 -0
  192. data/lib/ray/animation/color_variation.rb +102 -0
  193. data/lib/ray/animation/combination.rb +71 -0
  194. data/lib/ray/animation/float_variation.rb +76 -0
  195. data/lib/ray/animation/sequence.rb +65 -0
  196. data/lib/ray/animation/sprite_animation.rb +68 -0
  197. data/lib/ray/animation/vector_variation.rb +111 -0
  198. data/lib/ray/animation_list.rb +50 -0
  199. data/lib/ray/audio.rb +4 -7
  200. data/lib/ray/buffer_renderer.rb +9 -0
  201. data/lib/ray/color.rb +41 -6
  202. data/lib/ray/drawable.rb +34 -9
  203. data/lib/ray/dsl.rb +6 -0
  204. data/lib/ray/dsl/event.rb +1 -1
  205. data/lib/ray/dsl/event_listener.rb +14 -10
  206. data/lib/ray/dsl/event_raiser.rb +5 -2
  207. data/lib/ray/dsl/event_runner.rb +4 -10
  208. data/lib/ray/dsl/event_translator.rb +67 -99
  209. data/lib/ray/dsl/handler.rb +1 -1
  210. data/lib/ray/dsl/matcher.rb +40 -27
  211. data/lib/ray/event.rb +22 -0
  212. data/lib/ray/font.rb +0 -42
  213. data/lib/ray/font_set.rb +3 -7
  214. data/lib/ray/game.rb +33 -73
  215. data/lib/ray/gl/int_array.rb +24 -0
  216. data/lib/ray/gl/vertex.rb +106 -0
  217. data/lib/ray/helper.rb +25 -11
  218. data/lib/ray/image.rb +9 -154
  219. data/lib/ray/image_set.rb +3 -8
  220. data/lib/ray/image_target.rb +12 -0
  221. data/lib/ray/matrix.rb +90 -0
  222. data/lib/ray/music.rb +12 -0
  223. data/lib/ray/polygon.rb +77 -0
  224. data/lib/ray/ray.rb +45 -13
  225. data/lib/ray/rect.rb +14 -3
  226. data/lib/ray/resource_set.rb +18 -35
  227. data/lib/ray/scene.rb +43 -81
  228. data/lib/ray/scene_list.rb +12 -5
  229. data/lib/ray/shader.rb +82 -0
  230. data/lib/ray/sound.rb +18 -0
  231. data/lib/ray/sound_buffer.rb +6 -0
  232. data/lib/ray/sound_buffer_set.rb +32 -0
  233. data/lib/ray/sprite.rb +111 -97
  234. data/lib/ray/target.rb +18 -0
  235. data/lib/ray/text.rb +80 -58
  236. data/lib/ray/text_helper.rb +21 -27
  237. data/lib/ray/turtle.rb +49 -38
  238. data/lib/ray/vector.rb +76 -1
  239. data/lib/ray/vertex.rb +24 -0
  240. data/lib/ray/view.rb +47 -0
  241. data/lib/ray/window.rb +23 -0
  242. data/samples/_media/Beep.wav +0 -0
  243. data/samples/_media/CptnRuby Gem.png +0 -0
  244. data/samples/_media/CptnRuby Map.txt +25 -0
  245. data/samples/_media/CptnRuby Tileset.png +0 -0
  246. data/samples/_media/CptnRuby.png +0 -0
  247. data/samples/_media/Space.png +0 -0
  248. data/samples/_media/Star.png +0 -0
  249. data/samples/_media/Starfighter.png +0 -0
  250. data/samples/animation/chain.rb +33 -0
  251. data/samples/animation/circle.rb +38 -0
  252. data/samples/animation/color.rb +18 -0
  253. data/samples/animation/rotation.rb +17 -0
  254. data/samples/animation/sequence.rb +33 -0
  255. data/samples/animation/shader.rb +65 -0
  256. data/samples/animation/sprite_motion.rb +103 -0
  257. data/samples/animation/translation.rb +23 -0
  258. data/samples/audio/spacial.rb +25 -11
  259. data/samples/buffer/buffer.rb +28 -0
  260. data/samples/buffer/index_buffer.rb +36 -0
  261. data/samples/buffer/renderer.rb +27 -0
  262. data/samples/cptn_ruby/cptn_ruby.rb +279 -0
  263. data/samples/hello_world/hello.rb +2 -2
  264. data/samples/hello_world/hello_dsl.rb +3 -3
  265. data/samples/hello_world/text.rb +2 -2
  266. data/samples/opengl/cube.rb +124 -0
  267. data/samples/opengl/image.rb +36 -16
  268. data/samples/opengl/obj_loader.rb +99 -0
  269. data/samples/opengl/opengl.rb +24 -18
  270. data/samples/opengl/shader.rb +36 -26
  271. data/samples/pong/pong.rb +41 -39
  272. data/samples/{run_scene.rb → scenes/run_scene.rb} +21 -7
  273. data/samples/shaders/geometry.rb +98 -0
  274. data/samples/shaders/scene.rb +19 -12
  275. data/samples/shaders/shaders.rb +34 -17
  276. data/samples/shaders/shape.rb +12 -7
  277. data/samples/sokoban/level_1 +11 -7
  278. data/samples/sokoban/sokoban.rb +36 -63
  279. data/samples/starfighter/starfighter.rb +159 -0
  280. data/samples/test/actual_scene.rb +3 -3
  281. data/samples/test/scene_riot.rb +4 -4
  282. data/samples/test/scene_spec.rb +3 -3
  283. data/samples/test/scene_test_unit.rb +1 -1
  284. data/samples/turtle/byzantium.rb +10 -5
  285. data/samples/turtle/hilbert.rb +16 -11
  286. data/samples/turtle/koch.rb +16 -11
  287. data/samples/turtle/mandala.rb +43 -38
  288. data/samples/turtle/tree.rb +13 -8
  289. data/samples/view/resize.rb +26 -0
  290. data/samples/view/view.rb +35 -0
  291. data/samples/window/all_events.rb +44 -0
  292. data/samples/window/change_title.rb +16 -0
  293. data/samples/window/fullscreen.rb +18 -0
  294. data/samples/window/get_pixel.rb +29 -0
  295. data/samples/window/icon.rb +88 -0
  296. data/samples/window/input.rb +27 -0
  297. data/samples/window/no_border.rb +16 -0
  298. data/samples/window/resize.rb +24 -0
  299. data/test/animation/color_variation_test.rb +64 -0
  300. data/test/animation/combination_test.rb +35 -0
  301. data/test/animation/float_variation_test.rb +75 -0
  302. data/test/animation/vector_variation_test.rb +123 -0
  303. data/test/animation_list_test.rb +122 -0
  304. data/test/animation_test.rb +83 -0
  305. data/test/audio_test.rb +88 -33
  306. data/test/buffer_renderer_test.rb +38 -0
  307. data/test/color_test.rb +31 -22
  308. data/test/drawable_test.rb +207 -7
  309. data/test/dsl_test.rb +25 -7
  310. data/test/font_test.rb +6 -40
  311. data/test/game_test.rb +76 -0
  312. data/test/gl_buffer_test.rb +26 -0
  313. data/test/gl_index_buffer_test.rb +17 -0
  314. data/test/gl_vertex_test.rb +117 -0
  315. data/test/helpers.rb +45 -5
  316. data/test/image_target_test.rb +19 -0
  317. data/test/image_test.rb +73 -53
  318. data/test/int_array_test.rb +64 -0
  319. data/test/matrix_test.rb +134 -0
  320. data/test/polygon_test.rb +126 -0
  321. data/test/rect_test.rb +6 -8
  322. data/test/res/frag.c +14 -0
  323. data/test/res/frag3d.c +10 -0
  324. data/test/res/frag_gray.c +17 -0
  325. data/test/res/frag_light3d.c +20 -0
  326. data/test/res/light3d.c +20 -0
  327. data/test/res/sprite.png +0 -0
  328. data/test/res/teapot.obj +12831 -0
  329. data/test/res/vert.c +17 -0
  330. data/test/res/vertex3d.c +14 -0
  331. data/test/resource_set_test.rb +8 -45
  332. data/test/run_all.rb +1 -1
  333. data/test/scene_list_test.rb +79 -0
  334. data/test/scene_test.rb +168 -0
  335. data/test/shader_test.rb +58 -0
  336. data/test/sprite_test.rb +46 -41
  337. data/test/target_test.rb +34 -0
  338. data/test/text_test.rb +20 -31
  339. data/test/turtle_test.rb +35 -20
  340. data/test/vector_test.rb +61 -19
  341. data/test/vertex_test.rb +43 -0
  342. data/test/view_test.rb +61 -0
  343. metadata +347 -126
  344. data/.yardopts +0 -4
  345. data/VERSION +0 -1
  346. data/ext/audio.cpp +0 -723
  347. data/ext/color.cpp +0 -159
  348. data/ext/drawable.cpp +0 -91
  349. data/ext/event.cpp +0 -460
  350. data/ext/font.cpp +0 -190
  351. data/ext/image.cpp +0 -733
  352. data/ext/input.cpp +0 -74
  353. data/ext/ray.cpp +0 -168
  354. data/ext/ray.hpp +0 -356
  355. data/ext/rect.cpp +0 -245
  356. data/ext/shader.cpp +0 -169
  357. data/ext/shape.cpp +0 -409
  358. data/ext/sprite.cpp +0 -306
  359. data/ext/text.cpp +0 -181
  360. data/ext/vector.cpp +0 -215
  361. data/guide.md +0 -619
  362. data/lib/ray/input.rb +0 -10
  363. data/lib/ray/music_set.rb +0 -37
  364. data/lib/ray/rmagick.rb +0 -41
  365. data/lib/ray/shape.rb +0 -132
  366. data/lib/ray/sound_set.rb +0 -37
  367. data/samples/opengl/binding.rb +0 -38
  368. data/test/ray_test.rb +0 -25
  369. data/test/shape_test.rb +0 -101
  370. data/yard_ext.rb +0 -63
@@ -0,0 +1,302 @@
1
+ #include "ray.h"
2
+
3
+ VALUE ray_cShader = Qnil;
4
+
5
+ VALUE ray_shader2rb(say_shader *shader, VALUE owner) {
6
+ VALUE obj = Data_Wrap_Struct(rb_path2class("Ray::Shader"), NULL, NULL,
7
+ shader);
8
+ rb_iv_set(obj, "@owner", owner);
9
+ rb_iv_set(obj, "@locations", rb_hash_new());
10
+ rb_iv_set(obj, "@images", rb_hash_new());
11
+ return obj;
12
+ }
13
+
14
+ say_shader *ray_rb2shader(VALUE obj) {
15
+ if (!RAY_IS_A(obj, rb_path2class("Ray::Shader"))) {
16
+ rb_raise(rb_eTypeError, "Can't convert %s into Ray::Shader",
17
+ RAY_OBJ_CLASSNAME(obj));
18
+ }
19
+
20
+ say_shader *shader = NULL;
21
+ Data_Get_Struct(obj, say_shader, shader);
22
+
23
+ return shader;
24
+ }
25
+
26
+ static
27
+ VALUE ray_shader_alloc(VALUE self) {
28
+ say_shader *obj = say_shader_create();
29
+ return Data_Wrap_Struct(self, NULL, say_shader_free, obj);
30
+ }
31
+
32
+ /*
33
+ Make Ray's shaders forcefully use old (deprecated) style shaders.
34
+ This should be called before the shaders get created (in the case of targets,
35
+ this means before the creations of those targets)
36
+ */
37
+ static
38
+ VALUE ray_shader_use_old(VALUE self) {
39
+ say_shader_force_old();
40
+ return Qnil;
41
+ }
42
+
43
+ /*
44
+ * @return [true, falsue] True if geometry shaders are available
45
+ */
46
+ static
47
+ VALUE ray_shader_geometry_available(VALUE self) {
48
+ return say_shader_is_geometry_available() ? Qtrue : Qfalse;
49
+ }
50
+
51
+ /*
52
+ @overload compile_frag(src)
53
+ Compiles the fragment shader with a new source code.
54
+ @param [String] src Source code
55
+ */
56
+ static
57
+ VALUE ray_shader_compile_frag(VALUE self, VALUE src) {
58
+ if (!say_shader_compile_frag(ray_rb2shader(self), StringValuePtr(src))) {
59
+ rb_raise(rb_path2class("Ray::Shader::CompileError"), "%s",
60
+ say_error_get_last());
61
+ }
62
+ return self;
63
+ }
64
+
65
+ /*
66
+ @overload compile_vertex(src)
67
+ Compiles the vertex shader with a new source code.
68
+ @param [String] src Source code
69
+ */
70
+ static
71
+ VALUE ray_shader_compile_vertex(VALUE self, VALUE src) {
72
+ if (!say_shader_compile_vertex(ray_rb2shader(self), StringValuePtr(src))) {
73
+ rb_raise(rb_path2class("Ray::Shader::CompileError"), "%s",
74
+ say_error_get_last());
75
+ }
76
+
77
+ return self;
78
+ }
79
+
80
+
81
+ /*
82
+ * @overload compile_vertex(src)
83
+ * Compiles the geometry shader with a new source code.
84
+ * @param [String] src Source code
85
+ */
86
+ static
87
+ VALUE ray_shader_compile_geometry(VALUE self, VALUE src) {
88
+ if (!say_shader_compile_geometry(ray_rb2shader(self), StringValuePtr(src))) {
89
+ rb_raise(rb_path2class("Ray::Shader::CompileError"), "%s",
90
+ say_error_get_last());
91
+ }
92
+
93
+ return self;
94
+ }
95
+
96
+ /*
97
+ * Detaches any geomtry shader attached to the shader.
98
+ */
99
+ static
100
+ VALUE ray_shader_detach_geometry(VALUE self) {
101
+ say_shader_detach_geometry(ray_rb2shader(self));
102
+ return self;
103
+ }
104
+
105
+ /*
106
+ Links the shader.
107
+ This is required once you have compiled the vertex and fragment shaders.
108
+ */
109
+ static
110
+ VALUE ray_shader_link(VALUE self) {
111
+ if (!say_shader_link(ray_rb2shader(self))) {
112
+ rb_raise(rb_path2class("Ray::Shader::LinkError"), "%s",
113
+ say_error_get_last());
114
+ }
115
+
116
+ return Qnil;
117
+ }
118
+
119
+ /*
120
+ @overload apply_vertex(klass)
121
+ Sets the vertex layout to use. It is required to link the vertex again for
122
+ this change to be applied.
123
+
124
+ @param [Class] klass Class of the vertex to use with this shader.
125
+ */
126
+ static
127
+ VALUE ray_shader_apply_vertex(VALUE self, VALUE klass) {
128
+ say_shader *shader = ray_rb2shader(self);
129
+
130
+ if (klass == rb_path2class("Ray::Vertex"))
131
+ say_shader_apply_vertex_type(shader, 0);
132
+ else
133
+ say_shader_apply_vertex_type(shader, ray_get_vtype(klass));
134
+
135
+ return klass;
136
+ }
137
+
138
+ /*
139
+ @overload locate(name)
140
+ @param [String, Symbol] name Name of the attribute
141
+ @return [Integer, nil] Location of the attribute
142
+ */
143
+ static
144
+ VALUE ray_shader_locate(VALUE self, VALUE attr) {
145
+ const char *str = rb_id2name(rb_to_id(attr));
146
+ int loc = say_shader_locate(ray_rb2shader(self), str);
147
+
148
+ if (loc >= 0)
149
+ return INT2FIX(loc);
150
+ else
151
+ return Qnil;
152
+ }
153
+
154
+ /* Binds the shader program */
155
+ static
156
+ VALUE ray_shader_bind(VALUE self) {
157
+ say_shader_bind(ray_rb2shader(self));
158
+ return Qnil;
159
+ }
160
+
161
+ static
162
+ VALUE ray_shader_set_vector2(VALUE self, VALUE loc, VALUE val) {
163
+ rb_check_frozen(self);
164
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
165
+ say_shader_set_vector2_loc(ray_rb2shader(self), NUM2INT(loc),
166
+ ray_convert_to_vector2(val));
167
+ return val;
168
+ }
169
+
170
+ static
171
+ VALUE ray_shader_set_vector3(VALUE self, VALUE loc, VALUE val) {
172
+ rb_check_frozen(self);
173
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
174
+ say_shader_set_vector3_loc(ray_rb2shader(self), NUM2INT(loc),
175
+ ray_convert_to_vector3(val));
176
+ return val;
177
+ }
178
+
179
+ static
180
+ VALUE ray_shader_set_color(VALUE self, VALUE loc, VALUE val) {
181
+ rb_check_frozen(self);
182
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
183
+ say_shader_set_color_loc(ray_rb2shader(self), NUM2INT(loc), ray_rb2col(val));
184
+ return val;
185
+ }
186
+
187
+
188
+ static
189
+ VALUE ray_shader_set_array(VALUE self, VALUE loc, VALUE val) {
190
+ rb_check_frozen(self);
191
+
192
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
193
+
194
+ size_t size = RARRAY_LEN(val);
195
+
196
+ float vector[4];
197
+ size_t id = 0;
198
+ switch (size) {
199
+ case 4:
200
+ vector[id] = NUM2DBL(RAY_ARRAY_AT(val, id));
201
+ id++;
202
+ case 3:
203
+ vector[id] = NUM2DBL(RAY_ARRAY_AT(val, id));
204
+ id++;
205
+ case 2:
206
+ vector[id] = NUM2DBL(RAY_ARRAY_AT(val, id));
207
+ id++;
208
+ case 1:
209
+ vector[id] = NUM2DBL(RAY_ARRAY_AT(val, id));
210
+ id++;
211
+ break;
212
+ default:
213
+ rb_raise(rb_eRuntimeError, "can't send %zu-sized vector",
214
+ size);
215
+ return Qnil;
216
+ }
217
+
218
+ say_shader_set_floats_loc(ray_rb2shader(self), NUM2INT(loc),
219
+ size, vector);
220
+ return val;
221
+ }
222
+
223
+ static
224
+ VALUE ray_shader_set_numeric(VALUE self, VALUE loc, VALUE val) {
225
+ rb_check_frozen(self);
226
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
227
+ say_shader_set_float_loc(ray_rb2shader(self), NUM2INT(loc),
228
+ NUM2DBL(val));
229
+ return val;
230
+ }
231
+
232
+ static
233
+ VALUE ray_shader_set_image(VALUE self, VALUE loc, VALUE val) {
234
+ rb_check_frozen(self);
235
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, val);
236
+ say_shader_set_image_loc(ray_rb2shader(self), NUM2INT(loc),
237
+ ray_rb2image(val));
238
+ return val;
239
+ }
240
+
241
+ static
242
+ VALUE ray_shader_set_current_texture(VALUE self, VALUE loc) {
243
+ rb_check_frozen(self);
244
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
245
+ say_shader_set_current_texture_loc(ray_rb2shader(self), NUM2INT(loc));
246
+ return Qnil;
247
+ }
248
+
249
+ static
250
+ VALUE ray_shader_set_bool(VALUE self, VALUE loc, VALUE val) {
251
+ rb_check_frozen(self);
252
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
253
+ say_shader_set_bool_loc(ray_rb2shader(self), NUM2INT(loc),
254
+ RTEST(val));
255
+ return val;
256
+ }
257
+
258
+ static
259
+ VALUE ray_shader_set_matrix(VALUE self, VALUE loc, VALUE val) {
260
+ rb_check_frozen(self);
261
+ rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
262
+ say_shader_set_matrix_loc(ray_rb2shader(self), NUM2INT(loc),
263
+ ray_rb2matrix(val));
264
+ return val;
265
+ }
266
+
267
+ void Init_ray_shader() {
268
+ ray_cShader = rb_define_class_under(ray_mRay, "Shader", rb_cObject);
269
+ rb_define_class_under(ray_cShader, "CompileError", rb_eStandardError);
270
+ rb_define_class_under(ray_cShader, "LinkError", rb_eStandardError);
271
+
272
+ rb_define_alloc_func(ray_cShader, ray_shader_alloc);
273
+
274
+ rb_define_singleton_method(ray_cShader, "use_old!", ray_shader_use_old, 0);
275
+ rb_define_singleton_method(ray_cShader, "geometry_available?",
276
+ ray_shader_geometry_available, 0);
277
+
278
+ rb_define_method(ray_cShader, "compile_frag", ray_shader_compile_frag, 1);
279
+ rb_define_method(ray_cShader, "compile_vertex", ray_shader_compile_vertex, 1);
280
+ rb_define_method(ray_cShader, "compile_geometry", ray_shader_compile_geometry,
281
+ 1);
282
+ rb_define_method(ray_cShader, "detach_geometry", ray_shader_detach_geometry,
283
+ 0);
284
+
285
+ rb_define_method(ray_cShader, "link", ray_shader_link, 0);
286
+
287
+ rb_define_method(ray_cShader, "apply_vertex", ray_shader_apply_vertex, 1);
288
+
289
+ rb_define_method(ray_cShader, "locate", ray_shader_locate, 1);
290
+
291
+ rb_define_method(ray_cShader, "set_vector2", ray_shader_set_vector2, 2);
292
+ rb_define_method(ray_cShader, "set_vector3", ray_shader_set_vector3, 2);
293
+ rb_define_method(ray_cShader, "set_color", ray_shader_set_color, 2);
294
+ rb_define_method(ray_cShader, "set_matrix", ray_shader_set_matrix, 2);
295
+ rb_define_method(ray_cShader, "set_numeric", ray_shader_set_numeric, 2);
296
+ rb_define_method(ray_cShader, "set_array", ray_shader_set_array, 2);
297
+ rb_define_method(ray_cShader, "set_image", ray_shader_set_image, 2);
298
+ rb_define_method(ray_cShader, "set_current_texture", ray_shader_set_current_texture, 1);
299
+ rb_define_method(ray_cShader, "set_bool", ray_shader_set_bool, 2);
300
+
301
+ rb_define_method(ray_cShader, "bind", ray_shader_bind, 0);
302
+ }
@@ -0,0 +1,118 @@
1
+ #include "ray.h"
2
+
3
+ VALUE ray_cSound = Qnil;
4
+
5
+ say_sound *ray_rb2sound(VALUE obj) {
6
+ if (!RAY_IS_A(obj, rb_path2class("Ray::Sound"))) {
7
+ rb_raise(rb_eTypeError, "Can't convert %s into Ray::Sound",
8
+ RAY_OBJ_CLASSNAME(obj));
9
+ }
10
+
11
+ say_sound *snd;
12
+ Data_Get_Struct(obj, say_sound, snd);
13
+
14
+ return snd;
15
+ }
16
+
17
+ static
18
+ VALUE ray_sound_alloc(VALUE self) {
19
+ say_sound *snd = say_sound_create();
20
+ return Data_Wrap_Struct(self, NULL, say_sound_free, snd);
21
+ }
22
+
23
+ /*
24
+ @overload buffer=(buf)
25
+ Sets a new buffer for the sound. Causes it to stop playing.
26
+ @param [Ray::SoundBuffer, nil] buf New buffer used by the sound.
27
+ */
28
+ static
29
+ VALUE ray_sound_set_buffer(VALUE self, VALUE buf) {
30
+ say_sound_set_buffer(ray_rb2sound(self), ray_rb2sound_buffer(buf));
31
+ rb_iv_set(self, "@buffer", buf);
32
+ return buf;
33
+ }
34
+
35
+ /* @return [Ray::SoundBuffer, nil] */
36
+ static
37
+ VALUE ray_sound_buffer(VALUE self) {
38
+ return rb_iv_get(self, "@buffer");
39
+ }
40
+
41
+ /* @return [true, false] True if the sound is looping */
42
+ static
43
+ VALUE ray_sound_is_looping(VALUE self) {
44
+ return say_sound_is_looping(ray_rb2sound(self)) ? Qtrue : Qfalse;
45
+ }
46
+
47
+ /* @overload looping=(val) */
48
+ static
49
+ VALUE ray_sound_set_looping(VALUE self, VALUE val) {
50
+ say_sound_set_looping(ray_rb2sound(self), RTEST(val));
51
+ return val;
52
+ }
53
+
54
+ /*
55
+ @overload seek(time)
56
+ Seeks to a specific time in the sound.
57
+ @param [Float] time Time in seconds
58
+ */
59
+ static
60
+ VALUE ray_sound_seek(VALUE self, VALUE time) {
61
+ say_sound_seek(ray_rb2sound(self), NUM2DBL(time));
62
+ return time;
63
+ }
64
+
65
+ /* @return [Float] current playing offset, in seconds */
66
+ static
67
+ VALUE ray_sound_time(VALUE self) {
68
+ return rb_float_new(say_sound_get_time(ray_rb2sound(self)));
69
+ }
70
+
71
+ /* @return [Float] Duration of the sound. 0 when no buffer is attached to the
72
+ * sound.
73
+ */
74
+ static
75
+ VALUE ray_sound_duration(VALUE self) {
76
+ return rb_float_new(say_sound_get_duration(ray_rb2sound(self)));
77
+ }
78
+
79
+ /* Plays the sound (or resume from a pause) */
80
+ static
81
+ VALUE ray_sound_play(VALUE self) {
82
+ say_sound_play(ray_rb2sound(self));
83
+ return self;
84
+ }
85
+
86
+ /* Pauses the sound. Can be resumed using play. */
87
+ static
88
+ VALUE ray_sound_pause(VALUE self) {
89
+ say_sound_pause(ray_rb2sound(self));
90
+ return self;
91
+ }
92
+
93
+ /* Stops the sound */
94
+ static
95
+ VALUE ray_sound_stop(VALUE self) {
96
+ say_sound_stop(ray_rb2sound(self));
97
+ return self;
98
+ }
99
+
100
+ void Init_ray_sound() {
101
+ ray_cSound = rb_define_class_under(ray_mRay, "Sound", ray_cAudioSource);
102
+ rb_define_alloc_func(ray_cSound, ray_sound_alloc);
103
+
104
+ rb_define_method(ray_cSound, "buffer=", ray_sound_set_buffer, 1);
105
+ rb_define_method(ray_cSound, "buffer", ray_sound_buffer, 0);
106
+
107
+ rb_define_method(ray_cSound, "looping?", ray_sound_is_looping, 0);
108
+ rb_define_method(ray_cSound, "looping=", ray_sound_set_looping, 1);
109
+
110
+ rb_define_method(ray_cSound, "seek", ray_sound_seek, 1);
111
+ rb_define_method(ray_cSound, "time", ray_sound_time, 0);
112
+
113
+ rb_define_method(ray_cSound, "duration", ray_sound_duration, 0);
114
+
115
+ rb_define_method(ray_cSound, "play", ray_sound_play, 0);
116
+ rb_define_method(ray_cSound, "pause", ray_sound_pause, 0);
117
+ rb_define_method(ray_cSound, "stop", ray_sound_stop, 0);
118
+ }
@@ -0,0 +1,75 @@
1
+ #include "ray.h"
2
+
3
+ VALUE ray_cSoundBuffer = Qnil;
4
+
5
+ say_sound_buffer *ray_rb2sound_buffer(VALUE obj) {
6
+ if (!RAY_IS_A(obj, rb_path2class("Ray::SoundBuffer"))) {
7
+ rb_raise(rb_eTypeError, "Can't convert %s into Ray::SoundBuffer",
8
+ RAY_OBJ_CLASSNAME(obj));
9
+ }
10
+
11
+ say_sound_buffer *buf;
12
+ Data_Get_Struct(obj, say_sound_buffer, buf);
13
+
14
+ return buf;
15
+ }
16
+
17
+ static
18
+ VALUE ray_sound_buffer_alloc(VALUE self) {
19
+ say_sound_buffer *buf = say_sound_buffer_create();
20
+ return Data_Wrap_Struct(self, NULL, say_sound_buffer_free, buf);
21
+ }
22
+
23
+ /*
24
+ @overload initialize(io_or_string)
25
+ Loads the sound buffer out of an IO object or a string.
26
+ */
27
+ static
28
+ VALUE ray_sound_buffer_init(VALUE self, VALUE arg) {
29
+ say_sound_buffer *buf = ray_rb2sound_buffer(self);
30
+
31
+ if (rb_respond_to(arg, RAY_METH("read"))) {
32
+ arg = rb_funcall(arg, RAY_METH("read"), 0);
33
+
34
+ if (!say_sound_buffer_load_from_memory(buf, RSTRING_LEN(arg),
35
+ StringValuePtr(arg))) {
36
+ rb_raise(rb_eRangeError, "%s", say_error_get_last());
37
+ }
38
+ }
39
+ else {
40
+ if (!say_sound_buffer_load_from_file(buf, StringValuePtr(arg))) {
41
+ rb_raise(rb_eRangeError, "%s", say_error_get_last());
42
+ }
43
+ }
44
+
45
+ return self;
46
+ }
47
+
48
+ /* @return [Float] duration of the sound in seconds */
49
+ static
50
+ VALUE ray_sound_buffer_duration(VALUE self) {
51
+ return rb_float_new(say_sound_buffer_get_duration(ray_rb2sound_buffer(self)));
52
+ }
53
+
54
+ /* @return [Integer] amount of channels in the sound */
55
+ static
56
+ VALUE ray_sound_buffer_channel_count(VALUE self) {
57
+ return INT2FIX(say_sound_buffer_get_channel_count(ray_rb2sound_buffer(self)));
58
+ }
59
+
60
+ /* @return [Integer] sample rate */
61
+ static
62
+ VALUE ray_sound_buffer_sample_rate(VALUE self) {
63
+ return INT2FIX(say_sound_buffer_get_sample_rate(ray_rb2sound_buffer(self)));
64
+ }
65
+
66
+ void Init_ray_sound_buffer() {
67
+ ray_cSoundBuffer = rb_define_class_under(ray_mRay, "SoundBuffer", rb_cObject);
68
+
69
+ rb_define_alloc_func(ray_cSoundBuffer, ray_sound_buffer_alloc);
70
+ rb_define_method(ray_cSoundBuffer, "initialize", ray_sound_buffer_init, 1);
71
+
72
+ rb_define_method(ray_cSoundBuffer, "duration", ray_sound_buffer_duration, 0);
73
+ rb_define_method(ray_cSoundBuffer, "channel_count", ray_sound_buffer_channel_count, 0);
74
+ rb_define_method(ray_cSoundBuffer, "sample_rate", ray_sound_buffer_sample_rate, 0);
75
+ }