ruby2d 0.12.0 → 1.0.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 (619) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +7 -0
  3. data/README.md +141 -0
  4. data/USAGE.md +2435 -0
  5. data/assets/Rakefile +637 -0
  6. data/assets/build_support/CMakeLists.txt +94 -0
  7. data/assets/build_support/mruby/build_config.rb +34 -0
  8. data/assets/build_support/mruby/build_config_wasm.rb +30 -0
  9. data/assets/build_support/sdl_test.c +174 -0
  10. data/assets/deps.yaml +16 -0
  11. data/assets/platform/include/SDL3/SDL.h +91 -0
  12. data/assets/platform/include/SDL3/SDL_assert.h +705 -0
  13. data/assets/platform/include/SDL3/SDL_asyncio.h +550 -0
  14. data/assets/platform/include/SDL3/SDL_atomic.h +692 -0
  15. data/assets/platform/include/SDL3/SDL_audio.h +2370 -0
  16. data/assets/platform/include/SDL3/SDL_begin_code.h +553 -0
  17. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_bits.h +47 -27
  18. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_blendmode.h +59 -55
  19. data/assets/platform/include/SDL3/SDL_camera.h +535 -0
  20. data/assets/platform/include/SDL3/SDL_clipboard.h +331 -0
  21. data/assets/{include/SDL2/close_code.h → platform/include/SDL3/SDL_close_code.h} +9 -8
  22. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_copying.h +3 -1
  23. data/assets/platform/include/SDL3/SDL_cpuinfo.h +374 -0
  24. data/assets/platform/include/SDL3/SDL_dialog.h +343 -0
  25. data/assets/platform/include/SDL3/SDL_dlopennote.h +234 -0
  26. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_egl.h +11 -8
  27. data/assets/platform/include/SDL3/SDL_endian.h +645 -0
  28. data/assets/platform/include/SDL3/SDL_error.h +226 -0
  29. data/assets/platform/include/SDL3/SDL_events.h +1645 -0
  30. data/assets/platform/include/SDL3/SDL_filesystem.h +537 -0
  31. data/assets/platform/include/SDL3/SDL_gamepad.h +1656 -0
  32. data/assets/platform/include/SDL3/SDL_gpu.h +4608 -0
  33. data/assets/platform/include/SDL3/SDL_guid.h +106 -0
  34. data/assets/platform/include/SDL3/SDL_haptic.h +1461 -0
  35. data/assets/platform/include/SDL3/SDL_hidapi.h +571 -0
  36. data/assets/platform/include/SDL3/SDL_hints.h +5001 -0
  37. data/assets/platform/include/SDL3/SDL_init.h +507 -0
  38. data/assets/platform/include/SDL3/SDL_intrin.h +410 -0
  39. data/assets/platform/include/SDL3/SDL_iostream.h +1379 -0
  40. data/assets/platform/include/SDL3/SDL_joystick.h +1385 -0
  41. data/assets/platform/include/SDL3/SDL_keyboard.h +608 -0
  42. data/assets/platform/include/SDL3/SDL_keycode.h +347 -0
  43. data/assets/platform/include/SDL3/SDL_loadso.h +145 -0
  44. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_locale.h +40 -24
  45. data/assets/platform/include/SDL3/SDL_log.h +541 -0
  46. data/assets/platform/include/SDL3/SDL_main.h +704 -0
  47. data/assets/platform/include/SDL3/SDL_main_impl.h +151 -0
  48. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_messagebox.h +85 -48
  49. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_metal.h +29 -29
  50. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_misc.h +13 -12
  51. data/assets/platform/include/SDL3/SDL_mouse.h +813 -0
  52. data/assets/platform/include/SDL3/SDL_mutex.h +1117 -0
  53. data/assets/platform/include/SDL3/SDL_oldnames.h +1339 -0
  54. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl.h +1247 -278
  55. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengl_glext.h +5 -1
  56. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles.h +6 -7
  57. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2.h +10 -11
  58. data/assets/platform/include/SDL3/SDL_pen.h +198 -0
  59. data/assets/platform/include/SDL3/SDL_pixels.h +1441 -0
  60. data/assets/{include/SDL2/SDL_test_log.h → platform/include/SDL3/SDL_platform.h} +25 -26
  61. data/assets/platform/include/SDL3/SDL_platform_defines.h +497 -0
  62. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_power.h +40 -20
  63. data/assets/platform/include/SDL3/SDL_process.h +441 -0
  64. data/assets/platform/include/SDL3/SDL_properties.h +572 -0
  65. data/assets/platform/include/SDL3/SDL_rect.h +528 -0
  66. data/assets/platform/include/SDL3/SDL_render.h +3028 -0
  67. data/assets/platform/include/SDL3/SDL_revision.h +59 -0
  68. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_scancode.h +59 -68
  69. data/assets/platform/include/SDL3/SDL_sensor.h +321 -0
  70. data/assets/platform/include/SDL3/SDL_stdinc.h +6186 -0
  71. data/assets/platform/include/SDL3/SDL_storage.h +686 -0
  72. data/assets/platform/include/SDL3/SDL_surface.h +1769 -0
  73. data/assets/platform/include/SDL3/SDL_system.h +840 -0
  74. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test.h +16 -22
  75. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_assert.h +27 -34
  76. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_common.h +109 -52
  77. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_compare.h +22 -14
  78. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_crc32.h +27 -30
  79. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_font.h +50 -49
  80. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_fuzzer.h +64 -79
  81. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_harness.h +47 -30
  82. data/assets/platform/include/SDL3/SDL_test_log.h +83 -0
  83. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_md5.h +21 -28
  84. data/assets/{include/SDL2 → platform/include/SDL3}/SDL_test_memory.h +19 -16
  85. data/assets/platform/include/SDL3/SDL_thread.h +602 -0
  86. data/assets/platform/include/SDL3/SDL_time.h +249 -0
  87. data/assets/platform/include/SDL3/SDL_timer.h +454 -0
  88. data/assets/platform/include/SDL3/SDL_touch.h +184 -0
  89. data/assets/platform/include/SDL3/SDL_tray.h +544 -0
  90. data/assets/platform/include/SDL3/SDL_version.h +198 -0
  91. data/assets/platform/include/SDL3/SDL_video.h +3497 -0
  92. data/assets/platform/include/SDL3/SDL_vulkan.h +287 -0
  93. data/assets/platform/include/SDL3_image/SDL_image.h +3328 -0
  94. data/assets/platform/include/SDL3_mixer/SDL_mixer.h +3369 -0
  95. data/assets/platform/include/SDL3_ttf/SDL_textengine.h +181 -0
  96. data/assets/platform/include/SDL3_ttf/SDL_ttf.h +2833 -0
  97. data/assets/{include → platform/include}/mrbconf.h +42 -31
  98. data/assets/{include → platform/include}/mruby/array.h +3 -4
  99. data/assets/{include → platform/include}/mruby/boxing_nan.h +10 -0
  100. data/assets/platform/include/mruby/boxing_no.h +59 -0
  101. data/assets/{include → platform/include}/mruby/boxing_word.h +72 -26
  102. data/assets/platform/include/mruby/class.h +157 -0
  103. data/assets/{include → platform/include}/mruby/common.h +30 -1
  104. data/assets/{include → platform/include}/mruby/compile.h +52 -74
  105. data/assets/{include → platform/include}/mruby/data.h +2 -2
  106. data/assets/{include → platform/include}/mruby/debug.h +12 -5
  107. data/assets/{include → platform/include}/mruby/dump.h +7 -9
  108. data/assets/{include → platform/include}/mruby/endian.h +1 -1
  109. data/assets/platform/include/mruby/error.h +173 -0
  110. data/assets/platform/include/mruby/gc.h +79 -0
  111. data/assets/{include → platform/include}/mruby/hash.h +1 -7
  112. data/assets/platform/include/mruby/internal.h +282 -0
  113. data/assets/platform/include/mruby/irep.h +143 -0
  114. data/assets/{include → platform/include}/mruby/istruct.h +1 -1
  115. data/assets/platform/include/mruby/khash.h +455 -0
  116. data/assets/platform/include/mruby/mempool.h +19 -0
  117. data/assets/{include → platform/include}/mruby/numeric.h +7 -10
  118. data/assets/platform/include/mruby/object.h +51 -0
  119. data/assets/{include → platform/include}/mruby/opcode.h +5 -5
  120. data/assets/{include → platform/include}/mruby/ops.h +19 -6
  121. data/assets/platform/include/mruby/presym/id.h +1447 -0
  122. data/assets/{include → platform/include}/mruby/presym/scanning.h +10 -7
  123. data/assets/platform/include/mruby/presym/table.h +2893 -0
  124. data/assets/platform/include/mruby/presym.h +65 -0
  125. data/assets/platform/include/mruby/proc.h +184 -0
  126. data/assets/{include → platform/include}/mruby/range.h +0 -2
  127. data/assets/{include → platform/include}/mruby/string.h +33 -53
  128. data/assets/platform/include/mruby/throw.h +81 -0
  129. data/assets/{include → platform/include}/mruby/value.h +64 -29
  130. data/assets/{include → platform/include}/mruby/variable.h +6 -23
  131. data/assets/{include → platform/include}/mruby/version.h +7 -7
  132. data/assets/{include → platform/include}/mruby.h +238 -116
  133. data/assets/platform/macos-arm64/bin/mrbc +0 -0
  134. data/assets/platform/macos-arm64/lib/libSDL3.a +0 -0
  135. data/assets/platform/macos-arm64/lib/libSDL3_image.a +0 -0
  136. data/assets/platform/macos-arm64/lib/libSDL3_mixer.a +0 -0
  137. data/assets/platform/macos-arm64/lib/libSDL3_ttf.a +0 -0
  138. data/assets/platform/macos-arm64/lib/libmruby.a +0 -0
  139. data/assets/platform/wasm/lib/libFLAC.a +0 -0
  140. data/assets/platform/wasm/lib/libSDL3.a +0 -0
  141. data/assets/platform/wasm/lib/libSDL3_image.a +0 -0
  142. data/assets/platform/wasm/lib/libSDL3_mixer.a +0 -0
  143. data/assets/platform/wasm/lib/libSDL3_ttf.a +0 -0
  144. data/assets/platform/wasm/lib/libfreetype.a +0 -0
  145. data/assets/platform/wasm/lib/libharfbuzz.a +0 -0
  146. data/assets/platform/wasm/lib/libmruby.a +0 -0
  147. data/assets/platform/wasm/lib/libogg.a +0 -0
  148. data/assets/platform/wasm/lib/libplutosvg.a +0 -0
  149. data/assets/platform/wasm/lib/libplutovg.a +0 -0
  150. data/assets/platform/wasm/lib/libpng.a +0 -0
  151. data/assets/platform/wasm/lib/libpng16.a +0 -0
  152. data/assets/platform/wasm/lib/libvorbis.a +0 -0
  153. data/assets/platform/wasm/lib/libvorbisfile.a +0 -0
  154. data/assets/platform/wasm/lib/libzlibstatic.a +0 -0
  155. data/assets/platform/windows-arm64-mingw-ucrt/bin/mrbc.exe +0 -0
  156. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3.a +0 -0
  157. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  158. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  159. data/assets/platform/windows-arm64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  160. data/assets/platform/windows-arm64-mingw-ucrt/lib/libmruby.a +0 -0
  161. data/assets/platform/windows-x86_64-mingw-ucrt/bin/mrbc.exe +0 -0
  162. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3.a +0 -0
  163. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_image.a +0 -0
  164. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_mixer.a +0 -0
  165. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libSDL3_ttf.a +0 -0
  166. data/assets/platform/windows-x86_64-mingw-ucrt/lib/libmruby.a +0 -0
  167. data/assets/resources/fonts/outfit/OFL.txt +93 -0
  168. data/assets/resources/fonts/outfit/outfit.ttf +0 -0
  169. data/assets/resources/fonts/roboto_mono/OFL.txt +91 -0
  170. data/assets/resources/fonts/roboto_mono/roboto_mono.ttf +0 -0
  171. data/assets/resources/icons/icon.icns +0 -0
  172. data/assets/resources/icons/icon.png +0 -0
  173. data/assets/resources/spritesheets/License.txt +28 -0
  174. data/assets/resources/spritesheets/spritesheet-backgrounds.png +0 -0
  175. data/assets/resources/spritesheets/spritesheet-backgrounds.xml +16 -0
  176. data/assets/resources/spritesheets/spritesheet-characters.png +0 -0
  177. data/assets/resources/spritesheets/spritesheet-characters.xml +47 -0
  178. data/assets/resources/spritesheets/spritesheet-enemies.png +0 -0
  179. data/assets/resources/spritesheets/spritesheet-enemies.xml +62 -0
  180. data/assets/resources/spritesheets/spritesheet-tiles.png +0 -0
  181. data/assets/resources/spritesheets/spritesheet-tiles.xml +316 -0
  182. data/assets/{wasm → resources/web}/template.html +1 -1
  183. data/assets/target.rb +131 -0
  184. data/bin/ruby2d +281 -82
  185. data/examples/astar.rb +269 -0
  186. data/examples/asteroids.rb +403 -0
  187. data/examples/bezier_editor.rb +96 -0
  188. data/examples/boids.rb +191 -0
  189. data/examples/bouncing_balls.rb +119 -0
  190. data/examples/breakout.rb +186 -0
  191. data/examples/constellations.rb +100 -0
  192. data/examples/dashboard.rb +133 -0
  193. data/examples/double_pendulum.rb +254 -0
  194. data/examples/falling_sand.rb +291 -0
  195. data/examples/fireworks.rb +110 -0
  196. data/examples/fluid_dynamics.rb +340 -0
  197. data/examples/fourier_epicycles.rb +142 -0
  198. data/examples/fractal_tree.rb +326 -0
  199. data/examples/game_of_life.rb +148 -0
  200. data/examples/gamepads.rb +333 -0
  201. data/examples/hill_driver.rb +613 -0
  202. data/examples/logo_animation.rb +251 -0
  203. data/examples/lorenz_attractor.rb +115 -0
  204. data/examples/mandelbrot.rb +207 -0
  205. data/examples/marching_squares.rb +200 -0
  206. data/examples/maze.rb +323 -0
  207. data/examples/nbody.rb +338 -0
  208. data/examples/outrun.rb +391 -0
  209. data/examples/pixel_paint.rb +313 -0
  210. data/examples/platformer.rb +335 -0
  211. data/examples/ray_casting_maze.rb +175 -0
  212. data/examples/shadow_casting.rb +151 -0
  213. data/examples/shape_recognizer.rb +908 -0
  214. data/examples/snake.rb +144 -0
  215. data/examples/sprite_sheets.rb +246 -0
  216. data/examples/swarm.rb +206 -0
  217. data/examples/tsp_annealing.rb +104 -0
  218. data/examples/ui_controls.rb +163 -0
  219. data/examples/wireframe_3d.rb +139 -0
  220. data/ext/ruby2d/audio.c +324 -0
  221. data/ext/ruby2d/canvas.c +1715 -494
  222. data/ext/ruby2d/ext.c +541 -0
  223. data/ext/ruby2d/extconf.rb +122 -145
  224. data/ext/ruby2d/font.c +566 -20
  225. data/ext/ruby2d/fps.c +92 -0
  226. data/ext/ruby2d/image.c +466 -41
  227. data/ext/ruby2d/ruby2d.c +374 -1890
  228. data/ext/ruby2d/ruby2d.h +840 -460
  229. data/ext/ruby2d/shapes.c +931 -101
  230. data/ext/ruby2d/text.c +586 -21
  231. data/ext/ruby2d/window.c +1693 -283
  232. data/lib/ruby2d/atlas_parser.rb +194 -0
  233. data/lib/ruby2d/audio.rb +73 -0
  234. data/lib/ruby2d/benchmark.rb +259 -0
  235. data/lib/ruby2d/bitmap_text.rb +155 -0
  236. data/lib/ruby2d/button.rb +402 -0
  237. data/lib/ruby2d/canvas.rb +703 -279
  238. data/lib/ruby2d/circle.rb +206 -29
  239. data/lib/ruby2d/cli/browser.rb +314 -0
  240. data/lib/ruby2d/cli/build.rb +471 -257
  241. data/lib/ruby2d/cli/colorize.rb +7 -5
  242. data/lib/ruby2d/cli/examples.rb +127 -0
  243. data/lib/ruby2d/cli/launch.rb +24 -39
  244. data/lib/ruby2d/cli/lib_files.rb +48 -0
  245. data/lib/ruby2d/cli/messages.rb +40 -0
  246. data/lib/ruby2d/cli/setup.rb +273 -0
  247. data/lib/ruby2d/cli/static_server.rb +160 -0
  248. data/lib/ruby2d/cli/usage.rb +255 -0
  249. data/lib/ruby2d/color.rb +191 -69
  250. data/lib/ruby2d/core.rb +37 -19
  251. data/lib/ruby2d/deps_help.rb +89 -0
  252. data/lib/ruby2d/dsl.rb +51 -12
  253. data/lib/ruby2d/ellipse.rb +228 -0
  254. data/lib/ruby2d/exceptions.rb +0 -2
  255. data/lib/ruby2d/font.rb +34 -74
  256. data/lib/ruby2d/gamepad.rb +323 -0
  257. data/lib/ruby2d/gem_paths.rb +19 -0
  258. data/lib/ruby2d/image.rb +155 -52
  259. data/lib/ruby2d/interactive.rb +103 -0
  260. data/lib/ruby2d/json_parser.rb +268 -0
  261. data/lib/ruby2d/line.rb +194 -85
  262. data/lib/ruby2d/mruby_compat.rb +12 -0
  263. data/lib/ruby2d/polygon.rb +297 -0
  264. data/lib/ruby2d/polyline.rb +368 -0
  265. data/lib/ruby2d/quad.rb +358 -94
  266. data/lib/ruby2d/rectangle.rb +77 -19
  267. data/lib/ruby2d/renderable.rb +411 -11
  268. data/lib/ruby2d/sprite.rb +471 -180
  269. data/lib/ruby2d/sprite_sheet.rb +64 -0
  270. data/lib/ruby2d/square.rb +29 -17
  271. data/lib/ruby2d/text.rb +196 -65
  272. data/lib/ruby2d/tileset.rb +139 -81
  273. data/lib/ruby2d/triangle.rb +324 -89
  274. data/lib/ruby2d/version.rb +1 -3
  275. data/lib/ruby2d/vertices.rb +62 -85
  276. data/lib/ruby2d/warnings.rb +29 -0
  277. data/lib/ruby2d/window/class_methods.rb +218 -0
  278. data/lib/ruby2d/window/gamepad_events.rb +141 -0
  279. data/lib/ruby2d/window/key_events.rb +74 -0
  280. data/lib/ruby2d/window/mouse_events.rb +171 -0
  281. data/lib/ruby2d/window/object_events.rb +168 -0
  282. data/lib/ruby2d/window.rb +632 -585
  283. data/lib/ruby2d.rb +14 -19
  284. metadata +275 -428
  285. data/assets/app.icns +0 -0
  286. data/assets/include/GLES2/gl2.h +0 -656
  287. data/assets/include/GLES2/gl2ext.h +0 -3949
  288. data/assets/include/GLES2/gl2ext_angle.h +0 -701
  289. data/assets/include/GLES2/gl2platform.h +0 -27
  290. data/assets/include/GLES3/gl3.h +0 -1192
  291. data/assets/include/GLES3/gl31.h +0 -1507
  292. data/assets/include/GLES3/gl32.h +0 -1808
  293. data/assets/include/GLES3/gl3platform.h +0 -27
  294. data/assets/include/KHR/khrplatform.h +0 -290
  295. data/assets/include/SDL2/SDL.h +0 -233
  296. data/assets/include/SDL2/SDL_assert.h +0 -326
  297. data/assets/include/SDL2/SDL_atomic.h +0 -415
  298. data/assets/include/SDL2/SDL_audio.h +0 -1500
  299. data/assets/include/SDL2/SDL_clipboard.h +0 -141
  300. data/assets/include/SDL2/SDL_config.h +0 -61
  301. data/assets/include/SDL2/SDL_config_android.h +0 -194
  302. data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
  303. data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
  304. data/assets/include/SDL2/SDL_config_macosx.h +0 -277
  305. data/assets/include/SDL2/SDL_config_minimal.h +0 -95
  306. data/assets/include/SDL2/SDL_config_ngage.h +0 -89
  307. data/assets/include/SDL2/SDL_config_os2.h +0 -207
  308. data/assets/include/SDL2/SDL_config_pandora.h +0 -141
  309. data/assets/include/SDL2/SDL_config_windows.h +0 -331
  310. data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
  311. data/assets/include/SDL2/SDL_config_winrt.h +0 -220
  312. data/assets/include/SDL2/SDL_config_xbox.h +0 -235
  313. data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
  314. data/assets/include/SDL2/SDL_endian.h +0 -348
  315. data/assets/include/SDL2/SDL_error.h +0 -163
  316. data/assets/include/SDL2/SDL_events.h +0 -1166
  317. data/assets/include/SDL2/SDL_filesystem.h +0 -149
  318. data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
  319. data/assets/include/SDL2/SDL_gesture.h +0 -117
  320. data/assets/include/SDL2/SDL_guid.h +0 -100
  321. data/assets/include/SDL2/SDL_haptic.h +0 -1341
  322. data/assets/include/SDL2/SDL_hidapi.h +0 -451
  323. data/assets/include/SDL2/SDL_hints.h +0 -2569
  324. data/assets/include/SDL2/SDL_image.h +0 -2173
  325. data/assets/include/SDL2/SDL_joystick.h +0 -1066
  326. data/assets/include/SDL2/SDL_keyboard.h +0 -353
  327. data/assets/include/SDL2/SDL_keycode.h +0 -358
  328. data/assets/include/SDL2/SDL_loadso.h +0 -115
  329. data/assets/include/SDL2/SDL_log.h +0 -404
  330. data/assets/include/SDL2/SDL_main.h +0 -275
  331. data/assets/include/SDL2/SDL_mixer.h +0 -2784
  332. data/assets/include/SDL2/SDL_mouse.h +0 -465
  333. data/assets/include/SDL2/SDL_mutex.h +0 -471
  334. data/assets/include/SDL2/SDL_name.h +0 -33
  335. data/assets/include/SDL2/SDL_pixels.h +0 -644
  336. data/assets/include/SDL2/SDL_platform.h +0 -261
  337. data/assets/include/SDL2/SDL_quit.h +0 -58
  338. data/assets/include/SDL2/SDL_rect.h +0 -376
  339. data/assets/include/SDL2/SDL_render.h +0 -1919
  340. data/assets/include/SDL2/SDL_revision.h +0 -6
  341. data/assets/include/SDL2/SDL_rwops.h +0 -841
  342. data/assets/include/SDL2/SDL_sensor.h +0 -322
  343. data/assets/include/SDL2/SDL_shape.h +0 -155
  344. data/assets/include/SDL2/SDL_stdinc.h +0 -830
  345. data/assets/include/SDL2/SDL_surface.h +0 -997
  346. data/assets/include/SDL2/SDL_system.h +0 -623
  347. data/assets/include/SDL2/SDL_syswm.h +0 -386
  348. data/assets/include/SDL2/SDL_test_images.h +0 -78
  349. data/assets/include/SDL2/SDL_test_random.h +0 -115
  350. data/assets/include/SDL2/SDL_thread.h +0 -464
  351. data/assets/include/SDL2/SDL_timer.h +0 -222
  352. data/assets/include/SDL2/SDL_touch.h +0 -150
  353. data/assets/include/SDL2/SDL_ttf.h +0 -2316
  354. data/assets/include/SDL2/SDL_types.h +0 -29
  355. data/assets/include/SDL2/SDL_version.h +0 -204
  356. data/assets/include/SDL2/SDL_video.h +0 -2150
  357. data/assets/include/SDL2/SDL_vulkan.h +0 -215
  358. data/assets/include/SDL2/begin_code.h +0 -187
  359. data/assets/include/mruby/boxing_no.h +0 -58
  360. data/assets/include/mruby/class.h +0 -108
  361. data/assets/include/mruby/error.h +0 -147
  362. data/assets/include/mruby/gc.h +0 -94
  363. data/assets/include/mruby/irep.h +0 -147
  364. data/assets/include/mruby/khash.h +0 -284
  365. data/assets/include/mruby/object.h +0 -43
  366. data/assets/include/mruby/presym/disable.h +0 -70
  367. data/assets/include/mruby/presym/enable.h +0 -37
  368. data/assets/include/mruby/presym.h +0 -40
  369. data/assets/include/mruby/proc.h +0 -211
  370. data/assets/include/mruby/throw.h +0 -66
  371. data/assets/macos/universal/bin/mrbc +0 -0
  372. data/assets/macos/universal/lib/libFLAC.a +0 -0
  373. data/assets/macos/universal/lib/libSDL2.a +0 -0
  374. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  375. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  376. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  377. data/assets/macos/universal/lib/libavif.a +0 -0
  378. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  379. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  380. data/assets/macos/universal/lib/libfreetype.a +0 -0
  381. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  382. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  383. data/assets/macos/universal/lib/libhwy.a +0 -0
  384. data/assets/macos/universal/lib/libjpeg.a +0 -0
  385. data/assets/macos/universal/lib/libjxl.a +0 -0
  386. data/assets/macos/universal/lib/libmodplug.a +0 -0
  387. data/assets/macos/universal/lib/libmpg123.a +0 -0
  388. data/assets/macos/universal/lib/libmruby.a +0 -0
  389. data/assets/macos/universal/lib/libogg.a +0 -0
  390. data/assets/macos/universal/lib/libpng.a +0 -0
  391. data/assets/macos/universal/lib/libtiff.a +0 -0
  392. data/assets/macos/universal/lib/libvorbis.a +0 -0
  393. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  394. data/assets/macos/universal/lib/libwebp.a +0 -0
  395. data/assets/macos/universal/lib/libzstd.a +0 -0
  396. data/assets/test_media/README.md +0 -3
  397. data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
  398. data/assets/test_media/bitstream_vera/vera.ttf +0 -0
  399. data/assets/test_media/boom.png +0 -0
  400. data/assets/test_media/coin.png +0 -0
  401. data/assets/test_media/colors.png +0 -0
  402. data/assets/test_media/controller.png +0 -0
  403. data/assets/test_media/dial.wav +0 -0
  404. data/assets/test_media/hero.png +0 -0
  405. data/assets/test_media/image.bmp +0 -0
  406. data/assets/test_media/image.jpg +0 -0
  407. data/assets/test_media/image.png +0 -0
  408. data/assets/test_media/music.flac +0 -0
  409. data/assets/test_media/music.mp3 +0 -0
  410. data/assets/test_media/music.ogg +0 -0
  411. data/assets/test_media/music.wav +0 -0
  412. data/assets/test_media/originals/boom.pxm +0 -0
  413. data/assets/test_media/originals/coin.pxm +0 -0
  414. data/assets/test_media/originals/controller.sketch +0 -0
  415. data/assets/test_media/originals/hero.pxm +0 -0
  416. data/assets/test_media/originals/image.pxm +0 -0
  417. data/assets/test_media/originals/music.caf +0 -0
  418. data/assets/test_media/originals/texture_atlas.pxm +0 -0
  419. data/assets/test_media/rondo_alla_turka.ogg +0 -0
  420. data/assets/test_media/sound.flac +0 -0
  421. data/assets/test_media/sound.mp3 +0 -0
  422. data/assets/test_media/sound.ogg +0 -0
  423. data/assets/test_media/sound.wav +0 -0
  424. data/assets/test_media/sprite_sheet.png +0 -0
  425. data/assets/test_media/texture_atlas.png +0 -0
  426. data/assets/wasm/libmruby.a +0 -0
  427. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  428. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  429. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  430. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  431. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  432. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  433. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  434. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  435. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  436. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  437. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  438. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  439. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  440. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  441. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  442. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  443. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  444. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  445. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  446. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  447. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  448. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  449. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  450. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  451. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  452. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  453. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  454. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  455. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
  456. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  457. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  458. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  459. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  460. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  461. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  462. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  463. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  464. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  465. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  466. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  467. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  468. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  469. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  470. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  471. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  472. data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
  473. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  474. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  475. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  476. data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
  477. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  478. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  479. data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
  480. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  481. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  482. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  483. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  484. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  485. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  486. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  487. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  488. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  489. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  490. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  491. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
  492. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  493. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  494. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  495. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  496. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  497. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  498. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  499. data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  500. data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
  501. data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
  502. data/assets/xcode/ios/Info.plist +0 -43
  503. data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
  504. data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
  505. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  506. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  507. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  508. data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
  509. data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
  510. data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
  511. data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
  512. data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
  513. data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
  514. data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
  515. data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
  516. data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
  517. data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
  518. data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
  519. data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
  520. data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
  521. data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
  522. data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
  523. data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
  524. data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
  525. data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
  526. data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
  527. data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
  528. data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
  529. data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
  530. data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
  531. data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
  532. data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
  533. data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
  534. data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
  535. data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
  536. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  537. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  538. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  539. data/assets/xcode/ios/main.c +0 -1
  540. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  541. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
  542. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
  543. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  544. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
  545. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  546. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  547. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  548. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
  549. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
  550. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  551. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
  552. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  553. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  554. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
  555. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
  556. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
  557. data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
  558. data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
  559. data/assets/xcode/tvos/Info.plist +0 -30
  560. data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
  561. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
  562. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  563. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  564. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  565. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
  566. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
  567. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
  568. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
  569. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
  570. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
  571. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
  572. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
  573. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
  574. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
  575. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
  576. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
  577. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
  578. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
  579. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
  580. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
  581. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
  582. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
  583. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
  584. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
  585. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
  586. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
  587. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
  588. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
  589. data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
  590. data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
  591. data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
  592. data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
  593. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  594. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  595. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  596. data/assets/xcode/tvos/main.c +0 -1
  597. data/ext/ruby2d/common.c +0 -185
  598. data/ext/ruby2d/controllers.c +0 -110
  599. data/ext/ruby2d/gl.c +0 -398
  600. data/ext/ruby2d/gl2.c +0 -86
  601. data/ext/ruby2d/gl3.c +0 -304
  602. data/ext/ruby2d/gles.c +0 -302
  603. data/ext/ruby2d/input.c +0 -48
  604. data/ext/ruby2d/music.c +0 -127
  605. data/ext/ruby2d/sound.c +0 -132
  606. data/lib/ruby2d/cli/console.rb +0 -65
  607. data/lib/ruby2d/cli/enable_console.rb +0 -7
  608. data/lib/ruby2d/cli/platform.rb +0 -17
  609. data/lib/ruby2d/music.rb +0 -77
  610. data/lib/ruby2d/pixel.rb +0 -18
  611. data/lib/ruby2d/pixmap.rb +0 -39
  612. data/lib/ruby2d/pixmap_atlas.rb +0 -56
  613. data/lib/ruby2d/sound.rb +0 -61
  614. data/lib/ruby2d/texture.rb +0 -38
  615. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
  616. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
  617. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
  618. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
  619. /data/assets/{include → platform/include}/mruby/re.h +0 -0
data/ext/ruby2d/ext.c ADDED
@@ -0,0 +1,541 @@
1
+ // ext.c
2
+ //
3
+ // Ruby2D::Ext — Ruby-callable bindings exposing libruby2d C primitives.
4
+ // Per-shape Ruby code calls these directly instead of having C functions
5
+ // reach into Ruby objects via r_ivar_get. Keeps SDL3-touching code in C
6
+ // and per-frame logic in Ruby.
7
+ //
8
+ // Fixed-arity shapes (Triangle, Quad, Line, Circle, Ellipse) use positional
9
+ // float args. Variadic shapes (Polygon, Polyline) take Ruby arrays for
10
+ // vertex and color buffers since the count is not known at bind time.
11
+
12
+ #include "ruby2d.h"
13
+
14
+
15
+ // File-scope storage for the Ext module so subsystem .c files (audio, image,
16
+ // text, etc.) can register their own Ext bindings on it without re-creating it.
17
+ R_CLASS ruby2d_ext_module;
18
+
19
+ // Shared ivar ID cache. Subsystem .c files use these instead of caching their
20
+ // own per-file copies — same Ruby ivar name, same R_ID across subsystems. The
21
+ // IDs are interned during R2D_Ext_Init (which runs first), so they're ready
22
+ // when subsequent subsystem inits execute.
23
+ R_ID id_x, id_y, id_width, id_height, id_rotate;
24
+ R_ID id_color, id_r, id_g, id_b, id_a;
25
+ R_ID id_ext_image, id_ext_text;
26
+ R_ID id_path, id_content;
27
+ R_ID id_viewport_width, id_viewport_height;
28
+
29
+
30
+ // Fixed-arity shape bindings //////////////////////////////////////////////////
31
+
32
+
33
+ /*
34
+ * Ruby2D::Ext.draw_triangle(
35
+ * x1, y1, r1, g1, b1, a1,
36
+ * x2, y2, r2, g2, b2, a2,
37
+ * x3, y3, r3, g3, b3, a3
38
+ * )
39
+ */
40
+ R_VAL ruby2d_ext_draw_triangle(RUBY2D_METHOD_ARGS_VARIADIC) {
41
+ RUBY2D_EXTRACT_VARIADIC;
42
+ if (argc != 18) r_raise("Ruby2D::Ext.draw_triangle expects 18 args, got %d", (int)argc);
43
+
44
+ R2D_DrawTriangle(
45
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
46
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]), NUM2DBL(argv[4]), NUM2DBL(argv[5]),
47
+
48
+ NUM2DBL(argv[6]), NUM2DBL(argv[7]),
49
+ NUM2DBL(argv[8]), NUM2DBL(argv[9]), NUM2DBL(argv[10]), NUM2DBL(argv[11]),
50
+
51
+ NUM2DBL(argv[12]), NUM2DBL(argv[13]),
52
+ NUM2DBL(argv[14]), NUM2DBL(argv[15]), NUM2DBL(argv[16]), NUM2DBL(argv[17])
53
+ );
54
+
55
+ return R_NIL;
56
+ }
57
+
58
+
59
+ /*
60
+ * Ruby2D::Ext.draw_triangle_uniform(x1, y1, x2, y2, x3, y3, r, g, b, a)
61
+ *
62
+ * Solid (single-color) triangle: one rgba is replicated to all three vertices,
63
+ * so a uniform Triangle passes 10 args instead of 18 and skips the per-vertex
64
+ * color marshaling. Geometry is identical to draw_triangle with equal colors.
65
+ */
66
+ R_VAL ruby2d_ext_draw_triangle_uniform(RUBY2D_METHOD_ARGS_VARIADIC) {
67
+ RUBY2D_EXTRACT_VARIADIC;
68
+ if (argc != 10) r_raise("Ruby2D::Ext.draw_triangle_uniform expects 10 args, got %d", (int)argc);
69
+
70
+ float r = NUM2DBL(argv[6]);
71
+ float g = NUM2DBL(argv[7]);
72
+ float b = NUM2DBL(argv[8]);
73
+ float a = NUM2DBL(argv[9]);
74
+
75
+ R2D_DrawTriangle(
76
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]), r, g, b, a,
77
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]), r, g, b, a,
78
+ NUM2DBL(argv[4]), NUM2DBL(argv[5]), r, g, b, a
79
+ );
80
+
81
+ return R_NIL;
82
+ }
83
+
84
+
85
+ /*
86
+ * Ruby2D::Ext.stroke_triangle(
87
+ * x1, y1, x2, y2, x3, y3,
88
+ * stroke_width,
89
+ * r1, g1, b1, a1,
90
+ * r2, g2, b2, a2,
91
+ * r3, g3, b3, a3
92
+ * )
93
+ */
94
+ R_VAL ruby2d_ext_stroke_triangle(RUBY2D_METHOD_ARGS_VARIADIC) {
95
+ RUBY2D_EXTRACT_VARIADIC;
96
+ if (argc != 19) r_raise("Ruby2D::Ext.stroke_triangle expects 19 args, got %d", (int)argc);
97
+
98
+ float pts[6] = {
99
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
100
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]),
101
+ NUM2DBL(argv[4]), NUM2DBL(argv[5])
102
+ };
103
+ float sw = NUM2DBL(argv[6]);
104
+ float colors[12] = {
105
+ NUM2DBL(argv[7]), NUM2DBL(argv[8]), NUM2DBL(argv[9]), NUM2DBL(argv[10]),
106
+ NUM2DBL(argv[11]), NUM2DBL(argv[12]), NUM2DBL(argv[13]), NUM2DBL(argv[14]),
107
+ NUM2DBL(argv[15]), NUM2DBL(argv[16]), NUM2DBL(argv[17]), NUM2DBL(argv[18])
108
+ };
109
+
110
+ R2D_StrokePath(pts, 3, 1, sw, R2D_MITER_LIMIT, colors);
111
+
112
+ return R_NIL;
113
+ }
114
+
115
+
116
+ /*
117
+ * Ruby2D::Ext.stroke_triangle_uniform(x1, y1, x2, y2, x3, y3, sw, r, g, b, a)
118
+ *
119
+ * Solid (single-color) triangle outline: one rgba replicated to all three
120
+ * vertices, so a uniform stroke passes 11 args instead of 19.
121
+ */
122
+ R_VAL ruby2d_ext_stroke_triangle_uniform(RUBY2D_METHOD_ARGS_VARIADIC) {
123
+ RUBY2D_EXTRACT_VARIADIC;
124
+ if (argc != 11) r_raise("Ruby2D::Ext.stroke_triangle_uniform expects 11 args, got %d", (int)argc);
125
+
126
+ float pts[6] = {
127
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
128
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]),
129
+ NUM2DBL(argv[4]), NUM2DBL(argv[5])
130
+ };
131
+ float sw = NUM2DBL(argv[6]);
132
+ float r = NUM2DBL(argv[7]), g = NUM2DBL(argv[8]), b = NUM2DBL(argv[9]), a = NUM2DBL(argv[10]);
133
+ float colors[12] = { r,g,b,a, r,g,b,a, r,g,b,a };
134
+
135
+ R2D_StrokePath(pts, 3, 1, sw, R2D_MITER_LIMIT, colors);
136
+
137
+ return R_NIL;
138
+ }
139
+
140
+
141
+ /*
142
+ * Ruby2D::Ext.draw_quad(
143
+ * x1, y1, r1, g1, b1, a1,
144
+ * x2, y2, r2, g2, b2, a2,
145
+ * x3, y3, r3, g3, b3, a3,
146
+ * x4, y4, r4, g4, b4, a4
147
+ * )
148
+ */
149
+ R_VAL ruby2d_ext_draw_quad(RUBY2D_METHOD_ARGS_VARIADIC) {
150
+ RUBY2D_EXTRACT_VARIADIC;
151
+ if (argc != 24) r_raise("Ruby2D::Ext.draw_quad expects 24 args, got %d", (int)argc);
152
+
153
+ R2D_DrawQuad(
154
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
155
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]), NUM2DBL(argv[4]), NUM2DBL(argv[5]),
156
+
157
+ NUM2DBL(argv[6]), NUM2DBL(argv[7]),
158
+ NUM2DBL(argv[8]), NUM2DBL(argv[9]), NUM2DBL(argv[10]), NUM2DBL(argv[11]),
159
+
160
+ NUM2DBL(argv[12]), NUM2DBL(argv[13]),
161
+ NUM2DBL(argv[14]), NUM2DBL(argv[15]), NUM2DBL(argv[16]), NUM2DBL(argv[17]),
162
+
163
+ NUM2DBL(argv[18]), NUM2DBL(argv[19]),
164
+ NUM2DBL(argv[20]), NUM2DBL(argv[21]), NUM2DBL(argv[22]), NUM2DBL(argv[23])
165
+ );
166
+
167
+ return R_NIL;
168
+ }
169
+
170
+
171
+ /*
172
+ * Ruby2D::Ext.draw_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, r, g, b, a)
173
+ *
174
+ * Solid (single-color) quad: one rgba is replicated to all four vertices, so a
175
+ * uniform Quad/Rectangle/Square passes 12 args instead of 24 and skips the
176
+ * per-vertex color marshaling. Geometry is identical to draw_quad with equal
177
+ * colors — the common case for solid rectangles.
178
+ */
179
+ R_VAL ruby2d_ext_draw_quad_uniform(RUBY2D_METHOD_ARGS_VARIADIC) {
180
+ RUBY2D_EXTRACT_VARIADIC;
181
+ if (argc != 12) r_raise("Ruby2D::Ext.draw_quad_uniform expects 12 args, got %d", (int)argc);
182
+
183
+ float r = NUM2DBL(argv[8]);
184
+ float g = NUM2DBL(argv[9]);
185
+ float b = NUM2DBL(argv[10]);
186
+ float a = NUM2DBL(argv[11]);
187
+
188
+ R2D_DrawQuad(
189
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]), r, g, b, a,
190
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]), r, g, b, a,
191
+ NUM2DBL(argv[4]), NUM2DBL(argv[5]), r, g, b, a,
192
+ NUM2DBL(argv[6]), NUM2DBL(argv[7]), r, g, b, a
193
+ );
194
+
195
+ return R_NIL;
196
+ }
197
+
198
+
199
+ /*
200
+ * Ruby2D::Ext.stroke_quad(
201
+ * x1, y1, x2, y2, x3, y3, x4, y4,
202
+ * stroke_width,
203
+ * r1, g1, b1, a1,
204
+ * r2, g2, b2, a2,
205
+ * r3, g3, b3, a3,
206
+ * r4, g4, b4, a4
207
+ * )
208
+ */
209
+ R_VAL ruby2d_ext_stroke_quad(RUBY2D_METHOD_ARGS_VARIADIC) {
210
+ RUBY2D_EXTRACT_VARIADIC;
211
+ if (argc != 25) r_raise("Ruby2D::Ext.stroke_quad expects 25 args, got %d", (int)argc);
212
+
213
+ float pts[8] = {
214
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
215
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]),
216
+ NUM2DBL(argv[4]), NUM2DBL(argv[5]),
217
+ NUM2DBL(argv[6]), NUM2DBL(argv[7])
218
+ };
219
+ float sw = NUM2DBL(argv[8]);
220
+ float colors[16] = {
221
+ NUM2DBL(argv[9]), NUM2DBL(argv[10]), NUM2DBL(argv[11]), NUM2DBL(argv[12]),
222
+ NUM2DBL(argv[13]), NUM2DBL(argv[14]), NUM2DBL(argv[15]), NUM2DBL(argv[16]),
223
+ NUM2DBL(argv[17]), NUM2DBL(argv[18]), NUM2DBL(argv[19]), NUM2DBL(argv[20]),
224
+ NUM2DBL(argv[21]), NUM2DBL(argv[22]), NUM2DBL(argv[23]), NUM2DBL(argv[24])
225
+ };
226
+
227
+ R2D_StrokePath(pts, 4, 1, sw, R2D_MITER_LIMIT, colors);
228
+
229
+ return R_NIL;
230
+ }
231
+
232
+
233
+ /*
234
+ * Ruby2D::Ext.stroke_quad_uniform(x1, y1, x2, y2, x3, y3, x4, y4, sw, r, g, b, a)
235
+ *
236
+ * Solid (single-color) quad outline: one rgba is replicated to all four
237
+ * vertices, so a uniform stroke passes 13 args instead of 25. Identical stroke
238
+ * geometry to stroke_quad with equal colors.
239
+ */
240
+ R_VAL ruby2d_ext_stroke_quad_uniform(RUBY2D_METHOD_ARGS_VARIADIC) {
241
+ RUBY2D_EXTRACT_VARIADIC;
242
+ if (argc != 13) r_raise("Ruby2D::Ext.stroke_quad_uniform expects 13 args, got %d", (int)argc);
243
+
244
+ float pts[8] = {
245
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
246
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]),
247
+ NUM2DBL(argv[4]), NUM2DBL(argv[5]),
248
+ NUM2DBL(argv[6]), NUM2DBL(argv[7])
249
+ };
250
+ float sw = NUM2DBL(argv[8]);
251
+ float r = NUM2DBL(argv[9]), g = NUM2DBL(argv[10]), b = NUM2DBL(argv[11]), a = NUM2DBL(argv[12]);
252
+ float colors[16] = { r,g,b,a, r,g,b,a, r,g,b,a, r,g,b,a };
253
+
254
+ R2D_StrokePath(pts, 4, 1, sw, R2D_MITER_LIMIT, colors);
255
+
256
+ return R_NIL;
257
+ }
258
+
259
+
260
+ /*
261
+ * Ruby2D::Ext.draw_line(
262
+ * x1, y1, x2, y2,
263
+ * stroke_width,
264
+ * r1, g1, b1, a1, -- start + perp
265
+ * r2, g2, b2, a2, -- start - perp
266
+ * r3, g3, b3, a3, -- end - perp
267
+ * r4, g4, b4, a4 -- end + perp
268
+ * )
269
+ */
270
+ R_VAL ruby2d_ext_draw_line(RUBY2D_METHOD_ARGS_VARIADIC) {
271
+ RUBY2D_EXTRACT_VARIADIC;
272
+ if (argc != 21) r_raise("Ruby2D::Ext.draw_line expects 21 args, got %d", (int)argc);
273
+
274
+ R2D_DrawLine(
275
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
276
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]),
277
+ NUM2DBL(argv[4]),
278
+
279
+ NUM2DBL(argv[5]), NUM2DBL(argv[6]), NUM2DBL(argv[7]), NUM2DBL(argv[8]),
280
+ NUM2DBL(argv[9]), NUM2DBL(argv[10]), NUM2DBL(argv[11]), NUM2DBL(argv[12]),
281
+ NUM2DBL(argv[13]), NUM2DBL(argv[14]), NUM2DBL(argv[15]), NUM2DBL(argv[16]),
282
+ NUM2DBL(argv[17]), NUM2DBL(argv[18]), NUM2DBL(argv[19]), NUM2DBL(argv[20])
283
+ );
284
+
285
+ return R_NIL;
286
+ }
287
+
288
+
289
+ /*
290
+ * Ruby2D::Ext.draw_dashed_line(
291
+ * x1, y1, x2, y2,
292
+ * stroke_width, dash, gap,
293
+ * r1, g1, b1, a1,
294
+ * r2, g2, b2, a2,
295
+ * r3, g3, b3, a3,
296
+ * r4, g4, b4, a4
297
+ * )
298
+ */
299
+ R_VAL ruby2d_ext_draw_dashed_line(RUBY2D_METHOD_ARGS_VARIADIC) {
300
+ RUBY2D_EXTRACT_VARIADIC;
301
+ if (argc != 23) r_raise("Ruby2D::Ext.draw_dashed_line expects 23 args, got %d", (int)argc);
302
+
303
+ R2D_DrawDashedLine(
304
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
305
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]),
306
+ NUM2DBL(argv[4]), NUM2DBL(argv[5]), NUM2DBL(argv[6]),
307
+
308
+ NUM2DBL(argv[7]), NUM2DBL(argv[8]), NUM2DBL(argv[9]), NUM2DBL(argv[10]),
309
+ NUM2DBL(argv[11]), NUM2DBL(argv[12]), NUM2DBL(argv[13]), NUM2DBL(argv[14]),
310
+ NUM2DBL(argv[15]), NUM2DBL(argv[16]), NUM2DBL(argv[17]), NUM2DBL(argv[18]),
311
+ NUM2DBL(argv[19]), NUM2DBL(argv[20]), NUM2DBL(argv[21]), NUM2DBL(argv[22])
312
+ );
313
+
314
+ return R_NIL;
315
+ }
316
+
317
+
318
+ /*
319
+ * Ruby2D::Ext.draw_circle(x, y, radius, sectors, r, g, b, a)
320
+ */
321
+ R_VAL ruby2d_ext_draw_circle(RUBY2D_METHOD_ARGS_VARIADIC) {
322
+ RUBY2D_EXTRACT_VARIADIC;
323
+ if (argc != 8) r_raise("Ruby2D::Ext.draw_circle expects 8 args, got %d", (int)argc);
324
+
325
+ R2D_DrawCircle(
326
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
327
+ NUM2DBL(argv[2]), NUM2INT(argv[3]),
328
+ NUM2DBL(argv[4]), NUM2DBL(argv[5]), NUM2DBL(argv[6]), NUM2DBL(argv[7])
329
+ );
330
+
331
+ return R_NIL;
332
+ }
333
+
334
+
335
+ /*
336
+ * Ruby2D::Ext.stroke_circle(x, y, radius, sectors, stroke_width, r, g, b, a)
337
+ */
338
+ R_VAL ruby2d_ext_stroke_circle(RUBY2D_METHOD_ARGS_VARIADIC) {
339
+ RUBY2D_EXTRACT_VARIADIC;
340
+ if (argc != 9) r_raise("Ruby2D::Ext.stroke_circle expects 9 args, got %d", (int)argc);
341
+
342
+ float x = NUM2DBL(argv[0]);
343
+ float y = NUM2DBL(argv[1]);
344
+ float r = NUM2DBL(argv[2]);
345
+ int sectors = NUM2INT(argv[3]);
346
+ float sw = NUM2DBL(argv[4]);
347
+
348
+ R2D_StrokeEllipse(x, y, r, r, 0.0f, sectors, sw,
349
+ NUM2DBL(argv[5]), NUM2DBL(argv[6]), NUM2DBL(argv[7]), NUM2DBL(argv[8]));
350
+
351
+ return R_NIL;
352
+ }
353
+
354
+
355
+ /*
356
+ * Ruby2D::Ext.draw_ellipse(x, y, xradius, yradius, angle, sectors, r, g, b, a)
357
+ */
358
+ R_VAL ruby2d_ext_draw_ellipse(RUBY2D_METHOD_ARGS_VARIADIC) {
359
+ RUBY2D_EXTRACT_VARIADIC;
360
+ if (argc != 10) r_raise("Ruby2D::Ext.draw_ellipse expects 10 args, got %d", (int)argc);
361
+
362
+ R2D_DrawEllipse(
363
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
364
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]),
365
+ NUM2DBL(argv[4]), NUM2INT(argv[5]),
366
+ NUM2DBL(argv[6]), NUM2DBL(argv[7]), NUM2DBL(argv[8]), NUM2DBL(argv[9])
367
+ );
368
+
369
+ return R_NIL;
370
+ }
371
+
372
+
373
+ /*
374
+ * Ruby2D::Ext.stroke_ellipse(x, y, xradius, yradius, angle, sectors, stroke_width, r, g, b, a)
375
+ */
376
+ R_VAL ruby2d_ext_stroke_ellipse(RUBY2D_METHOD_ARGS_VARIADIC) {
377
+ RUBY2D_EXTRACT_VARIADIC;
378
+ if (argc != 11) r_raise("Ruby2D::Ext.stroke_ellipse expects 11 args, got %d", (int)argc);
379
+
380
+ R2D_StrokeEllipse(
381
+ NUM2DBL(argv[0]), NUM2DBL(argv[1]),
382
+ NUM2DBL(argv[2]), NUM2DBL(argv[3]),
383
+ NUM2DBL(argv[4]), NUM2INT(argv[5]), NUM2DBL(argv[6]),
384
+ NUM2DBL(argv[7]), NUM2DBL(argv[8]), NUM2DBL(argv[9]), NUM2DBL(argv[10])
385
+ );
386
+
387
+ return R_NIL;
388
+ }
389
+
390
+
391
+ // Variadic shape bindings (Polygon, Polyline) /////////////////////////////////
392
+
393
+
394
+ /*
395
+ * Ruby2D::Ext.draw_polygon(verts, pv_colors)
396
+ *
397
+ * verts — flat Array [x1, y1, x2, y2, ...] of length 2n
398
+ * pv_colors — flat Array [r1, g1, b1, a1, r2, ...] of length 4n
399
+ *
400
+ * Vertex count is inferred from verts.length / 2. n must be >= 3.
401
+ */
402
+ R_VAL ruby2d_ext_draw_polygon(RUBY2D_METHOD_ARGS_VARIADIC) {
403
+ RUBY2D_EXTRACT_VARIADIC;
404
+ if (argc != 2) r_raise("Ruby2D::Ext.draw_polygon expects 2 args, got %d", (int)argc);
405
+
406
+ R_VAL verts_ary = argv[0];
407
+ R_VAL colors_ary = argv[1];
408
+
409
+ int n = (int)(r_ary_len(verts_ary) / 2);
410
+ if (n < 3) return R_NIL;
411
+
412
+ // Guard the colors array length before the read loop: a short array would
413
+ // make r_ary_entry return nil and NUM2DBL(nil) error (hard-abort on mruby).
414
+ if ((int)r_ary_len(colors_ary) < n * 4)
415
+ r_raise("Ruby2D::Ext.draw_polygon: %d color values for %d vertices (need %d)",
416
+ (int)r_ary_len(colors_ary), n, n * 4);
417
+
418
+ // Most polygons are small, so serve the marshaling buffers from the stack and
419
+ // fall back to the heap only past the threshold — no malloc/free per frame.
420
+ float pts_stack[R2D_STROKE_STACK_N * 2];
421
+ float colors_stack[R2D_STROKE_STACK_N * 4];
422
+ float *pts, *colors;
423
+ bool heap = n > R2D_STROKE_STACK_N;
424
+
425
+ if (heap) {
426
+ pts = (float *)malloc(n * 2 * sizeof(float));
427
+ colors = (float *)malloc(n * 4 * sizeof(float));
428
+ if (!pts || !colors) { free(pts); free(colors); return R_NIL; }
429
+ } else {
430
+ pts = pts_stack;
431
+ colors = colors_stack;
432
+ }
433
+
434
+ for (int i = 0; i < n * 2; i++) pts[i] = NUM2DBL(r_ary_entry(verts_ary, i));
435
+ for (int i = 0; i < n * 4; i++) colors[i] = NUM2DBL(r_ary_entry(colors_ary, i));
436
+
437
+ R2D_DrawPolygon(pts, n, colors, 0, 0, 0, 0);
438
+
439
+ if (heap) { free(colors); free(pts); }
440
+ return R_NIL;
441
+ }
442
+
443
+
444
+ /*
445
+ * Ruby2D::Ext.stroke_path(verts, stroke_width, pv_colors, closed)
446
+ *
447
+ * verts — flat Array [x1, y1, x2, y2, ...] of length 2n
448
+ * stroke_width — Float
449
+ * pv_colors — flat Array [r1, g1, b1, a1, r2, ...] of length 4n
450
+ * closed — truthy → close the path back to vertex 0
451
+ *
452
+ * Used by Polygon (closed = true) and Polyline (closed varies).
453
+ */
454
+ R_VAL ruby2d_ext_stroke_path(RUBY2D_METHOD_ARGS_VARIADIC) {
455
+ RUBY2D_EXTRACT_VARIADIC;
456
+ if (argc != 4) r_raise("Ruby2D::Ext.stroke_path expects 4 args, got %d", (int)argc);
457
+
458
+ R_VAL verts_ary = argv[0];
459
+ float sw = NUM2DBL(argv[1]);
460
+ R_VAL colors_ary = argv[2];
461
+ int closed = r_test(argv[3]) ? 1 : 0;
462
+
463
+ int n = (int)(r_ary_len(verts_ary) / 2);
464
+ if (n < 2 || sw <= 0.0f) return R_NIL;
465
+
466
+ // Guard the colors array length before the read loop: a short array would
467
+ // make r_ary_entry return nil and NUM2DBL(nil) error (hard-abort on mruby).
468
+ if ((int)r_ary_len(colors_ary) < n * 4)
469
+ r_raise("Ruby2D::Ext.stroke_path: %d color values for %d vertices (need %d)",
470
+ (int)r_ary_len(colors_ary), n, n * 4);
471
+
472
+ // Most paths are small, so serve the marshaling buffers from the stack and
473
+ // fall back to the heap only past the threshold — no malloc/free per frame.
474
+ float pts_stack[R2D_STROKE_STACK_N * 2];
475
+ float colors_stack[R2D_STROKE_STACK_N * 4];
476
+ float *pts, *colors;
477
+ bool heap = n > R2D_STROKE_STACK_N;
478
+
479
+ if (heap) {
480
+ pts = (float *)malloc(n * 2 * sizeof(float));
481
+ colors = (float *)malloc(n * 4 * sizeof(float));
482
+ if (!pts || !colors) { free(pts); free(colors); return R_NIL; }
483
+ } else {
484
+ pts = pts_stack;
485
+ colors = colors_stack;
486
+ }
487
+
488
+ for (int i = 0; i < n * 2; i++) pts[i] = NUM2DBL(r_ary_entry(verts_ary, i));
489
+ for (int i = 0; i < n * 4; i++) colors[i] = NUM2DBL(r_ary_entry(colors_ary, i));
490
+
491
+ R2D_StrokePath(pts, n, closed, sw, R2D_MITER_LIMIT, colors);
492
+
493
+ if (heap) { free(colors); free(pts); }
494
+ return R_NIL;
495
+ }
496
+
497
+
498
+ /*
499
+ * Initialize
500
+ */
501
+ void R2D_Ext_Init() {
502
+ ruby2d_ext_module = r_define_module_under(ruby2d_module, "Ext");
503
+
504
+ // Shared ivar IDs — see declarations above.
505
+ id_x = r_id("@x");
506
+ id_y = r_id("@y");
507
+ id_width = r_id("@width");
508
+ id_height = r_id("@height");
509
+ id_rotate = r_id("@rotate");
510
+ id_color = r_id("@color");
511
+ id_r = r_id("@r");
512
+ id_g = r_id("@g");
513
+ id_b = r_id("@b");
514
+ id_a = r_id("@a");
515
+ id_ext_image = r_id("@ext_image");
516
+ id_ext_text = r_id("@ext_text");
517
+ id_path = r_id("@path");
518
+ id_content = r_id("@content");
519
+ id_viewport_width = r_id("@viewport_width");
520
+ id_viewport_height = r_id("@viewport_height");
521
+
522
+ // Fixed-arity shape bindings
523
+ r_define_class_method(ruby2d_ext_module, "draw_triangle", ruby2d_ext_draw_triangle, r_args_variadic);
524
+ r_define_class_method(ruby2d_ext_module, "draw_triangle_uniform", ruby2d_ext_draw_triangle_uniform, r_args_variadic);
525
+ r_define_class_method(ruby2d_ext_module, "stroke_triangle", ruby2d_ext_stroke_triangle, r_args_variadic);
526
+ r_define_class_method(ruby2d_ext_module, "stroke_triangle_uniform", ruby2d_ext_stroke_triangle_uniform, r_args_variadic);
527
+ r_define_class_method(ruby2d_ext_module, "draw_quad", ruby2d_ext_draw_quad, r_args_variadic);
528
+ r_define_class_method(ruby2d_ext_module, "draw_quad_uniform", ruby2d_ext_draw_quad_uniform, r_args_variadic);
529
+ r_define_class_method(ruby2d_ext_module, "stroke_quad", ruby2d_ext_stroke_quad, r_args_variadic);
530
+ r_define_class_method(ruby2d_ext_module, "stroke_quad_uniform", ruby2d_ext_stroke_quad_uniform, r_args_variadic);
531
+ r_define_class_method(ruby2d_ext_module, "draw_line", ruby2d_ext_draw_line, r_args_variadic);
532
+ r_define_class_method(ruby2d_ext_module, "draw_dashed_line", ruby2d_ext_draw_dashed_line, r_args_variadic);
533
+ r_define_class_method(ruby2d_ext_module, "draw_circle", ruby2d_ext_draw_circle, r_args_variadic);
534
+ r_define_class_method(ruby2d_ext_module, "stroke_circle", ruby2d_ext_stroke_circle, r_args_variadic);
535
+ r_define_class_method(ruby2d_ext_module, "draw_ellipse", ruby2d_ext_draw_ellipse, r_args_variadic);
536
+ r_define_class_method(ruby2d_ext_module, "stroke_ellipse", ruby2d_ext_stroke_ellipse, r_args_variadic);
537
+
538
+ // Variadic shape bindings
539
+ r_define_class_method(ruby2d_ext_module, "draw_polygon", ruby2d_ext_draw_polygon, r_args_variadic);
540
+ r_define_class_method(ruby2d_ext_module, "stroke_path", ruby2d_ext_stroke_path, r_args_variadic);
541
+ }