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,26 @@
1
+ #ifndef SAY_CONTEXT_H_
2
+ #define SAY_CONTEXT_H_
3
+
4
+ #include "say_basic_type.h"
5
+
6
+ struct say_window;
7
+
8
+ typedef struct {
9
+ uint32_t count;
10
+ say_imp_context context;
11
+ } say_context;
12
+
13
+ void say_context_ensure();
14
+
15
+ say_context *say_context_current();
16
+
17
+ say_context *say_context_create_for_window(struct say_window *window);
18
+ say_context *say_context_create();
19
+ void say_context_free(say_context *context);
20
+
21
+ void say_context_make_current(say_context *context);
22
+ void say_context_update(say_context *context);
23
+
24
+ void say_context_clean_up();
25
+
26
+ #endif
@@ -0,0 +1,350 @@
1
+ #include "say.h"
2
+
3
+ static void say_drawable_update_matrix(say_drawable *drawable) {
4
+ if (drawable->custom_matrix)
5
+ return;
6
+
7
+ say_matrix_reset(drawable->matrix);
8
+
9
+ say_matrix_translate_by(drawable->matrix,
10
+ drawable->pos.x,
11
+ drawable->pos.y,
12
+ drawable->z_order);
13
+ say_matrix_rotate(drawable->matrix, drawable->angle, 0, 0, 1);
14
+ say_matrix_scale_by(drawable->matrix, drawable->scale.x, drawable->scale.y,
15
+ 1);
16
+ say_matrix_translate_by(drawable->matrix,
17
+ -drawable->origin.x,
18
+ -drawable->origin.y,
19
+ 0);
20
+
21
+ drawable->matrix_updated = 1;
22
+ }
23
+
24
+ say_drawable *say_drawable_create(size_t vtype) {
25
+ say_drawable *drawable = (say_drawable*)malloc(sizeof(say_drawable));
26
+
27
+ drawable->vertex_count = 0;
28
+ drawable->vtype = vtype;
29
+ drawable->slice = NULL;
30
+
31
+ drawable->index_count = 0;
32
+ drawable->index_slice = NULL;
33
+
34
+ drawable->data = NULL;
35
+
36
+ drawable->fill_proc = NULL;
37
+ drawable->render_proc = NULL;
38
+
39
+ drawable->shader = NULL;
40
+ drawable->matrix = say_matrix_identity();
41
+
42
+ drawable->matrix_updated = false;
43
+ drawable->custom_matrix = false;
44
+ drawable->use_texture = false;
45
+ drawable->has_changed = true;
46
+
47
+ drawable->origin = say_make_vector2(0, 0);
48
+ drawable->scale = say_make_vector2(1, 1);
49
+ drawable->pos = say_make_vector2(0, 0);
50
+ drawable->angle = 0;
51
+ drawable->z_order = 0;
52
+
53
+ return drawable;
54
+ }
55
+
56
+ void say_drawable_copy(say_drawable *drawable, say_drawable *other) {
57
+ drawable->vertex_count = other->vertex_count;
58
+ drawable->vtype = other->vtype;
59
+
60
+ drawable->index_count = other->index_count;
61
+
62
+ drawable->data = other->data;
63
+
64
+ drawable->fill_proc = other->fill_proc;
65
+ drawable->render_proc = other->render_proc;
66
+ drawable->index_fill_proc = other->index_fill_proc;
67
+
68
+ drawable->shader = other->shader;
69
+
70
+ drawable->origin = other->origin;
71
+ drawable->scale = other->scale;
72
+ drawable->pos = other->pos;
73
+ drawable->z_order = other->z_order;
74
+ drawable->angle = other->angle;
75
+
76
+ drawable->use_texture = other->use_texture;
77
+
78
+ drawable->matrix_updated = false;
79
+ drawable->has_changed = true;
80
+ }
81
+
82
+ void say_drawable_free(say_drawable *drawable) {
83
+ if (drawable->slice)
84
+ say_buffer_slice_free(drawable->slice);
85
+ say_matrix_free(drawable->matrix);
86
+ free(drawable);
87
+ }
88
+
89
+ void say_drawable_set_custom_data(say_drawable *drawable, void *data) {
90
+ if (data == drawable->data)
91
+ return;
92
+
93
+ drawable->data = data;
94
+ drawable->has_changed = 1;
95
+ }
96
+
97
+ void say_drawable_set_vertex_count(say_drawable *drawable, size_t size) {
98
+ if (size == drawable->vertex_count)
99
+ return;
100
+
101
+ drawable->vertex_count = size;
102
+ drawable->has_changed = 1;
103
+ }
104
+
105
+ size_t say_drawable_get_vertex_count(say_drawable *drawable) {
106
+ return drawable->vertex_count;
107
+ }
108
+
109
+ size_t say_drawable_get_vertex_type(say_drawable *drawable) {
110
+ return drawable->vtype;
111
+ }
112
+
113
+ void say_drawable_set_index_count(say_drawable *drawable, size_t size) {
114
+ if (size == drawable->index_count)
115
+ return;
116
+
117
+ drawable->index_count = size;
118
+ drawable->has_changed = 1;
119
+ }
120
+
121
+ size_t say_drawable_get_index_count(say_drawable *drawable) {
122
+ return drawable->index_count;
123
+ }
124
+
125
+ void say_drawable_set_fill_proc(say_drawable *drawable, say_fill_proc proc) {
126
+ drawable->fill_proc = proc;
127
+ drawable->has_changed = 1;
128
+ }
129
+
130
+ void say_drawable_set_index_fill_proc(say_drawable *drawable,
131
+ say_index_fill_proc proc) {
132
+ drawable->index_fill_proc = proc;
133
+ drawable->has_changed = 1;
134
+ }
135
+
136
+ void say_drawable_set_render_proc(say_drawable *drawable, say_render_proc proc) {
137
+ drawable->render_proc = proc;
138
+ drawable->has_changed = 1;
139
+ }
140
+
141
+ void say_drawable_fill_buffer(say_drawable *drawable, void *vertices) {
142
+ if (drawable->fill_proc && drawable->vertex_count != 0)
143
+ drawable->fill_proc(drawable->data, vertices);
144
+ }
145
+
146
+ void say_drawable_fill_own_buffer(say_drawable *drawable) {
147
+ if (!drawable->slice)
148
+ drawable->slice = say_buffer_slice_create(drawable->vtype,
149
+ drawable->vertex_count);
150
+
151
+ if (say_buffer_slice_get_size(drawable->slice) != drawable->vertex_count) {
152
+ say_buffer_slice_recreate(drawable->slice, drawable->vertex_count);
153
+ }
154
+
155
+ /*
156
+ * If there are no vertices, we won't bother filling the buffer. However, we
157
+ * will execute the above code to mark the potential vertices we previously
158
+ * had as unused anymore.
159
+ */
160
+ if (drawable->vertex_count == 0)
161
+ return;
162
+
163
+ if (drawable->fill_proc) {
164
+ drawable->fill_proc(drawable->data,
165
+ say_buffer_slice_get_vertex(drawable->slice, 0));
166
+ }
167
+
168
+ say_buffer_slice_update(drawable->slice);
169
+ }
170
+
171
+ void say_drawable_fill_index_buffer(say_drawable *drawable, GLuint *indices,
172
+ size_t from) {
173
+ if (drawable->index_fill_proc && drawable->index_count != 0)
174
+ drawable->index_fill_proc(drawable->data, indices, from);
175
+ }
176
+
177
+ void say_drawable_fill_own_index_buffer(say_drawable *drawable) {
178
+ if (!drawable->index_slice)
179
+ drawable->index_slice = say_index_buffer_slice_create(drawable->index_count);
180
+
181
+ if (say_index_buffer_slice_get_size(drawable->index_slice) !=
182
+ drawable->index_count) {
183
+ say_index_buffer_slice_recreate(drawable->index_slice,
184
+ drawable->index_count);
185
+ }
186
+
187
+ if (drawable->index_count == 0)
188
+ return;
189
+
190
+ if (drawable->index_fill_proc) {
191
+ GLuint *buf = say_index_buffer_slice_get(drawable->index_slice, 0);
192
+
193
+ size_t loc = 0;
194
+ if (drawable->slice)
195
+ loc = say_buffer_slice_get_loc(drawable->slice);
196
+
197
+ drawable->index_fill_proc(drawable->data, buf, loc);
198
+ }
199
+
200
+ say_index_buffer_slice_update(drawable->index_slice);
201
+ }
202
+
203
+ void say_drawable_draw_at(say_drawable *drawable,
204
+ size_t vertex_id, size_t id,
205
+ say_shader *shader) {
206
+ if (!drawable->matrix_updated)
207
+ say_drawable_update_matrix(drawable);
208
+
209
+ say_shader *used_shader = drawable->shader ? drawable->shader : shader;
210
+ say_shader_set_matrix_id(used_shader, SAY_MODEL_VIEW_LOC_ID,
211
+ drawable->matrix);
212
+
213
+ if (drawable->render_proc) {
214
+ if (drawable->shader) {
215
+ say_shader_set_int_id(drawable->shader, SAY_TEXTURE_ENABLED_LOC_ID,
216
+ drawable->use_texture);
217
+ }
218
+
219
+ drawable->render_proc(drawable->data, vertex_id, id, shader);
220
+ }
221
+ }
222
+
223
+ void say_drawable_draw(say_drawable *drawable, say_shader *shader) {
224
+ if (drawable->has_changed) {
225
+ say_drawable_fill_own_buffer(drawable);
226
+ say_drawable_fill_own_index_buffer(drawable);
227
+
228
+ drawable->has_changed = false;
229
+ }
230
+
231
+ if (!drawable->matrix_updated)
232
+ say_drawable_update_matrix(drawable);
233
+
234
+ /* NB: the current shader is always bound because we set a variable in it. */
235
+ say_shader *used_shader = drawable->shader ? drawable->shader : shader;
236
+ say_shader_set_matrix_id(used_shader, SAY_MODEL_VIEW_LOC_ID,
237
+ drawable->matrix);
238
+
239
+ if (drawable->render_proc) {
240
+ if (drawable->shader) {
241
+ say_shader_set_int_id(drawable->shader, SAY_TEXTURE_ENABLED_LOC_ID,
242
+ drawable->use_texture);
243
+ }
244
+
245
+ if (drawable->vertex_count != 0)
246
+ say_buffer_slice_bind(drawable->slice);
247
+
248
+ if (drawable->index_count != 0)
249
+ say_index_buffer_slice_bind(drawable->index_slice);
250
+
251
+ drawable->render_proc(drawable->data,
252
+ say_buffer_slice_get_loc(drawable->slice),
253
+ say_index_buffer_slice_get_loc(drawable->index_slice),
254
+ used_shader);
255
+ }
256
+ }
257
+
258
+ void say_drawable_set_changed(say_drawable *drawable) {
259
+ drawable->has_changed = 1;
260
+ }
261
+
262
+ uint8_t say_drawable_has_changed(say_drawable *drawable) {
263
+ return drawable->has_changed;
264
+ }
265
+
266
+ void say_drawable_set_textured(say_drawable *drawable, uint8_t val) {
267
+ drawable->use_texture = val;
268
+ }
269
+
270
+ uint8_t say_drawable_is_textured(say_drawable *drawable) {
271
+ return drawable->use_texture;
272
+ }
273
+
274
+ say_shader *say_drawable_get_shader(say_drawable *drawable) {
275
+ return drawable->shader;
276
+ }
277
+
278
+ void say_drawable_set_shader(say_drawable *drawable, say_shader *shader) {
279
+ drawable->shader = shader;
280
+ }
281
+
282
+ void say_drawable_set_origin(say_drawable *drawable, say_vector2 origin) {
283
+ drawable->matrix_updated = 0;
284
+ drawable->origin = origin;
285
+ }
286
+
287
+ void say_drawable_set_scale(say_drawable *drawable, say_vector2 scale) {
288
+ drawable->matrix_updated = 0;
289
+ drawable->scale = scale;
290
+ }
291
+
292
+ void say_drawable_set_pos(say_drawable *drawable, say_vector2 pos) {
293
+ drawable->matrix_updated = 0;
294
+ drawable->pos = pos;
295
+ }
296
+
297
+ void say_drawable_set_z(say_drawable *drawable, float z) {
298
+ drawable->matrix_updated = 0;
299
+ drawable->z_order = z;
300
+ }
301
+
302
+ void say_drawable_set_angle(say_drawable *drawable, float angle) {
303
+ drawable->matrix_updated = 0;
304
+ drawable->angle = angle;
305
+ }
306
+
307
+ say_vector2 say_drawable_get_origin(say_drawable *drawable) {
308
+ return drawable->origin;
309
+ }
310
+
311
+ say_vector2 say_drawable_get_scale(say_drawable *drawable) {
312
+ return drawable->scale;
313
+ }
314
+
315
+ say_vector2 say_drawable_get_pos(say_drawable *drawable) {
316
+ return drawable->pos;
317
+ }
318
+
319
+ float say_drawable_get_z(say_drawable *drawable) {
320
+ return drawable->z_order;
321
+ }
322
+
323
+ float say_drawable_get_angle(say_drawable *drawable) {
324
+ return drawable->angle;
325
+ }
326
+
327
+ say_matrix *say_drawable_get_matrix(say_drawable *drawable) {
328
+ if (!drawable->matrix_updated)
329
+ say_drawable_update_matrix(drawable);
330
+
331
+ return drawable->matrix;
332
+ }
333
+
334
+ void say_drawable_set_matrix(say_drawable *drawable, say_matrix *matrix) {
335
+ if (matrix) {
336
+ drawable->custom_matrix = true;
337
+ memcpy(drawable->matrix->content, matrix->content, sizeof(float) * 16);
338
+ }
339
+ else {
340
+ drawable->custom_matrix = false;
341
+ drawable->matrix_updated = false;
342
+ }
343
+ }
344
+
345
+ say_vector3 say_drawable_transform(say_drawable *drawable, say_vector3 point) {
346
+ if (!drawable->matrix_updated)
347
+ say_drawable_update_matrix(drawable);
348
+
349
+ return say_matrix_transform(drawable->matrix, point);
350
+ }
@@ -0,0 +1,100 @@
1
+ #ifndef SAY_DRAWABLE_H_
2
+ #define SAY_DRAWABLE_H_
3
+
4
+ #include "say_buffer_slice.h"
5
+ #include "say_index_buffer_slice.h"
6
+
7
+ #include "say_matrix.h"
8
+ #include "say_shader.h"
9
+
10
+ typedef void (*say_fill_proc)(void *data, void *vertices);
11
+ typedef void (*say_index_fill_proc)(void *data, GLuint *indices, size_t from);
12
+ typedef void (*say_render_proc)(void *data, size_t first, size_t index,
13
+ say_shader *shader);
14
+
15
+ typedef struct {
16
+ size_t vertex_count;
17
+ size_t vtype;
18
+ say_buffer_slice *slice;
19
+
20
+ size_t index_count;
21
+ say_index_buffer_slice *index_slice;
22
+
23
+ void *data;
24
+
25
+ say_fill_proc fill_proc;
26
+ say_index_fill_proc index_fill_proc;
27
+ say_render_proc render_proc;
28
+
29
+ say_shader *shader;
30
+ say_matrix *matrix;
31
+
32
+ say_vector2 origin;
33
+ say_vector2 scale;
34
+ say_vector2 pos;
35
+ float z_order;
36
+ float angle;
37
+
38
+ bool use_texture;
39
+ bool matrix_updated;
40
+ bool custom_matrix;
41
+ bool has_changed;
42
+ } say_drawable;
43
+
44
+ say_drawable *say_drawable_create(size_t vtype);
45
+ void say_drawable_free(say_drawable *drawable);
46
+
47
+ void say_drawable_copy(say_drawable *drawable, say_drawable *other);
48
+
49
+ void say_drawable_set_custom_data(say_drawable *drawable, void *data);
50
+
51
+ void say_drawable_set_vertex_count(say_drawable *drawable, size_t size);
52
+ size_t say_drawable_get_vertex_count(say_drawable *drawable);
53
+
54
+ size_t say_drawable_get_vertex_type(say_drawable *drawable);
55
+
56
+ void say_drawable_set_index_count(say_drawable *drawable, size_t size);
57
+ size_t say_drawable_get_index_count(say_drawable *drawable);
58
+
59
+ void say_drawable_set_fill_proc(say_drawable *drawable, say_fill_proc proc);
60
+ void say_drawable_set_render_proc(say_drawable *drawable, say_render_proc proc);
61
+ void say_drawable_set_index_fill_proc(say_drawable *drawable,
62
+ say_index_fill_proc proc);
63
+
64
+ void say_drawable_fill_buffer(say_drawable *drawable, void *vertices);
65
+ void say_drawable_fill_own_buffer(say_drawable *drawable);
66
+
67
+ void say_drawable_fill_index_buffer(say_drawable *drawable, GLuint *indices,
68
+ size_t from);
69
+ void say_drawable_fill_own_index_buffer(say_drawable *drawable);
70
+
71
+ void say_drawable_draw_at(say_drawable *drawable, size_t vertex, size_t id,
72
+ say_shader *shader);
73
+ void say_drawable_draw(say_drawable *drawable, say_shader *shader);
74
+
75
+ void say_drawable_set_changed(say_drawable *drawable);
76
+ uint8_t say_drawable_has_changed(say_drawable *drawable);
77
+
78
+ void say_drawable_set_textured(say_drawable *drawable, uint8_t val);
79
+ uint8_t say_drawable_is_textured(say_drawable *drawable);
80
+
81
+ say_shader *say_drawable_get_shader(say_drawable *drawable);
82
+ void say_drawable_set_shader(say_drawable *drawable, say_shader *shader);
83
+
84
+ void say_drawable_set_origin(say_drawable *drawable, say_vector2 origin);
85
+ void say_drawable_set_scale(say_drawable *drawable, say_vector2 scale);
86
+ void say_drawable_set_pos(say_drawable *drawable, say_vector2 pos);
87
+ void say_drawable_set_z(say_drawable *drawable, float z);
88
+ void say_drawable_set_angle(say_drawable *drawable, float angle);
89
+
90
+ say_vector2 say_drawable_get_origin(say_drawable *drawable);
91
+ say_vector2 say_drawable_get_scale(say_drawable *drawable);
92
+ say_vector2 say_drawable_get_pos(say_drawable *drawable);
93
+ float say_drawable_get_z(say_drawable *drawable);
94
+ float say_drawable_get_angle(say_drawable *drawable);
95
+
96
+ say_matrix *say_drawable_get_matrix(say_drawable *drawable);
97
+ void say_drawable_set_matrix(say_drawable *drawable, say_matrix *matrix);
98
+ say_vector3 say_drawable_transform(say_drawable *drawable, say_vector3 point);
99
+
100
+ #endif