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,59 @@
1
+ #include "ray.h"
2
+
3
+ VALUE ray_mRay = Qnil;
4
+
5
+ static
6
+ VALUE ray_clean_up(VALUE self) {
7
+ say_clean_up();
8
+ return Qnil;
9
+ }
10
+
11
+ /* @return [Ray::Vector2] Size of the screen */
12
+ static
13
+ VALUE ray_screen_size(VALUE self) {
14
+ return ray_vector2_to_rb(say_make_vector2(say_imp_screen_get_width(),
15
+ say_imp_screen_get_height()));
16
+ }
17
+
18
+ void Init_ray_ext() {
19
+ #ifdef SAY_OSX
20
+ say_osx_flip_pool();
21
+ #endif
22
+
23
+ ray_mRay = rb_define_module("Ray");
24
+
25
+ rb_define_private_method(rb_singleton_class(ray_mRay),
26
+ "_clean_up!", ray_clean_up, 0);
27
+
28
+ rb_define_module_function(ray_mRay, "screen_size", ray_screen_size, 0);
29
+
30
+ Init_ray_vector();
31
+ Init_ray_rect();
32
+ Init_ray_matrix();
33
+ Init_ray_color();
34
+ Init_ray_vertex();
35
+ Init_ray_gl();
36
+ Init_ray_gl_vertex();
37
+ Init_ray_int_array();
38
+ Init_ray_gl_buffer();
39
+ Init_ray_gl_index_buffer();
40
+ Init_ray_image();
41
+ Init_ray_font();
42
+ Init_ray_shader();
43
+ Init_ray_view();
44
+ Init_ray_drawable();
45
+ Init_ray_polygon();
46
+ Init_ray_sprite();
47
+ Init_ray_text();
48
+ Init_ray_buffer_renderer();
49
+ Init_ray_target();
50
+ Init_ray_window();
51
+ Init_ray_image_target();
52
+ Init_ray_input();
53
+ Init_ray_event();
54
+ Init_ray_audio();
55
+ Init_ray_sound_buffer();
56
+ Init_ray_audio_source();
57
+ Init_ray_sound();
58
+ Init_ray_music();
59
+ }
@@ -0,0 +1,168 @@
1
+ #ifndef RAY_H_
2
+ #define RAY_H_
3
+
4
+ #include "ruby.h"
5
+ #include "say.h"
6
+
7
+ #ifdef __cplusplus
8
+ extern "C" {
9
+ # if 0
10
+ }
11
+ # endif
12
+ #endif
13
+
14
+ typedef struct {
15
+ say_drawable *drawable;
16
+ VALUE obj;
17
+
18
+ size_t vsize;
19
+ } ray_drawable;
20
+
21
+ /* Classes and modules */
22
+ extern VALUE ray_mRay;
23
+
24
+ extern VALUE ray_cVector2;
25
+ extern VALUE ray_cVector3;
26
+ extern VALUE ray_cRect;
27
+ extern VALUE ray_cMatrix;
28
+ extern VALUE ray_cColor;
29
+ extern VALUE ray_cVertex;
30
+ extern VALUE ray_mGL;
31
+ extern VALUE ray_cGLVertex;
32
+ extern VALUE ray_cIntArray;
33
+ extern VALUE ray_cGLBuffer;
34
+ extern VALUE ray_cGLIndexBuffer;
35
+ extern VALUE ray_cImage;
36
+ extern VALUE ray_cFont;
37
+ extern VALUE ray_cShader;
38
+ extern VALUE ray_cView;
39
+ extern VALUE ray_cDrawable;
40
+ extern VALUE ray_cPolygon;
41
+ extern VALUE ray_cSprite;
42
+ extern VALUE ray_cText;
43
+ extern VALUE ray_cBufferRenderer;
44
+ extern VALUE ray_cTarget;
45
+ extern VALUE ray_cWindow;
46
+ extern VALUE ray_cImageTarget;
47
+ extern VALUE ray_cInput;
48
+ extern VALUE ray_cEvent;
49
+ extern VALUE ray_mAudio;
50
+ extern VALUE ray_cSoundBuffer;
51
+ extern VALUE ray_cAudioSource;
52
+ extern VALUE ray_cSound;
53
+ extern VALUE ray_cMusic;
54
+
55
+ /* Macros for Ruby's C API */
56
+
57
+ #define RAY_IS_A(obj, klass) (RTEST(rb_obj_is_kind_of(obj, klass)))
58
+
59
+ #define RAY_OBJ_CLASSNAME(obj) (rb_class2name(rb_class_of(obj)))
60
+
61
+ #define RAY_SYM(string) (ID2SYM(rb_intern(string)))
62
+ #define RAY_METH(string) (rb_intern(string))
63
+
64
+ #define RAY_ARRAY_AT(ary, i) (rb_funcall(ary, RAY_METH("[]"), 1, INT2FIX(i)))
65
+
66
+ void Init_ray_ext();
67
+ void Init_ray_vector();
68
+ void Init_ray_rect();
69
+ void Init_ray_matrix();
70
+ void Init_ray_color();
71
+ void Init_ray_vertex();
72
+ void Init_ray_gl();
73
+ void Init_ray_gl_vertex();
74
+ void Init_ray_int_array();
75
+ void Init_ray_gl_buffer();
76
+ void Init_ray_gl_index_buffer();
77
+ void Init_ray_image();
78
+ void Init_ray_font();
79
+ void Init_ray_shader();
80
+ void Init_ray_view();
81
+ void Init_ray_drawable();
82
+ void Init_ray_polygon();
83
+ void Init_ray_sprite();
84
+ void Init_ray_text();
85
+ void Init_ray_buffer_renderer();
86
+ void Init_ray_target();
87
+ void Init_ray_window();
88
+ void Init_ray_image_target();
89
+ void Init_ray_input();
90
+ void Init_ray_event();
91
+ void Init_ray_audio();
92
+ void Init_ray_sound_buffer();
93
+ void Init_ray_audio_source();
94
+ void Init_ray_sound();
95
+ void Init_ray_music();
96
+
97
+ /* Conversions */
98
+
99
+ say_vector2 *ray_rb2vector2_ptr(VALUE obj);
100
+ say_vector2 ray_rb2vector2(VALUE obj);
101
+ say_vector2 ray_convert_to_vector2(VALUE obj);
102
+ VALUE ray_vector2_to_rb(say_vector2 obj);
103
+
104
+ say_vector3 *ray_rb2vector3_ptr(VALUE obj);
105
+ say_vector3 ray_rb2vector3(VALUE obj);
106
+ say_vector3 ray_convert_to_vector3(VALUE obj);
107
+ VALUE ray_vector3_to_rb(say_vector3 obj);
108
+
109
+ say_rect *ray_rb2rect_ptr(VALUE obj);
110
+ say_rect ray_rb2rect(VALUE obj);
111
+ say_rect ray_convert_to_rect(VALUE obj);
112
+ VALUE ray_rect2rb(say_rect rect);
113
+
114
+ VALUE ray_matrix2rb(say_matrix *matrix);
115
+ say_matrix *ray_rb2matrix(VALUE matrix);
116
+
117
+ VALUE ray_view2rb(say_view *view);
118
+ say_view *ray_rb2view(VALUE self);
119
+
120
+ say_color ray_rb2col(VALUE object);
121
+ VALUE ray_col2rb(say_color color);
122
+
123
+ say_vertex *ray_rb2vertex(VALUE obj);
124
+
125
+ say_image *ray_rb2image(VALUE obj);
126
+ say_font *ray_rb2font(VALUE obj);
127
+
128
+ VALUE ray_shader2rb(say_shader *shader, VALUE owner);
129
+ say_shader *ray_rb2shader(VALUE obj);
130
+
131
+ say_drawable *ray_rb2drawable(VALUE obj);
132
+ say_polygon *ray_rb2polygon(VALUE obj);
133
+ say_sprite *ray_rb2sprite(VALUE obj);
134
+ say_text *ray_rb2text(VALUE obj);
135
+
136
+ say_target *ray_rb2target(VALUE obj);
137
+ say_window *ray_rb2window(VALUE obj);
138
+ say_image_target *ray_rb2image_target(VALUE obj);
139
+
140
+ say_event *ray_rb2event(VALUE obj);
141
+
142
+ say_input *ray_rb2input(VALUE obj);
143
+ VALUE ray_input2rb(say_input *input, VALUE owner);
144
+
145
+ say_sound_buffer *ray_rb2sound_buffer(VALUE obj);
146
+
147
+ say_audio_source *ray_rb2audio_source(VALUE obj);
148
+ say_sound *ray_rb2sound(VALUE obj);
149
+ say_music *ray_rb2music(VALUE obj);
150
+
151
+ say_array *ray_rb2int_array(VALUE obj);
152
+
153
+ say_buffer_renderer *ray_rb2buf_renderer(VALUE obj);
154
+
155
+ uint8_t ray_byte_clamp(int color);
156
+
157
+ VALUE ray_get_vertex_class(size_t id);
158
+ size_t ray_get_vtype(VALUE class);
159
+ GLenum ray_buf_type(VALUE type);
160
+
161
+ #ifdef __cplusplus
162
+ # if 0
163
+ {
164
+ # endif
165
+ }
166
+ #endif
167
+
168
+ #endif
@@ -0,0 +1,255 @@
1
+ #include "ray.h"
2
+
3
+ VALUE ray_cRect = Qnil;
4
+
5
+ say_rect *ray_rb2rect_ptr(VALUE obj) {
6
+ if (!RAY_IS_A(obj, rb_path2class("Ray::Rect"))) {
7
+ rb_raise(rb_eTypeError, "Can't convert %s into Ray::Rect",
8
+ RAY_OBJ_CLASSNAME(obj));
9
+ }
10
+
11
+ say_rect *rect;
12
+ Data_Get_Struct(obj, say_rect, rect);
13
+
14
+ return rect;
15
+ }
16
+
17
+ say_rect ray_rb2rect(VALUE obj) {
18
+ return *ray_rb2rect_ptr(obj);
19
+ }
20
+
21
+ say_rect ray_convert_to_rect(VALUE obj) {
22
+ obj = rb_funcall(obj, RAY_METH("to_rect"), 0);
23
+ return ray_rb2rect(obj);
24
+ }
25
+
26
+ VALUE ray_rect2rb(say_rect rect) {
27
+ say_rect *obj = malloc(sizeof(say_rect));
28
+ *obj = rect;
29
+
30
+ return Data_Wrap_Struct(ray_cRect, 0, free, obj);
31
+ }
32
+
33
+ static
34
+ VALUE ray_alloc_rect(VALUE self) {
35
+ say_rect *rect = malloc(sizeof(say_rect));
36
+ *rect = say_make_rect(0, 0, 0, 0);
37
+
38
+ return Data_Wrap_Struct(self, 0, free, rect);
39
+ }
40
+
41
+ /*
42
+ @overload initialize(x, y)
43
+ Creates a new rect with size set to 0, 0.
44
+
45
+ @overload initialize(x, y, w, h)
46
+ Creates a new rect with the specified size.
47
+
48
+ @overload initialize(hash)
49
+ Creates a new rect according to the keys specified in hash.
50
+
51
+ @option hash [Float] :x
52
+ @option hash [Float] :y
53
+ @option hash [Float] (0) :width
54
+ @option hash [Float] (0) :height required if width is set
55
+
56
+ @option hash [Float] (0) :w alias for :width
57
+ @option hash [Float] (0) :h alias for :height
58
+ */
59
+ static
60
+ VALUE ray_init_rect(int argc, VALUE *argv, VALUE self) {
61
+ VALUE x_or_hash, y, w, h;
62
+ rb_scan_args(argc, argv, "13", &x_or_hash, &y, &w, &h);
63
+
64
+ int type = TYPE(x_or_hash);
65
+ if (type == T_HASH) {
66
+ if (!NIL_P(y)) {
67
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)",
68
+ argc);
69
+ }
70
+
71
+ VALUE hash = x_or_hash;
72
+
73
+ x_or_hash = rb_hash_aref(hash, RAY_SYM("x"));
74
+ y = rb_hash_aref(hash, RAY_SYM("y"));
75
+
76
+ w = rb_hash_aref(hash, RAY_SYM("width"));
77
+ h = rb_hash_aref(hash, RAY_SYM("height"));
78
+
79
+ if (NIL_P(w)) w = rb_hash_aref(hash, RAY_SYM("w"));
80
+ if (NIL_P(h)) h = rb_hash_aref(hash, RAY_SYM("h"));
81
+
82
+ if (NIL_P(y)) {
83
+ rb_raise(rb_eArgError, "missing option :y");
84
+ }
85
+
86
+ if (!NIL_P(w) && NIL_P(h)) {
87
+ rb_raise(rb_eArgError, "missing option :height");
88
+ }
89
+ }
90
+
91
+ say_rect *rect;
92
+ Data_Get_Struct(self, say_rect, rect);
93
+
94
+ rect->x = NUM2DBL(x_or_hash);
95
+ rect->y = NUM2DBL(y);
96
+
97
+ if (!NIL_P(w)) {
98
+ rect->w = NUM2DBL(w);
99
+ rect->h = NUM2DBL(h);
100
+ }
101
+ else {
102
+ rect->w = 0;
103
+ rect->h = 0;
104
+ }
105
+
106
+ return Qnil;
107
+ }
108
+
109
+ static
110
+ VALUE ray_init_rect_copy(VALUE self, VALUE other) {
111
+ say_rect *rect = NULL, *source = NULL;
112
+ Data_Get_Struct(self, say_rect, rect);
113
+ Data_Get_Struct(other, say_rect, source);
114
+
115
+ *rect = *source;
116
+ return self;
117
+ }
118
+
119
+ /* @return [Float] X position of the rect */
120
+ static
121
+ VALUE ray_rect_x(VALUE self) {
122
+ say_rect *rect;
123
+ Data_Get_Struct(self, say_rect, rect);
124
+
125
+ return rb_float_new(rect->x);
126
+ }
127
+
128
+ /* @return [Float] Y position of the rect */
129
+ static
130
+ VALUE ray_rect_y(VALUE self) {
131
+ say_rect *rect;
132
+ Data_Get_Struct(self, say_rect, rect);
133
+
134
+ return rb_float_new(rect->y);
135
+ }
136
+
137
+ /* @return [Float] width of the rect */
138
+ static
139
+ VALUE ray_rect_w(VALUE self) {
140
+ say_rect *rect;
141
+ Data_Get_Struct(self, say_rect, rect);
142
+
143
+ return rb_float_new(rect->w);
144
+ }
145
+
146
+ /* @return [Float] height of the rect */
147
+ static
148
+ VALUE ray_rect_h(VALUE self) {
149
+ say_rect *rect;
150
+ Data_Get_Struct(self, say_rect, rect);
151
+
152
+ return rb_float_new(rect->h);
153
+ }
154
+
155
+ /*
156
+ @overload x=(val)
157
+ Sets the x position of the rect
158
+
159
+ @param [Float] val The new x position of the rect
160
+ @return [void]
161
+ */
162
+ static
163
+ VALUE ray_rect_set_x(VALUE self, VALUE val) {
164
+ rb_check_frozen(self);
165
+
166
+ say_rect *rect;
167
+ Data_Get_Struct(self, say_rect, rect);
168
+
169
+ rect->x = NUM2DBL(val);
170
+
171
+ return val;
172
+ }
173
+
174
+ /*
175
+ @overload y=(val)
176
+ Changes the y position of the rect.
177
+
178
+ @param [Float] val The new y position of the rect.
179
+ @return [void]
180
+ */
181
+ static
182
+ VALUE ray_rect_set_y(VALUE self, VALUE val) {
183
+ rb_check_frozen(self);
184
+
185
+ say_rect *rect;
186
+ Data_Get_Struct(self, say_rect, rect);
187
+
188
+ rect->y = NUM2DBL(val);
189
+
190
+ return val;
191
+ }
192
+
193
+ /*
194
+ @overload w=(val)
195
+ Changes the with of the rect
196
+
197
+ @param [Float] val The new width of the rect.
198
+ @return [void]
199
+ */
200
+ static
201
+ VALUE ray_rect_set_w(VALUE self, VALUE val) {
202
+ rb_check_frozen(self);
203
+
204
+ say_rect *rect;
205
+ Data_Get_Struct(self, say_rect, rect);
206
+
207
+ rect->w = NUM2DBL(val);
208
+
209
+ return val;
210
+ }
211
+
212
+ /*
213
+ @overload h=(val)
214
+ Sets the height of the rect
215
+
216
+ @param [Float] val The new height of the rect.
217
+ @return [void]
218
+ */
219
+ static
220
+ VALUE ray_rect_set_h(VALUE self, VALUE val) {
221
+ rb_check_frozen(self);
222
+
223
+ say_rect *rect;
224
+ Data_Get_Struct(self, say_rect, rect);
225
+
226
+ rect->h = NUM2DBL(val);
227
+
228
+ return val;
229
+ }
230
+
231
+ /*
232
+ Document-class: Ray::Rect
233
+
234
+ Rects are used to represent a part of an image, using
235
+ two attributes to represent its position, and two
236
+ others to represent its size.
237
+ */
238
+
239
+ void Init_ray_rect() {
240
+ ray_cRect = rb_define_class_under(ray_mRay, "Rect", rb_cObject);
241
+
242
+ rb_define_alloc_func(ray_cRect, ray_alloc_rect);
243
+ rb_define_method(ray_cRect, "initialize", ray_init_rect, -1);
244
+ rb_define_method(ray_cRect, "initialize_copy", ray_init_rect_copy, 1);
245
+
246
+ rb_define_method(ray_cRect, "x", ray_rect_x, 0);
247
+ rb_define_method(ray_cRect, "y", ray_rect_y, 0);
248
+ rb_define_method(ray_cRect, "width", ray_rect_w, 0);
249
+ rb_define_method(ray_cRect, "height", ray_rect_h, 0);
250
+
251
+ rb_define_method(ray_cRect, "x=", ray_rect_set_x, 1);
252
+ rb_define_method(ray_cRect, "y=", ray_rect_set_y, 1);
253
+ rb_define_method(ray_cRect, "width=", ray_rect_set_w, 1);
254
+ rb_define_method(ray_cRect, "height=", ray_rect_set_h, 1);
255
+ }