ruby2d 0.12.1 → 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 (620) 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 -443
  285. data/assets/app.icns +0 -0
  286. data/assets/include/GL/glew.h +0 -26427
  287. data/assets/include/GLES2/gl2.h +0 -656
  288. data/assets/include/GLES2/gl2ext.h +0 -3949
  289. data/assets/include/GLES2/gl2ext_angle.h +0 -701
  290. data/assets/include/GLES2/gl2platform.h +0 -27
  291. data/assets/include/GLES3/gl3.h +0 -1192
  292. data/assets/include/GLES3/gl31.h +0 -1507
  293. data/assets/include/GLES3/gl32.h +0 -1808
  294. data/assets/include/GLES3/gl3platform.h +0 -27
  295. data/assets/include/KHR/khrplatform.h +0 -290
  296. data/assets/include/SDL2/SDL.h +0 -233
  297. data/assets/include/SDL2/SDL_assert.h +0 -326
  298. data/assets/include/SDL2/SDL_atomic.h +0 -415
  299. data/assets/include/SDL2/SDL_audio.h +0 -1500
  300. data/assets/include/SDL2/SDL_clipboard.h +0 -141
  301. data/assets/include/SDL2/SDL_config.h +0 -61
  302. data/assets/include/SDL2/SDL_config_android.h +0 -194
  303. data/assets/include/SDL2/SDL_config_emscripten.h +0 -218
  304. data/assets/include/SDL2/SDL_config_iphoneos.h +0 -217
  305. data/assets/include/SDL2/SDL_config_macosx.h +0 -277
  306. data/assets/include/SDL2/SDL_config_minimal.h +0 -95
  307. data/assets/include/SDL2/SDL_config_ngage.h +0 -89
  308. data/assets/include/SDL2/SDL_config_os2.h +0 -207
  309. data/assets/include/SDL2/SDL_config_pandora.h +0 -141
  310. data/assets/include/SDL2/SDL_config_windows.h +0 -331
  311. data/assets/include/SDL2/SDL_config_wingdk.h +0 -253
  312. data/assets/include/SDL2/SDL_config_winrt.h +0 -220
  313. data/assets/include/SDL2/SDL_config_xbox.h +0 -235
  314. data/assets/include/SDL2/SDL_cpuinfo.h +0 -594
  315. data/assets/include/SDL2/SDL_endian.h +0 -348
  316. data/assets/include/SDL2/SDL_error.h +0 -163
  317. data/assets/include/SDL2/SDL_events.h +0 -1166
  318. data/assets/include/SDL2/SDL_filesystem.h +0 -149
  319. data/assets/include/SDL2/SDL_gamecontroller.h +0 -1074
  320. data/assets/include/SDL2/SDL_gesture.h +0 -117
  321. data/assets/include/SDL2/SDL_guid.h +0 -100
  322. data/assets/include/SDL2/SDL_haptic.h +0 -1341
  323. data/assets/include/SDL2/SDL_hidapi.h +0 -451
  324. data/assets/include/SDL2/SDL_hints.h +0 -2569
  325. data/assets/include/SDL2/SDL_image.h +0 -2173
  326. data/assets/include/SDL2/SDL_joystick.h +0 -1066
  327. data/assets/include/SDL2/SDL_keyboard.h +0 -353
  328. data/assets/include/SDL2/SDL_keycode.h +0 -358
  329. data/assets/include/SDL2/SDL_loadso.h +0 -115
  330. data/assets/include/SDL2/SDL_log.h +0 -404
  331. data/assets/include/SDL2/SDL_main.h +0 -275
  332. data/assets/include/SDL2/SDL_mixer.h +0 -2784
  333. data/assets/include/SDL2/SDL_mouse.h +0 -465
  334. data/assets/include/SDL2/SDL_mutex.h +0 -471
  335. data/assets/include/SDL2/SDL_name.h +0 -33
  336. data/assets/include/SDL2/SDL_pixels.h +0 -644
  337. data/assets/include/SDL2/SDL_platform.h +0 -261
  338. data/assets/include/SDL2/SDL_quit.h +0 -58
  339. data/assets/include/SDL2/SDL_rect.h +0 -376
  340. data/assets/include/SDL2/SDL_render.h +0 -1919
  341. data/assets/include/SDL2/SDL_revision.h +0 -6
  342. data/assets/include/SDL2/SDL_rwops.h +0 -841
  343. data/assets/include/SDL2/SDL_sensor.h +0 -322
  344. data/assets/include/SDL2/SDL_shape.h +0 -155
  345. data/assets/include/SDL2/SDL_stdinc.h +0 -830
  346. data/assets/include/SDL2/SDL_surface.h +0 -997
  347. data/assets/include/SDL2/SDL_system.h +0 -623
  348. data/assets/include/SDL2/SDL_syswm.h +0 -386
  349. data/assets/include/SDL2/SDL_test_images.h +0 -78
  350. data/assets/include/SDL2/SDL_test_random.h +0 -115
  351. data/assets/include/SDL2/SDL_thread.h +0 -464
  352. data/assets/include/SDL2/SDL_timer.h +0 -222
  353. data/assets/include/SDL2/SDL_touch.h +0 -150
  354. data/assets/include/SDL2/SDL_ttf.h +0 -2316
  355. data/assets/include/SDL2/SDL_types.h +0 -29
  356. data/assets/include/SDL2/SDL_version.h +0 -204
  357. data/assets/include/SDL2/SDL_video.h +0 -2150
  358. data/assets/include/SDL2/SDL_vulkan.h +0 -215
  359. data/assets/include/SDL2/begin_code.h +0 -187
  360. data/assets/include/mruby/boxing_no.h +0 -58
  361. data/assets/include/mruby/class.h +0 -108
  362. data/assets/include/mruby/error.h +0 -147
  363. data/assets/include/mruby/gc.h +0 -94
  364. data/assets/include/mruby/irep.h +0 -147
  365. data/assets/include/mruby/khash.h +0 -284
  366. data/assets/include/mruby/object.h +0 -43
  367. data/assets/include/mruby/presym/disable.h +0 -70
  368. data/assets/include/mruby/presym/enable.h +0 -37
  369. data/assets/include/mruby/presym.h +0 -40
  370. data/assets/include/mruby/proc.h +0 -211
  371. data/assets/include/mruby/throw.h +0 -66
  372. data/assets/macos/universal/bin/mrbc +0 -0
  373. data/assets/macos/universal/lib/libFLAC.a +0 -0
  374. data/assets/macos/universal/lib/libSDL2.a +0 -0
  375. data/assets/macos/universal/lib/libSDL2_image.a +0 -0
  376. data/assets/macos/universal/lib/libSDL2_mixer.a +0 -0
  377. data/assets/macos/universal/lib/libSDL2_ttf.a +0 -0
  378. data/assets/macos/universal/lib/libavif.a +0 -0
  379. data/assets/macos/universal/lib/libbrotlicommon-static.a +0 -0
  380. data/assets/macos/universal/lib/libbrotlidec-static.a +0 -0
  381. data/assets/macos/universal/lib/libfreetype.a +0 -0
  382. data/assets/macos/universal/lib/libgraphite2.a +0 -0
  383. data/assets/macos/universal/lib/libharfbuzz.a +0 -0
  384. data/assets/macos/universal/lib/libhwy.a +0 -0
  385. data/assets/macos/universal/lib/libjpeg.a +0 -0
  386. data/assets/macos/universal/lib/libjxl.a +0 -0
  387. data/assets/macos/universal/lib/libmodplug.a +0 -0
  388. data/assets/macos/universal/lib/libmpg123.a +0 -0
  389. data/assets/macos/universal/lib/libmruby.a +0 -0
  390. data/assets/macos/universal/lib/libogg.a +0 -0
  391. data/assets/macos/universal/lib/libpng.a +0 -0
  392. data/assets/macos/universal/lib/libtiff.a +0 -0
  393. data/assets/macos/universal/lib/libvorbis.a +0 -0
  394. data/assets/macos/universal/lib/libvorbisfile.a +0 -0
  395. data/assets/macos/universal/lib/libwebp.a +0 -0
  396. data/assets/macos/universal/lib/libzstd.a +0 -0
  397. data/assets/test_media/README.md +0 -3
  398. data/assets/test_media/bitstream_vera/COPYRIGHT.txt +0 -124
  399. data/assets/test_media/bitstream_vera/vera.ttf +0 -0
  400. data/assets/test_media/boom.png +0 -0
  401. data/assets/test_media/coin.png +0 -0
  402. data/assets/test_media/colors.png +0 -0
  403. data/assets/test_media/controller.png +0 -0
  404. data/assets/test_media/dial.wav +0 -0
  405. data/assets/test_media/hero.png +0 -0
  406. data/assets/test_media/image.bmp +0 -0
  407. data/assets/test_media/image.jpg +0 -0
  408. data/assets/test_media/image.png +0 -0
  409. data/assets/test_media/music.flac +0 -0
  410. data/assets/test_media/music.mp3 +0 -0
  411. data/assets/test_media/music.ogg +0 -0
  412. data/assets/test_media/music.wav +0 -0
  413. data/assets/test_media/originals/boom.pxm +0 -0
  414. data/assets/test_media/originals/coin.pxm +0 -0
  415. data/assets/test_media/originals/controller.sketch +0 -0
  416. data/assets/test_media/originals/hero.pxm +0 -0
  417. data/assets/test_media/originals/image.pxm +0 -0
  418. data/assets/test_media/originals/music.caf +0 -0
  419. data/assets/test_media/originals/texture_atlas.pxm +0 -0
  420. data/assets/test_media/rondo_alla_turka.ogg +0 -0
  421. data/assets/test_media/sound.flac +0 -0
  422. data/assets/test_media/sound.mp3 +0 -0
  423. data/assets/test_media/sound.ogg +0 -0
  424. data/assets/test_media/sound.wav +0 -0
  425. data/assets/test_media/sprite_sheet.png +0 -0
  426. data/assets/test_media/texture_atlas.png +0 -0
  427. data/assets/wasm/libmruby.a +0 -0
  428. data/assets/windows/mingw-w64-ucrt-x86_64/bin/mrbc.exe +0 -0
  429. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libFLAC.a +0 -0
  430. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libLerc.a +0 -0
  431. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2.a +0 -0
  432. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_image.a +0 -0
  433. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_mixer.a +0 -0
  434. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libSDL2_ttf.a +0 -0
  435. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlicommon.a +0 -0
  436. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbrotlidec.a +0 -0
  437. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libbz2.a +0 -0
  438. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libdeflate.a +0 -0
  439. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libfreetype.a +0 -0
  440. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libglew32.a +0 -0
  441. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libgraphite2.a +0 -0
  442. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libharfbuzz.a +0 -0
  443. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libhwy.a +0 -0
  444. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjbig.a +0 -0
  445. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjpeg.a +0 -0
  446. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libjxl.a +0 -0
  447. data/assets/windows/mingw-w64-ucrt-x86_64/lib/liblzma.a +0 -0
  448. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmodplug.a +0 -0
  449. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmpg123.a +0 -0
  450. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libmruby.a +0 -0
  451. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libogg.a +0 -0
  452. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopus.a +0 -0
  453. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libopusfile.a +0 -0
  454. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libpng.a +0 -0
  455. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libsndfile.a +0 -0
  456. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libssp.a +0 -1
  457. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libstdc++.a +0 -0
  458. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libtiff.a +0 -0
  459. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbis.a +0 -0
  460. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libvorbisfile.a +0 -0
  461. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libwebp.a +0 -0
  462. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libz.a +0 -0
  463. data/assets/windows/mingw-w64-ucrt-x86_64/lib/libzstd.a +0 -0
  464. data/assets/windows/mingw-w64-x86_64/bin/mrbc.exe +0 -0
  465. data/assets/windows/mingw-w64-x86_64/lib/libFLAC.a +0 -0
  466. data/assets/windows/mingw-w64-x86_64/lib/libLerc.a +0 -0
  467. data/assets/windows/mingw-w64-x86_64/lib/libSDL2.a +0 -0
  468. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_image.a +0 -0
  469. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_mixer.a +0 -0
  470. data/assets/windows/mingw-w64-x86_64/lib/libSDL2_ttf.a +0 -0
  471. data/assets/windows/mingw-w64-x86_64/lib/libbrotlicommon.a +0 -0
  472. data/assets/windows/mingw-w64-x86_64/lib/libbrotlidec.a +0 -0
  473. data/assets/windows/mingw-w64-x86_64/lib/libbz2.a +0 -0
  474. data/assets/windows/mingw-w64-x86_64/lib/libdeflate.a +0 -0
  475. data/assets/windows/mingw-w64-x86_64/lib/libfreetype.a +0 -0
  476. data/assets/windows/mingw-w64-x86_64/lib/libglew32.a +0 -0
  477. data/assets/windows/mingw-w64-x86_64/lib/libgraphite2.a +0 -0
  478. data/assets/windows/mingw-w64-x86_64/lib/libharfbuzz.a +0 -0
  479. data/assets/windows/mingw-w64-x86_64/lib/libhwy.a +0 -0
  480. data/assets/windows/mingw-w64-x86_64/lib/libjbig.a +0 -0
  481. data/assets/windows/mingw-w64-x86_64/lib/libjpeg.a +0 -0
  482. data/assets/windows/mingw-w64-x86_64/lib/libjxl.a +0 -0
  483. data/assets/windows/mingw-w64-x86_64/lib/liblzma.a +0 -0
  484. data/assets/windows/mingw-w64-x86_64/lib/libmodplug.a +0 -0
  485. data/assets/windows/mingw-w64-x86_64/lib/libmpg123.a +0 -0
  486. data/assets/windows/mingw-w64-x86_64/lib/libmruby.a +0 -0
  487. data/assets/windows/mingw-w64-x86_64/lib/libogg.a +0 -0
  488. data/assets/windows/mingw-w64-x86_64/lib/libopus.a +0 -0
  489. data/assets/windows/mingw-w64-x86_64/lib/libopusfile.a +0 -0
  490. data/assets/windows/mingw-w64-x86_64/lib/libpng.a +0 -0
  491. data/assets/windows/mingw-w64-x86_64/lib/libsndfile.a +0 -0
  492. data/assets/windows/mingw-w64-x86_64/lib/libssp.a +0 -1
  493. data/assets/windows/mingw-w64-x86_64/lib/libstdc++.a +0 -0
  494. data/assets/windows/mingw-w64-x86_64/lib/libtiff.a +0 -0
  495. data/assets/windows/mingw-w64-x86_64/lib/libvorbis.a +0 -0
  496. data/assets/windows/mingw-w64-x86_64/lib/libvorbisfile.a +0 -0
  497. data/assets/windows/mingw-w64-x86_64/lib/libwebp.a +0 -0
  498. data/assets/windows/mingw-w64-x86_64/lib/libz.a +0 -0
  499. data/assets/windows/mingw-w64-x86_64/lib/libzstd.a +0 -0
  500. data/assets/xcode/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -98
  501. data/assets/xcode/ios/Assets.xcassets/Contents.json +0 -6
  502. data/assets/xcode/ios/Base.lproj/LaunchScreen.storyboard +0 -27
  503. data/assets/xcode/ios/Info.plist +0 -43
  504. data/assets/xcode/ios/MRuby.framework/Headers/mrbconf.h +0 -143
  505. data/assets/xcode/ios/MRuby.framework/Headers/mruby/array.h +0 -280
  506. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  507. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  508. data/assets/xcode/ios/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  509. data/assets/xcode/ios/MRuby.framework/Headers/mruby/class.h +0 -97
  510. data/assets/xcode/ios/MRuby.framework/Headers/mruby/common.h +0 -77
  511. data/assets/xcode/ios/MRuby.framework/Headers/mruby/compile.h +0 -195
  512. data/assets/xcode/ios/MRuby.framework/Headers/mruby/data.h +0 -75
  513. data/assets/xcode/ios/MRuby.framework/Headers/mruby/debug.h +0 -67
  514. data/assets/xcode/ios/MRuby.framework/Headers/mruby/dump.h +0 -196
  515. data/assets/xcode/ios/MRuby.framework/Headers/mruby/error.h +0 -75
  516. data/assets/xcode/ios/MRuby.framework/Headers/mruby/gc.h +0 -91
  517. data/assets/xcode/ios/MRuby.framework/Headers/mruby/hash.h +0 -215
  518. data/assets/xcode/ios/MRuby.framework/Headers/mruby/irep.h +0 -75
  519. data/assets/xcode/ios/MRuby.framework/Headers/mruby/istruct.h +0 -47
  520. data/assets/xcode/ios/MRuby.framework/Headers/mruby/khash.h +0 -274
  521. data/assets/xcode/ios/MRuby.framework/Headers/mruby/numeric.h +0 -161
  522. data/assets/xcode/ios/MRuby.framework/Headers/mruby/object.h +0 -44
  523. data/assets/xcode/ios/MRuby.framework/Headers/mruby/opcode.h +0 -69
  524. data/assets/xcode/ios/MRuby.framework/Headers/mruby/ops.h +0 -117
  525. data/assets/xcode/ios/MRuby.framework/Headers/mruby/proc.h +0 -131
  526. data/assets/xcode/ios/MRuby.framework/Headers/mruby/range.h +0 -49
  527. data/assets/xcode/ios/MRuby.framework/Headers/mruby/re.h +0 -16
  528. data/assets/xcode/ios/MRuby.framework/Headers/mruby/string.h +0 -444
  529. data/assets/xcode/ios/MRuby.framework/Headers/mruby/throw.h +0 -55
  530. data/assets/xcode/ios/MRuby.framework/Headers/mruby/value.h +0 -309
  531. data/assets/xcode/ios/MRuby.framework/Headers/mruby/variable.h +0 -136
  532. data/assets/xcode/ios/MRuby.framework/Headers/mruby/version.h +0 -110
  533. data/assets/xcode/ios/MRuby.framework/Headers/mruby.h +0 -1282
  534. data/assets/xcode/ios/MRuby.framework/Info.plist +0 -20
  535. data/assets/xcode/ios/MRuby.framework/MRuby +0 -0
  536. data/assets/xcode/ios/MyApp.xcodeproj/project.pbxproj +0 -368
  537. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  538. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  539. data/assets/xcode/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  540. data/assets/xcode/ios/main.c +0 -1
  541. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  542. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +0 -6
  543. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +0 -17
  544. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  545. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +0 -6
  546. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  547. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  548. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +0 -16
  549. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +0 -6
  550. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +0 -17
  551. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +0 -16
  552. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +0 -6
  553. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +0 -16
  554. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +0 -6
  555. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +0 -32
  556. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +0 -16
  557. data/assets/xcode/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +0 -16
  558. data/assets/xcode/tvos/Assets.xcassets/Contents.json +0 -6
  559. data/assets/xcode/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +0 -22
  560. data/assets/xcode/tvos/Info.plist +0 -30
  561. data/assets/xcode/tvos/MRuby.framework/Headers/mrbconf.h +0 -143
  562. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/array.h +0 -280
  563. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +0 -102
  564. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_no.h +0 -56
  565. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/boxing_word.h +0 -144
  566. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/class.h +0 -97
  567. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/common.h +0 -77
  568. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/compile.h +0 -195
  569. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/data.h +0 -75
  570. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/debug.h +0 -67
  571. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/dump.h +0 -196
  572. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/error.h +0 -75
  573. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/gc.h +0 -91
  574. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/hash.h +0 -215
  575. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/irep.h +0 -75
  576. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/istruct.h +0 -47
  577. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/khash.h +0 -274
  578. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/numeric.h +0 -161
  579. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/object.h +0 -44
  580. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/opcode.h +0 -69
  581. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/ops.h +0 -117
  582. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/proc.h +0 -131
  583. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/range.h +0 -49
  584. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/re.h +0 -16
  585. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/string.h +0 -444
  586. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/throw.h +0 -55
  587. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/value.h +0 -309
  588. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/variable.h +0 -136
  589. data/assets/xcode/tvos/MRuby.framework/Headers/mruby/version.h +0 -110
  590. data/assets/xcode/tvos/MRuby.framework/Headers/mruby.h +0 -1282
  591. data/assets/xcode/tvos/MRuby.framework/Info.plist +0 -20
  592. data/assets/xcode/tvos/MRuby.framework/MRuby +0 -0
  593. data/assets/xcode/tvos/MyApp.xcodeproj/project.pbxproj +0 -350
  594. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  595. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  596. data/assets/xcode/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +0 -30
  597. data/assets/xcode/tvos/main.c +0 -1
  598. data/ext/ruby2d/common.c +0 -185
  599. data/ext/ruby2d/controllers.c +0 -110
  600. data/ext/ruby2d/gl.c +0 -398
  601. data/ext/ruby2d/gl2.c +0 -86
  602. data/ext/ruby2d/gl3.c +0 -304
  603. data/ext/ruby2d/gles.c +0 -302
  604. data/ext/ruby2d/input.c +0 -48
  605. data/ext/ruby2d/music.c +0 -127
  606. data/ext/ruby2d/sound.c +0 -132
  607. data/lib/ruby2d/cli/console.rb +0 -65
  608. data/lib/ruby2d/cli/enable_console.rb +0 -7
  609. data/lib/ruby2d/cli/platform.rb +0 -17
  610. data/lib/ruby2d/music.rb +0 -77
  611. data/lib/ruby2d/pixel.rb +0 -18
  612. data/lib/ruby2d/pixmap.rb +0 -39
  613. data/lib/ruby2d/pixmap_atlas.rb +0 -56
  614. data/lib/ruby2d/sound.rb +0 -61
  615. data/lib/ruby2d/texture.rb +0 -38
  616. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2.h +0 -0
  617. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2ext.h +0 -0
  618. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_gl2platform.h +0 -0
  619. /data/assets/{include/SDL2 → platform/include/SDL3}/SDL_opengles2_khrplatform.h +0 -0
  620. /data/assets/{include → platform/include}/mruby/re.h +0 -0
data/ext/ruby2d/image.c CHANGED
@@ -2,57 +2,482 @@
2
2
 
3
3
  #include "ruby2d.h"
4
4
 
5
+ R2D_DEFINE_DATA_TYPE(R2D_Image);
5
6
 
6
- SDL_Surface *R2D_CreateImageSurface(const char *path) {
7
- R2D_Init();
7
+ // Image-specific ivar IDs. Shared ivar IDs (id_x, id_y, id_width, id_height,
8
+ // id_rotate, id_color, id_r, id_g, id_b, id_a, id_ext_image, id_path) live in
9
+ // ext.c; this file only caches what's unique to Image.
10
+ static R_ID id_clipped, id_clip_x, id_clip_y, id_clip_width, id_clip_height;
11
+ static R_ID id_orig_width, id_orig_height;
12
+ static R_ID id_source_width, id_source_height, id_trim_x, id_trim_y;
13
+ static R_ID id_user_rx, id_user_ry;
14
+ static R_ID id_flip;
15
+ static R_ID id_flip_horizontal, id_flip_vertical, id_flip_both;
16
+
17
+
18
+ /*
19
+ * Initialize — caches ivar IDs and registers Ruby2D::Ext image bindings.
20
+ * Bindings take the Image Ruby object as their first arg and read ivars off
21
+ * it; the C side reads ivars from that object via obj_* macros.
22
+ */
23
+ void R2D_Image_Init() {
24
+ id_orig_width = r_id("@orig_width");
25
+ id_orig_height = r_id("@orig_height");
26
+ id_clipped = r_id("@clipped");
27
+ id_clip_x = r_id("@clip_x");
28
+ id_clip_y = r_id("@clip_y");
29
+ id_clip_width = r_id("@clip_width");
30
+ id_clip_height = r_id("@clip_height");
31
+ id_source_width = r_id("@source_width");
32
+ id_source_height = r_id("@source_height");
33
+ id_trim_x = r_id("@trim_x");
34
+ id_trim_y = r_id("@trim_y");
35
+ id_user_rx = r_id("@_user_rx");
36
+ id_user_ry = r_id("@_user_ry");
37
+ id_flip = r_id("@flip");
38
+ id_flip_horizontal = r_id("horizontal");
39
+ id_flip_vertical = r_id("vertical");
40
+ id_flip_both = r_id("both");
41
+
42
+ r_define_class_method(ruby2d_ext_module, "image_create", ruby2d_ext_image_create, r_args_variadic);
43
+ r_define_class_method(ruby2d_ext_module, "image_draw", ruby2d_ext_image_draw, r_args_variadic);
44
+ r_define_class_method(ruby2d_ext_module, "image_draw_quads", ruby2d_ext_image_draw_quads, r_args_variadic);
45
+ r_define_class_method(ruby2d_ext_module, "image_resize", ruby2d_ext_image_resize, r_args_variadic);
46
+ }
47
+
48
+
49
+ // Case-insensitive check for the `.svg` extension on a path.
50
+ static bool path_is_svg(const char *path) {
51
+ if (!path) return false;
52
+ size_t len = strlen(path);
53
+ if (len < 4) return false;
54
+ const char *ext = path + len - 4;
55
+ return ext[0] == '.' &&
56
+ (ext[1] == 's' || ext[1] == 'S') &&
57
+ (ext[2] == 'v' || ext[2] == 'V') &&
58
+ (ext[3] == 'g' || ext[3] == 'G');
59
+ }
60
+
61
+
62
+ /*
63
+ * Ruby2D::Ext.image_create(image)
64
+ */
65
+ R_VAL ruby2d_ext_image_create(RUBY2D_METHOD_ARGS_VARIADIC) {
66
+ RUBY2D_EXTRACT_VARIADIC;
67
+ if (argc != 1) r_raise("Ruby2D::Ext.image_create expects 1 arg (image), got %d", (int)argc);
68
+ R_VAL obj = argv[0];
69
+
70
+ const char *path = obj_str(obj, id_path);
8
71
 
9
- // Check if image file exists
10
72
  if (!R2D_FileExists(path)) {
11
- R2D_Error("R2D_CreateImageSurface", "Image file `%s` not found", path);
12
- return NULL;
73
+ r_error("Image file `%s` not found", path);
74
+ return R_NIL;
13
75
  }
14
76
 
15
- // Load image from file as SDL_Surface
16
- SDL_Surface *surface = IMG_Load(path);
17
- if (surface != NULL) {
18
- int bits_per_color = surface->format->Amask == 0 ?
19
- surface->format->BitsPerPixel / 3 :
20
- surface->format->BitsPerPixel / 4;
77
+ R2D_Image *img = ALLOC(R2D_Image);
78
+ img->surface = NULL;
21
79
 
22
- if (bits_per_color < 8) {
23
- R2D_Log(R2D_WARN, "`%s` has less than 8 bits per color and will likely not render correctly", path, bits_per_color);
80
+ // SVGs rasterize at their intrinsic size via IMG_Load and then pixelate when
81
+ // drawn larger. If the user supplied a width and height, rasterize at the
82
+ // requested size so small upscales and rotations stay crisp; downscales to
83
+ // the user's size are handled by SDL at draw time.
84
+ if (path_is_svg(path)) {
85
+ R_VAL w_val = r_ivar_get(obj, id_width);
86
+ R_VAL h_val = r_ivar_get(obj, id_height);
87
+ if (r_test(w_val) && r_test(h_val)) {
88
+ int w = (int)NUM2DBL(w_val);
89
+ int h = (int)NUM2DBL(h_val);
90
+ if (w > 0 && h > 0) {
91
+ SDL_IOStream *io = SDL_IOFromFile(path, "rb");
92
+ if (io) {
93
+ img->surface = IMG_LoadSizedSVG_IO(io, w * 2, h * 2);
94
+ SDL_CloseIO(io);
95
+ }
96
+ }
24
97
  }
25
98
  }
26
- return surface;
99
+
100
+ if (!img->surface) img->surface = IMG_Load(path);
101
+ if (!img->surface) {
102
+ xfree(img);
103
+ r_error("Failed to load image `%s`: %s", path, SDL_GetError());
104
+ return R_NIL;
105
+ }
106
+
107
+ img->texture = NULL;
108
+
109
+ obj_set_struct(obj, id_ext_image, R2D_Image, img);
110
+ obj_set_int(obj, id_width, img->surface->w);
111
+ obj_set_int(obj, id_height, img->surface->h);
112
+ obj_set_int(obj, id_orig_width, img->surface->w);
113
+ obj_set_int(obj, id_orig_height, img->surface->h);
114
+ obj_set_bool(obj, id_clipped, false);
115
+ obj_set_float(obj, id_clip_x, 0.0);
116
+ obj_set_float(obj, id_clip_y, 0.0);
117
+ obj_set_int(obj, id_clip_width, img->surface->w);
118
+ obj_set_int(obj, id_clip_height, img->surface->h);
119
+ obj_set_int(obj, id_source_width, img->surface->w);
120
+ obj_set_int(obj, id_source_height, img->surface->h);
121
+ obj_set_int(obj, id_trim_x, 0);
122
+ obj_set_int(obj, id_trim_y, 0);
123
+ obj_set_float(obj, id_rotate, 0.0);
124
+
125
+ return R_TRUE;
27
126
  }
28
127
 
29
- void R2D_ImageConvertToRGB(SDL_Surface *surface) {
30
- Uint32 r = surface->format->Rmask;
31
- Uint32 g = surface->format->Gmask;
32
- Uint32 a = surface->format->Amask;
33
-
34
- if (r&0xFF000000 || r&0xFF0000) {
35
- char *p = (char *)surface->pixels;
36
- int bpp = surface->format->BytesPerPixel;
37
- int w = surface->w;
38
- int h = surface->h;
39
- char tmp;
40
- for (int i = 0; i < bpp * w * h; i += bpp) {
41
- if (a&0xFF) {
42
- tmp = p[i];
43
- p[i] = p[i+3];
44
- p[i+3] = tmp;
45
- }
46
- if (g&0xFF0000) {
47
- tmp = p[i+1];
48
- p[i+1] = p[i+2];
49
- p[i+2] = tmp;
50
- }
51
- if (r&0xFF0000) {
52
- tmp = p[i];
53
- p[i] = p[i+2];
54
- p[i+2] = tmp;
55
- }
128
+
129
+ /*
130
+ * Ruby2D::Ext.image_draw(image)
131
+ */
132
+ R_VAL ruby2d_ext_image_draw(RUBY2D_METHOD_ARGS_VARIADIC) {
133
+ RUBY2D_EXTRACT_VARIADIC;
134
+ if (argc != 1) r_raise("Ruby2D::Ext.image_draw expects 1 arg (image), got %d", (int)argc);
135
+ R_VAL obj = argv[0];
136
+
137
+ R2D_Image *img;
138
+ obj_struct(obj, id_ext_image, R2D_Image, img);
139
+
140
+ // Create texture from surface if not already done
141
+ if (img->texture == NULL) {
142
+ img->texture = SDL_CreateTextureFromSurface(R2D_GetRenderer(), img->surface);
143
+ if (!img->texture) {
144
+ r_raise("SDL_CreateTextureFromSurface failed: %s", SDL_GetError());
145
+ return R_NIL;
146
+ }
147
+ SDL_SetTextureBlendMode(img->texture, SDL_BLENDMODE_BLEND);
148
+ // Keep the surface alive for canvas blitting; R2D_Image_free handles cleanup
149
+ }
150
+
151
+ // Determine flip mode early — affects trim-offset mirroring below.
152
+ SDL_FlipMode flip_mode = SDL_FLIP_NONE;
153
+ R_VAL flip_val = r_ivar_get(obj, id_flip);
154
+ if (r_test(flip_val)) {
155
+ R_ID flip_sym = r_sym_to_id(flip_val);
156
+ if (flip_sym == id_flip_horizontal)
157
+ flip_mode = SDL_FLIP_HORIZONTAL;
158
+ else if (flip_sym == id_flip_vertical)
159
+ flip_mode = SDL_FLIP_VERTICAL;
160
+ else if (flip_sym == id_flip_both)
161
+ flip_mode = (SDL_FlipMode)(SDL_FLIP_HORIZONTAL | SDL_FLIP_VERTICAL);
162
+ }
163
+
164
+ float img_x = obj_float(obj, id_x);
165
+ float img_y = obj_float(obj, id_y);
166
+ float img_w = obj_float(obj, id_width);
167
+ float img_h = obj_float(obj, id_height);
168
+
169
+ SDL_FRect dst_rect;
170
+ SDL_FRect clip_rect;
171
+ SDL_FRect *src_rect = NULL;
172
+
173
+ if (obj_bool(obj, id_clipped)) {
174
+ // Source rect inside the texture, clamped to the area that actually
175
+ // remains after the clip offset. The public accessors (`clip_x=`,
176
+ // `clip_width=`, etc.) are unvalidated, so a zero-size, negative, or
177
+ // past-the-edge clip can reach here; an offset-aware clamp keeps the
178
+ // src rect inside the texture and the scale math finite.
179
+ int orig_width = obj_int(obj, id_orig_width);
180
+ int orig_height = obj_int(obj, id_orig_height);
181
+ int clip_w_int = obj_int(obj, id_clip_width);
182
+ int clip_h_int = obj_int(obj, id_clip_height);
183
+
184
+ int clip_x = (int)obj_float(obj, id_clip_x);
185
+ int clip_y = (int)obj_float(obj, id_clip_y);
186
+ if (clip_x < 0) clip_x = 0;
187
+ if (clip_x > orig_width) clip_x = orig_width;
188
+ if (clip_y < 0) clip_y = 0;
189
+ if (clip_y > orig_height) clip_y = orig_height;
190
+
191
+ int avail_w = orig_width - clip_x;
192
+ int avail_h = orig_height - clip_y;
193
+ int clipped_w = clip_w_int > avail_w ? avail_w : clip_w_int;
194
+ int clipped_h = clip_h_int > avail_h ? avail_h : clip_h_int;
195
+
196
+ // Degenerate or fully out-of-bounds clip: nothing to draw. Bail before
197
+ // the source_w/source_h division so it can't produce Inf/NaN geometry.
198
+ if (clipped_w <= 0 || clipped_h <= 0) return R_TRUE;
199
+
200
+ clip_rect.x = clip_x;
201
+ clip_rect.y = clip_y;
202
+ clip_rect.w = clipped_w;
203
+ clip_rect.h = clipped_h;
204
+ src_rect = &clip_rect;
205
+
206
+ // Trim metadata: `source_width`/`source_height` is the original logical
207
+ // frame size, `trim_x`/`trim_y` is where the packed pixels live within
208
+ // it. With the no-trim defaults (source = clip, trim = 0), the math
209
+ // collapses to drawing the clip rect at (img_x, img_y).
210
+ int source_w = obj_int(obj, id_source_width);
211
+ int source_h = obj_int(obj, id_source_height);
212
+ int trim_x = obj_int(obj, id_trim_x);
213
+ int trim_y = obj_int(obj, id_trim_y);
214
+ if (source_w <= 0) source_w = clipped_w;
215
+ if (source_h <= 0) source_h = clipped_h;
216
+
217
+ // Mirror the trim offset for flipped sprites so the pose flips around
218
+ // the original frame's center, not around the trimmed rect's center.
219
+ if (flip_mode & SDL_FLIP_HORIZONTAL) trim_x = source_w - trim_x - clipped_w;
220
+ if (flip_mode & SDL_FLIP_VERTICAL) trim_y = source_h - trim_y - clipped_h;
221
+
222
+ float scale_x = img_w / (float)source_w;
223
+ float scale_y = img_h / (float)source_h;
224
+
225
+ dst_rect.x = img_x + trim_x * scale_x;
226
+ dst_rect.y = img_y + trim_y * scale_y;
227
+ dst_rect.w = clipped_w * scale_x;
228
+ dst_rect.h = clipped_h * scale_y;
229
+ } else {
230
+ dst_rect.x = img_x;
231
+ dst_rect.y = img_y;
232
+ dst_rect.w = img_w;
233
+ dst_rect.h = img_h;
234
+ }
235
+
236
+ // Read color directly from the Color object
237
+ R_VAL color_obj = r_ivar_get(obj, id_color);
238
+ SDL_SetTextureColorModFloat(img->texture,
239
+ NUM2DBL(r_ivar_get(color_obj, id_r)),
240
+ NUM2DBL(r_ivar_get(color_obj, id_g)),
241
+ NUM2DBL(r_ivar_get(color_obj, id_b))
242
+ );
243
+ SDL_SetTextureAlphaModFloat(img->texture, NUM2DBL(r_ivar_get(color_obj, id_a)));
244
+
245
+ // Rotation center: world coords minus dst_rect's top-left. With trim,
246
+ // the dst rect shifts by (trim_x*scale_x, trim_y*scale_y), so the
247
+ // center-relative offset shifts by the same amount.
248
+ R_VAL urx = r_ivar_get(obj, id_user_rx);
249
+ R_VAL ury = r_ivar_get(obj, id_user_ry);
250
+ float center_rx = r_test(urx) ? NUM2DBL(urx) : img_x + img_w / 2.0f;
251
+ float center_ry = r_test(ury) ? NUM2DBL(ury) : img_y + img_h / 2.0f;
252
+
253
+ SDL_FPoint center = {
254
+ center_rx - dst_rect.x,
255
+ center_ry - dst_rect.y
256
+ };
257
+
258
+ R2D_CheckSDL(SDL_RenderTextureRotated(
259
+ R2D_GetRenderer(),
260
+ img->texture,
261
+ src_rect,
262
+ &dst_rect,
263
+ obj_float(obj, id_rotate),
264
+ &center,
265
+ flip_mode
266
+ ), "SDL_RenderTextureRotated");
267
+
268
+ return R_TRUE;
269
+ }
270
+
271
+
272
+ // Grow-only scratch buffers for image_draw_quads, reused across every call so a
273
+ // per-frame tileset draw costs no malloc/free. Capacity is measured in quads:
274
+ // quad_capacity quads back quad_capacity*4 vertices and quad_capacity*6 indices.
275
+ // Safe as a single shared slot because the render path is single-threaded and
276
+ // each call fully repopulates the vertices before drawing and retains nothing
277
+ // after. Never freed — bounded by the largest tileset ever drawn, matching the
278
+ // engine's no-teardown design. The index buffer is a pure function of quad
279
+ // position (i*4 + {0,1,2,0,2,3}), so it is filled only for the newly grown
280
+ // region and left untouched on every steady-state frame.
281
+ static SDL_Vertex *quad_vertices = NULL;
282
+ static int *quad_indices = NULL;
283
+ static int quad_capacity = 0;
284
+
285
+ /*
286
+ * Ruby2D::Ext.image_draw_quads
287
+ *
288
+ * Draws a batch of textured quads from one atlas texture in a single
289
+ * SDL_RenderGeometry call. Used by Tileset to render every placed tile at once
290
+ * rather than one draw call per tile.
291
+ * coords_batch - Array of N coordinate arrays, each 8 floats
292
+ * [x1,y1, x2,y2, x3,y3, x4,y4]
293
+ * tex_coords_batch - Array of N texture-coordinate arrays, each 8 floats
294
+ * [u1,v1, u2,v2, u3,v3, u4,v4], paired with coords_batch
295
+ * color - Color object with @r, @g, @b, @a, applied to every quad
296
+ *
297
+ * The vertex buffer is fully repopulated on every call, even when no placement
298
+ * changed since the last frame. Don't add a dirty-flag skip: an A/B measured it
299
+ * ~9% slower on tiles_static (299 -> 272 fps) because the per-frame CPU write
300
+ * keeps the buffer hot in cache for SDL_RenderGeometry's immediate read — the
301
+ * "wasted" marshaling is prefetching. See "Tried and rejected" in
302
+ * benchmark/README.md.
303
+ */
304
+ R_VAL ruby2d_ext_image_draw_quads(RUBY2D_METHOD_ARGS_VARIADIC) {
305
+ RUBY2D_EXTRACT_VARIADIC;
306
+ if (argc != 4) r_raise("Ruby2D::Ext.image_draw_quads expects 4 args (image, coords_batch, tex_coords_batch, color), got %d", (int)argc);
307
+ R_VAL obj = argv[0];
308
+ R_VAL coords_batch = argv[1];
309
+ R_VAL tex_coords_batch = argv[2];
310
+ R_VAL color_obj = argv[3];
311
+
312
+ R2D_Image *img;
313
+ obj_struct(obj, id_ext_image, R2D_Image, img);
314
+
315
+ int count = (int)r_ary_len(coords_batch);
316
+ if (count <= 0) return R_TRUE;
317
+
318
+ // Create texture from surface if not already done
319
+ if (img->texture == NULL) {
320
+ img->texture = SDL_CreateTextureFromSurface(
321
+ R2D_GetRenderer(), img->surface
322
+ );
323
+ if (!img->texture) {
324
+ r_raise("SDL_CreateTextureFromSurface failed: %s", SDL_GetError());
325
+ return R_NIL;
56
326
  }
327
+ SDL_SetTextureBlendMode(img->texture, SDL_BLENDMODE_BLEND);
328
+ }
329
+
330
+ // Extract color components (a single tint applied to every quad)
331
+ float cr = NUM2DBL(r_ivar_get(color_obj, id_r));
332
+ float cg = NUM2DBL(r_ivar_get(color_obj, id_g));
333
+ float cb = NUM2DBL(r_ivar_get(color_obj, id_b));
334
+ float ca = NUM2DBL(r_ivar_get(color_obj, id_a));
335
+
336
+ // One batch: 4 vertices and 6 indices per quad, drawn in a single call. Grow
337
+ // the shared scratch buffers if this batch is the largest seen so far; on the
338
+ // steady-state frame (count <= quad_capacity) this is a no-op.
339
+ if (count > quad_capacity) {
340
+ SDL_Vertex *nv = (SDL_Vertex *)realloc(quad_vertices, (size_t)count * 4 * sizeof(SDL_Vertex));
341
+ if (nv) quad_vertices = nv;
342
+ int *ni = (int *)realloc(quad_indices, (size_t)count * 6 * sizeof(int));
343
+ if (ni) quad_indices = ni;
344
+ if (!nv || !ni) {
345
+ r_raise("Ruby2D::Ext.image_draw_quads failed to allocate geometry for %d quads", count);
346
+ return R_NIL;
347
+ }
348
+ // Indices are address-independent and realloc preserves the prefix, so fill
349
+ // only the freshly grown quads [quad_capacity, count).
350
+ for (int i = quad_capacity; i < count; i++) {
351
+ int v = i * 4;
352
+ int x = i * 6;
353
+ quad_indices[x + 0] = v + 0;
354
+ quad_indices[x + 1] = v + 1;
355
+ quad_indices[x + 2] = v + 2;
356
+ quad_indices[x + 3] = v + 0;
357
+ quad_indices[x + 4] = v + 2;
358
+ quad_indices[x + 5] = v + 3;
359
+ }
360
+ quad_capacity = count;
361
+ }
362
+
363
+ for (int i = 0; i < count; i++) {
364
+ R_VAL coords = r_ary_entry(coords_batch, i);
365
+ R_VAL tex = r_ary_entry(tex_coords_batch, i);
366
+ int v = i * 4;
367
+
368
+ quad_vertices[v + 0] = (SDL_Vertex){
369
+ .position = { NUM2DBL(r_ary_entry(coords, 0)), NUM2DBL(r_ary_entry(coords, 1)) },
370
+ .color = { cr, cg, cb, ca },
371
+ .tex_coord = { NUM2DBL(r_ary_entry(tex, 0)), NUM2DBL(r_ary_entry(tex, 1)) }
372
+ };
373
+ quad_vertices[v + 1] = (SDL_Vertex){
374
+ .position = { NUM2DBL(r_ary_entry(coords, 2)), NUM2DBL(r_ary_entry(coords, 3)) },
375
+ .color = { cr, cg, cb, ca },
376
+ .tex_coord = { NUM2DBL(r_ary_entry(tex, 2)), NUM2DBL(r_ary_entry(tex, 3)) }
377
+ };
378
+ quad_vertices[v + 2] = (SDL_Vertex){
379
+ .position = { NUM2DBL(r_ary_entry(coords, 4)), NUM2DBL(r_ary_entry(coords, 5)) },
380
+ .color = { cr, cg, cb, ca },
381
+ .tex_coord = { NUM2DBL(r_ary_entry(tex, 4)), NUM2DBL(r_ary_entry(tex, 5)) }
382
+ };
383
+ quad_vertices[v + 3] = (SDL_Vertex){
384
+ .position = { NUM2DBL(r_ary_entry(coords, 6)), NUM2DBL(r_ary_entry(coords, 7)) },
385
+ .color = { cr, cg, cb, ca },
386
+ .tex_coord = { NUM2DBL(r_ary_entry(tex, 6)), NUM2DBL(r_ary_entry(tex, 7)) }
387
+ };
388
+ }
389
+
390
+ bool ok = SDL_RenderGeometry(R2D_GetRenderer(), img->texture,
391
+ quad_vertices, count * 4, quad_indices, count * 6);
392
+ R2D_CheckSDL(ok, "SDL_RenderGeometry");
393
+
394
+ return R_TRUE;
395
+ }
396
+
397
+
398
+ /*
399
+ * Ruby2D::Image#ext_resize
400
+ *
401
+ * Re-rasterizes the source at a new pixel size. SVG sources reload via
402
+ * IMG_LoadSizedSVG_IO at 2× the requested size; raster sources reload and
403
+ * resample via SDL_ScaleSurface. The cached texture is freed and recreated
404
+ * lazily on the next draw.
405
+ */
406
+ R_VAL ruby2d_ext_image_resize(RUBY2D_METHOD_ARGS_VARIADIC) {
407
+ RUBY2D_EXTRACT_VARIADIC;
408
+ if (argc != 3) r_raise("Ruby2D::Ext.image_resize expects 3 args (image, w, h), got %d", (int)argc);
409
+ R_VAL obj = argv[0];
410
+ R_VAL w_val = argv[1];
411
+ R_VAL h_val = argv[2];
412
+
413
+ R2D_Image *img;
414
+ obj_struct(obj, id_ext_image, R2D_Image, img);
415
+
416
+ int new_w = (int)NUM2DBL(w_val);
417
+ int new_h = (int)NUM2DBL(h_val);
418
+ if (new_w <= 0 || new_h <= 0) {
419
+ r_raise("Image#resize! requires positive width and height");
420
+ return R_NIL;
421
+ }
422
+
423
+ const char *path = obj_str(obj, id_path);
424
+ SDL_Surface *new_surface = NULL;
425
+
426
+ if (path_is_svg(path)) {
427
+ SDL_IOStream *io = SDL_IOFromFile(path, "rb");
428
+ if (io) {
429
+ new_surface = IMG_LoadSizedSVG_IO(io, new_w * 2, new_h * 2);
430
+ SDL_CloseIO(io);
431
+ }
432
+ } else {
433
+ SDL_Surface *src = IMG_Load(path);
434
+ if (src) {
435
+ new_surface = SDL_ScaleSurface(src, new_w, new_h, SDL_SCALEMODE_LINEAR);
436
+ SDL_DestroySurface(src);
437
+ }
438
+ }
439
+
440
+ if (!new_surface) {
441
+ r_raise("Image#resize! failed: %s", SDL_GetError());
442
+ return R_NIL;
443
+ }
444
+
445
+ if (img->surface) SDL_DestroySurface(img->surface);
446
+ if (img->texture) {
447
+ SDL_DestroyTexture(img->texture);
448
+ img->texture = NULL;
449
+ }
450
+ img->surface = new_surface;
451
+
452
+ obj_set_int(obj, id_orig_width, new_surface->w);
453
+ obj_set_int(obj, id_orig_height, new_surface->h);
454
+ obj_set_bool(obj, id_clipped, false);
455
+ obj_set_float(obj, id_clip_x, 0.0);
456
+ obj_set_float(obj, id_clip_y, 0.0);
457
+ obj_set_int(obj, id_clip_width, new_surface->w);
458
+ obj_set_int(obj, id_clip_height, new_surface->h);
459
+ obj_set_int(obj, id_source_width, new_surface->w);
460
+ obj_set_int(obj, id_source_height, new_surface->h);
461
+ obj_set_int(obj, id_trim_x, 0);
462
+ obj_set_int(obj, id_trim_y, 0);
463
+
464
+ return R_TRUE;
465
+ }
466
+
467
+
468
+ /*
469
+ * Free the memory and resources associated with an R2D_Image object
470
+ */
471
+ static void R2D_Image_free(void *p) {
472
+ if (!p) return;
473
+ R2D_Image *img = (R2D_Image *)p;
474
+ if (img->surface) {
475
+ SDL_DestroySurface(img->surface);
476
+ img->surface = NULL;
477
+ }
478
+ if (img->texture) {
479
+ if (R2D_RendererAlive()) SDL_DestroyTexture(img->texture);
480
+ img->texture = NULL;
57
481
  }
482
+ xfree(img);
58
483
  }