ruby_rpg 0.0.5 → 0.1.1

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 (606) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +43 -21
  3. data/THIRD_PARTY_NOTICES.md +61 -0
  4. data/bin/build.bash +13 -13
  5. data/bin/import +54 -44
  6. data/ext/gl_native/extconf.rb +20 -0
  7. data/ext/gl_native/gl_native.c +563 -0
  8. data/ext/glfw_native/extconf.rb +18 -0
  9. data/ext/glfw_native/glfw_native.c +451 -0
  10. data/lib/engine/assets/Bangers-Regular.ttf +0 -0
  11. data/lib/engine/assets/Caveat-Regular.ttf +0 -0
  12. data/lib/engine/assets/JetBrainsMono-Regular.ttf +0 -0
  13. data/lib/engine/assets/NotoSerif-Regular.ttf +0 -0
  14. data/lib/engine/assets/OpenSans-Regular.ttf +0 -0
  15. data/lib/engine/assets/Oswald-Regular.ttf +0 -0
  16. data/lib/engine/assets/PressStart2P-Regular.ttf +0 -0
  17. data/lib/engine/assets/_imported/Bangers-Regular.json +1 -0
  18. data/lib/engine/assets/_imported/Bangers-Regular.png +0 -0
  19. data/lib/engine/assets/_imported/Caveat-Regular.json +1 -0
  20. data/lib/engine/assets/_imported/Caveat-Regular.png +0 -0
  21. data/lib/engine/assets/_imported/JetBrainsMono-Regular.json +1 -0
  22. data/lib/engine/assets/_imported/JetBrainsMono-Regular.png +0 -0
  23. data/lib/engine/assets/_imported/NotoSerif-Regular.json +1 -0
  24. data/lib/engine/assets/_imported/NotoSerif-Regular.png +0 -0
  25. data/lib/engine/assets/_imported/OpenSans-Regular.json +1 -0
  26. data/lib/engine/assets/_imported/OpenSans-Regular.png +0 -0
  27. data/lib/engine/assets/_imported/Oswald-Regular.json +1 -0
  28. data/lib/engine/assets/_imported/Oswald-Regular.png +0 -0
  29. data/lib/engine/assets/_imported/PressStart2P-Regular.json +1 -0
  30. data/lib/engine/assets/_imported/PressStart2P-Regular.png +0 -0
  31. data/lib/engine/assets/_imported/cube.index_data +36 -0
  32. data/lib/engine/assets/_imported/cube.vertex_data +720 -0
  33. data/lib/engine/assets/_imported/plane.index_data +6 -0
  34. data/lib/engine/assets/_imported/plane.vertex_data +120 -0
  35. data/lib/engine/assets/_imported/sphere.index_data +2880 -0
  36. data/lib/engine/assets/_imported/sphere.vertex_data +57600 -0
  37. data/lib/engine/assets/cube.obj +46 -0
  38. data/lib/engine/assets/plane.obj +16 -0
  39. data/lib/engine/assets/sphere.obj +2488 -0
  40. data/lib/engine/autoloader.rb +11 -11
  41. data/lib/engine/camera.rb +12 -12
  42. data/lib/engine/component.rb +65 -63
  43. data/lib/engine/components/audio_source.rb +43 -41
  44. data/lib/engine/components/direction_light.rb +102 -23
  45. data/lib/engine/components/orthographic_camera.rb +60 -54
  46. data/lib/engine/components/perspective_camera.rb +76 -53
  47. data/lib/engine/components/point_light.rb +80 -24
  48. data/lib/engine/components/renderers/font_renderer.rb +19 -0
  49. data/lib/engine/components/renderers/font_renderer_base.rb +134 -0
  50. data/lib/engine/components/renderers/mesh_renderer.rb +41 -0
  51. data/lib/engine/components/renderers/sprite_renderer.rb +46 -0
  52. data/lib/engine/components/spot_light.rb +90 -0
  53. data/lib/engine/components/sprite_animator.rb +42 -0
  54. data/lib/engine/components/ui/flex/layout.rb +94 -0
  55. data/lib/engine/components/ui/flex/pack_layout.rb +65 -0
  56. data/lib/engine/components/ui/flex/stretch_layout.rb +52 -0
  57. data/lib/engine/components/ui/flex.rb +60 -0
  58. data/lib/engine/components/ui/font_renderer.rb +57 -0
  59. data/lib/engine/components/ui/rect.rb +117 -0
  60. data/lib/engine/components/ui/sprite_clickbox.rb +47 -0
  61. data/lib/engine/components/ui/sprite_renderer.rb +117 -0
  62. data/lib/engine/compute_shader.rb +14 -93
  63. data/lib/engine/compute_texture.rb +13 -0
  64. data/lib/engine/cursor.rb +43 -43
  65. data/lib/engine/debugging.rb +41 -41
  66. data/lib/engine/engine.rb +127 -131
  67. data/lib/engine/font.rb +127 -74
  68. data/lib/engine/game_object.rb +306 -234
  69. data/lib/engine/gl.rb +439 -0
  70. data/lib/engine/glfw.rb +151 -0
  71. data/lib/engine/importers/font_importer.rb +69 -69
  72. data/lib/engine/importers/obj_file.rb +244 -244
  73. data/lib/engine/importers/obj_importer.rb +33 -33
  74. data/lib/engine/input.rb +212 -105
  75. data/lib/engine/material.rb +214 -79
  76. data/lib/engine/matrix_helpers.rb +38 -0
  77. data/lib/engine/mesh.rb +68 -43
  78. data/lib/engine/metal/compute_shader.rb +118 -0
  79. data/lib/engine/metal/compute_texture.rb +176 -0
  80. data/lib/engine/metal/device.rb +98 -0
  81. data/lib/engine/metal/metal_bindings.rb +126 -0
  82. data/lib/engine/opengl/compute_shader.rb +77 -0
  83. data/lib/engine/opengl/compute_texture.rb +31 -0
  84. data/lib/engine/path.rb +92 -92
  85. data/lib/engine/physics/collision.rb +12 -12
  86. data/lib/engine/physics/components/cube_collider.rb +6 -6
  87. data/lib/engine/physics/components/rigidbody.rb +106 -103
  88. data/lib/engine/physics/components/sphere_collider.rb +103 -93
  89. data/lib/engine/physics/physics_resolver.rb +49 -37
  90. data/lib/engine/polygon_mesh.rb +45 -45
  91. data/lib/engine/quaternion.rb +234 -234
  92. data/lib/engine/rendering/cubemap_shadow_map_array.rb +77 -0
  93. data/lib/engine/rendering/gpu_timer.rb +68 -0
  94. data/lib/engine/rendering/instance_renderer.rb +232 -153
  95. data/lib/engine/rendering/post_processing/bloom_effect.rb +87 -0
  96. data/lib/engine/rendering/post_processing/depth_debug_effect.rb +17 -0
  97. data/lib/engine/rendering/post_processing/depth_of_field_effect.rb +52 -0
  98. data/lib/engine/rendering/post_processing/effect.rb +11 -0
  99. data/lib/engine/rendering/post_processing/post_processing_effect.rb +86 -0
  100. data/lib/engine/rendering/post_processing/single_pass_effect.rb +19 -0
  101. data/lib/engine/rendering/post_processing/ssao_effect.rb +182 -0
  102. data/lib/engine/rendering/post_processing/ssr_effect.rb +89 -0
  103. data/lib/engine/rendering/post_processing/tint_effect.rb +18 -0
  104. data/lib/engine/rendering/render_pipeline.rb +267 -35
  105. data/lib/engine/rendering/render_texture.rb +118 -0
  106. data/lib/engine/rendering/screen_quad.rb +64 -0
  107. data/lib/engine/rendering/shadow_map_array.rb +72 -0
  108. data/lib/engine/rendering/skybox_cubemap.rb +119 -0
  109. data/lib/engine/rendering/skybox_renderer.rb +64 -0
  110. data/lib/engine/rendering/ui/stencil_manager.rb +69 -0
  111. data/lib/engine/screenshoter.rb +34 -34
  112. data/lib/engine/serialization/graph_serializer.rb +74 -0
  113. data/lib/engine/serialization/object_serializer.rb +98 -0
  114. data/lib/engine/serialization/serializable.rb +78 -0
  115. data/lib/engine/serialization/yaml_persistence.rb +45 -0
  116. data/lib/engine/shader.rb +215 -119
  117. data/lib/engine/shaders/colour_frag.glsl +16 -8
  118. data/lib/engine/shaders/colour_vertex.glsl +20 -13
  119. data/lib/engine/shaders/fullscreen_frag.glsl +11 -0
  120. data/lib/engine/shaders/fullscreen_vertex.glsl +12 -0
  121. data/lib/engine/shaders/instanced_sprite_frag.glsl +21 -0
  122. data/lib/engine/shaders/{skybox_vert.glsl → instanced_sprite_vertex.glsl} +15 -14
  123. data/lib/engine/shaders/lighting/directional_light.glsl +49 -0
  124. data/lib/engine/shaders/lighting/lighting.glsl +33 -0
  125. data/lib/engine/shaders/lighting/lighting_common.glsl +13 -0
  126. data/lib/engine/shaders/lighting/point_light.glsl +46 -0
  127. data/lib/engine/shaders/lighting/spot_light.glsl +80 -0
  128. data/lib/engine/shaders/mesh_frag.glsl +53 -102
  129. data/lib/engine/shaders/mesh_vertex.glsl +25 -25
  130. data/lib/engine/shaders/point_shadow_frag.glsl +12 -0
  131. data/lib/engine/shaders/point_shadow_vertex.glsl +15 -0
  132. data/lib/engine/shaders/post_process/bloom_blur_frag.glsl +25 -0
  133. data/lib/engine/shaders/post_process/bloom_combine_frag.glsl +19 -0
  134. data/lib/engine/shaders/post_process/bloom_threshold_frag.glsl +19 -0
  135. data/lib/engine/shaders/post_process/debug_normals_frag.glsl +21 -0
  136. data/lib/engine/shaders/post_process/depth_debug_frag.glsl +17 -0
  137. data/lib/engine/shaders/post_process/dof_blur_frag.glsl +52 -0
  138. data/lib/engine/shaders/post_process/skybox_frag.glsl +29 -0
  139. data/lib/engine/shaders/post_process/ssao/blur_frag.glsl +50 -0
  140. data/lib/engine/shaders/post_process/ssao/combine_frag.glsl +15 -0
  141. data/lib/engine/shaders/post_process/ssao/frag.glsl +99 -0
  142. data/lib/engine/shaders/post_process/ssr/combine_frag.glsl +16 -0
  143. data/lib/engine/shaders/post_process/ssr/frag.glsl +118 -0
  144. data/lib/engine/shaders/post_process/tint_frag.glsl +14 -0
  145. data/lib/engine/shaders/shadow_frag.glsl +6 -0
  146. data/lib/engine/shaders/shadow_vertex.glsl +11 -0
  147. data/lib/engine/shaders/skybox_cubemap_frag.glsl +46 -0
  148. data/lib/engine/shaders/sprite_frag.glsl +17 -17
  149. data/lib/engine/shaders/sprite_vertex.glsl +15 -15
  150. data/lib/engine/shaders/text_frag.glsl +15 -15
  151. data/lib/engine/shaders/text_vertex.glsl +31 -31
  152. data/lib/engine/shaders/ui_sprite_frag.glsl +15 -15
  153. data/lib/engine/shaders/ui_sprite_vertex.glsl +15 -15
  154. data/lib/engine/shaders/vertex_lit_frag.glsl +33 -89
  155. data/lib/engine/shaders/vertex_lit_vertex.glsl +28 -28
  156. data/lib/engine/standard_meshes/quad_mesh.rb +26 -0
  157. data/lib/engine/standard_objects/cube.rb +23 -0
  158. data/lib/engine/standard_objects/default_material.rb +20 -0
  159. data/lib/engine/standard_objects/plane.rb +23 -0
  160. data/lib/engine/standard_objects/sphere.rb +23 -0
  161. data/lib/engine/tangent_calculator.rb +42 -42
  162. data/lib/engine/texture.rb +62 -53
  163. data/lib/engine/ui/rect.rb +16 -0
  164. data/lib/engine/video_mode.rb +37 -37
  165. data/lib/engine/window.rb +126 -126
  166. data/lib/ruby_rpg.rb +116 -58
  167. data/vendor/glew-2.2.0-win32/LICENSE.txt +73 -0
  168. data/vendor/glew-2.2.0-win32/bin/Release/x64/glew32.dll +0 -0
  169. data/vendor/glew-2.2.0-win32/include/GL/glew.h +26427 -0
  170. data/vendor/glew-2.2.0-win32/lib/Release/x64/glew32.lib +0 -0
  171. data/{glfw-3.3.9.bin.MACOS → vendor/glfw-3.3.9.bin.MACOS}/lib-arm64/libglfw.3.dylib +0 -0
  172. data/{glfw-3.3.9.bin.MACOS → vendor/glfw-3.4.bin.WIN64}/LICENSE.md +23 -23
  173. metadata +144 -463
  174. data/glfw-3.3.9.bin.MACOS/README.md +0 -5
  175. data/glfw-3.3.9.bin.MACOS/docs/html/bc_s.png +0 -0
  176. data/glfw-3.3.9.bin.MACOS/docs/html/bc_sd.png +0 -0
  177. data/glfw-3.3.9.bin.MACOS/docs/html/build_8dox.html +0 -81
  178. data/glfw-3.3.9.bin.MACOS/docs/html/build_guide.html +0 -199
  179. data/glfw-3.3.9.bin.MACOS/docs/html/closed.png +0 -0
  180. data/glfw-3.3.9.bin.MACOS/docs/html/compat_8dox.html +0 -81
  181. data/glfw-3.3.9.bin.MACOS/docs/html/compat_guide.html +0 -153
  182. data/glfw-3.3.9.bin.MACOS/docs/html/compile_8dox.html +0 -81
  183. data/glfw-3.3.9.bin.MACOS/docs/html/compile_guide.html +0 -223
  184. data/glfw-3.3.9.bin.MACOS/docs/html/context_8dox.html +0 -81
  185. data/glfw-3.3.9.bin.MACOS/docs/html/context_guide.html +0 -259
  186. data/glfw-3.3.9.bin.MACOS/docs/html/deprecated.html +0 -88
  187. data/glfw-3.3.9.bin.MACOS/docs/html/dir_08423ce7729c4554356a7de7171ba263.html +0 -85
  188. data/glfw-3.3.9.bin.MACOS/docs/html/dir_2dcebcdf14b42e92a6ed85c61bda6b9d.html +0 -93
  189. data/glfw-3.3.9.bin.MACOS/docs/html/dir_62ce056722ee97c199075aa1d6eca309.html +0 -95
  190. data/glfw-3.3.9.bin.MACOS/docs/html/dir_dddf4cf62655095a666cf715de3a31a2.html +0 -91
  191. data/glfw-3.3.9.bin.MACOS/docs/html/doc.svg +0 -12
  192. data/glfw-3.3.9.bin.MACOS/docs/html/docd.svg +0 -12
  193. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.css +0 -1685
  194. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.svg +0 -28
  195. data/glfw-3.3.9.bin.MACOS/docs/html/dynsections.js +0 -192
  196. data/glfw-3.3.9.bin.MACOS/docs/html/extra.css +0 -1
  197. data/glfw-3.3.9.bin.MACOS/docs/html/files.html +0 -91
  198. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosed.svg +0 -11
  199. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosedd.svg +0 -11
  200. data/glfw-3.3.9.bin.MACOS/docs/html/folderopen.svg +0 -17
  201. data/glfw-3.3.9.bin.MACOS/docs/html/folderopend.svg +0 -12
  202. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h.html +0 -1661
  203. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h_source.html +0 -1175
  204. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h.html +0 -167
  205. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h_source.html +0 -303
  206. data/glfw-3.3.9.bin.MACOS/docs/html/group__buttons.html +0 -282
  207. data/glfw-3.3.9.bin.MACOS/docs/html/group__context.html +0 -304
  208. data/glfw-3.3.9.bin.MACOS/docs/html/group__errors.html +0 -304
  209. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__axes.html +0 -202
  210. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__buttons.html +0 -410
  211. data/glfw-3.3.9.bin.MACOS/docs/html/group__hat__state.html +0 -234
  212. data/glfw-3.3.9.bin.MACOS/docs/html/group__init.html +0 -570
  213. data/glfw-3.3.9.bin.MACOS/docs/html/group__input.html +0 -2255
  214. data/glfw-3.3.9.bin.MACOS/docs/html/group__joysticks.html +0 -362
  215. data/glfw-3.3.9.bin.MACOS/docs/html/group__keys.html +0 -2034
  216. data/glfw-3.3.9.bin.MACOS/docs/html/group__mods.html +0 -198
  217. data/glfw-3.3.9.bin.MACOS/docs/html/group__monitor.html +0 -848
  218. data/glfw-3.3.9.bin.MACOS/docs/html/group__native.html +0 -812
  219. data/glfw-3.3.9.bin.MACOS/docs/html/group__shapes.html +0 -198
  220. data/glfw-3.3.9.bin.MACOS/docs/html/group__vulkan.html +0 -359
  221. data/glfw-3.3.9.bin.MACOS/docs/html/group__window.html +0 -3434
  222. data/glfw-3.3.9.bin.MACOS/docs/html/index.html +0 -100
  223. data/glfw-3.3.9.bin.MACOS/docs/html/input_8dox.html +0 -81
  224. data/glfw-3.3.9.bin.MACOS/docs/html/input_guide.html +0 -570
  225. data/glfw-3.3.9.bin.MACOS/docs/html/internal_8dox.html +0 -81
  226. data/glfw-3.3.9.bin.MACOS/docs/html/internals_guide.html +0 -132
  227. data/glfw-3.3.9.bin.MACOS/docs/html/intro_8dox.html +0 -81
  228. data/glfw-3.3.9.bin.MACOS/docs/html/intro_guide.html +0 -351
  229. data/glfw-3.3.9.bin.MACOS/docs/html/jquery.js +0 -34
  230. data/glfw-3.3.9.bin.MACOS/docs/html/main_8dox.html +0 -81
  231. data/glfw-3.3.9.bin.MACOS/docs/html/menu.js +0 -136
  232. data/glfw-3.3.9.bin.MACOS/docs/html/menudata.js +0 -29
  233. data/glfw-3.3.9.bin.MACOS/docs/html/minus.svg +0 -8
  234. data/glfw-3.3.9.bin.MACOS/docs/html/minusd.svg +0 -8
  235. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_8dox.html +0 -81
  236. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_guide.html +0 -229
  237. data/glfw-3.3.9.bin.MACOS/docs/html/moving_8dox.html +0 -81
  238. data/glfw-3.3.9.bin.MACOS/docs/html/moving_guide.html +0 -374
  239. data/glfw-3.3.9.bin.MACOS/docs/html/nav_f.png +0 -0
  240. data/glfw-3.3.9.bin.MACOS/docs/html/nav_fd.png +0 -0
  241. data/glfw-3.3.9.bin.MACOS/docs/html/nav_g.png +0 -0
  242. data/glfw-3.3.9.bin.MACOS/docs/html/nav_h.png +0 -0
  243. data/glfw-3.3.9.bin.MACOS/docs/html/nav_hd.png +0 -0
  244. data/glfw-3.3.9.bin.MACOS/docs/html/news.html +0 -634
  245. data/glfw-3.3.9.bin.MACOS/docs/html/news_8dox.html +0 -81
  246. data/glfw-3.3.9.bin.MACOS/docs/html/open.png +0 -0
  247. data/glfw-3.3.9.bin.MACOS/docs/html/pages.html +0 -99
  248. data/glfw-3.3.9.bin.MACOS/docs/html/plus.svg +0 -9
  249. data/glfw-3.3.9.bin.MACOS/docs/html/plusd.svg +0 -9
  250. data/glfw-3.3.9.bin.MACOS/docs/html/quick_8dox.html +0 -81
  251. data/glfw-3.3.9.bin.MACOS/docs/html/quick_guide.html +0 -397
  252. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_0.js +0 -5
  253. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1.js +0 -4
  254. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_10.js +0 -65
  255. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_11.js +0 -26
  256. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_12.js +0 -44
  257. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_13.js +0 -34
  258. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_14.js +0 -12
  259. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_15.js +0 -52
  260. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_16.js +0 -69
  261. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_17.js +0 -51
  262. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_18.js +0 -14
  263. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_19.js +0 -36
  264. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1a.js +0 -98
  265. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1b.js +0 -12
  266. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_2.js +0 -6
  267. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_3.js +0 -9
  268. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_4.js +0 -57
  269. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_5.js +0 -22
  270. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_6.js +0 -103
  271. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_7.js +0 -23
  272. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_8.js +0 -35
  273. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_9.js +0 -63
  274. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_a.js +0 -505
  275. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_b.js +0 -24
  276. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_c.js +0 -50
  277. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_d.js +0 -17
  278. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_e.js +0 -12
  279. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_f.js +0 -35
  280. data/glfw-3.3.9.bin.MACOS/docs/html/search/classes_0.js +0 -7
  281. data/glfw-3.3.9.bin.MACOS/docs/html/search/close.svg +0 -18
  282. data/glfw-3.3.9.bin.MACOS/docs/html/search/defines_0.js +0 -34
  283. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_0.js +0 -4
  284. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_1.js +0 -6
  285. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_2.js +0 -5
  286. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_3.js +0 -6
  287. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_4.js +0 -6
  288. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_5.js +0 -4
  289. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_6.js +0 -4
  290. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_7.js +0 -4
  291. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_8.js +0 -4
  292. data/glfw-3.3.9.bin.MACOS/docs/html/search/functions_0.js +0 -146
  293. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_0.js +0 -6
  294. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_1.js +0 -4
  295. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_10.js +0 -4
  296. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_2.js +0 -6
  297. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_3.js +0 -5
  298. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_4.js +0 -4
  299. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_5.js +0 -5
  300. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_6.js +0 -4
  301. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_7.js +0 -5
  302. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_8.js +0 -5
  303. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_9.js +0 -6
  304. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_a.js +0 -6
  305. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_b.js +0 -4
  306. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_c.js +0 -4
  307. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_d.js +0 -7
  308. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_e.js +0 -4
  309. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_f.js +0 -5
  310. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag.svg +0 -24
  311. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_d.svg +0 -24
  312. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_sel.svg +0 -31
  313. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_seld.svg +0 -31
  314. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_0.js +0 -4
  315. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_1.js +0 -4
  316. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_10.js +0 -4
  317. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_2.js +0 -5
  318. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_3.js +0 -4
  319. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_4.js +0 -6
  320. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_5.js +0 -4
  321. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_6.js +0 -4
  322. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_7.js +0 -7
  323. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_8.js +0 -6
  324. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_9.js +0 -4
  325. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_a.js +0 -5
  326. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_b.js +0 -5
  327. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_c.js +0 -4
  328. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_d.js +0 -6
  329. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_e.js +0 -6
  330. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_f.js +0 -4
  331. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.css +0 -291
  332. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.js +0 -840
  333. data/glfw-3.3.9.bin.MACOS/docs/html/search/searchdata.js +0 -39
  334. data/glfw-3.3.9.bin.MACOS/docs/html/search/typedefs_0.js +0 -32
  335. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_0.js +0 -4
  336. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_1.js +0 -6
  337. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_2.js +0 -5
  338. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_3.js +0 -4
  339. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_4.js +0 -4
  340. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_5.js +0 -6
  341. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_6.js +0 -4
  342. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_7.js +0 -4
  343. data/glfw-3.3.9.bin.MACOS/docs/html/spaces.svg +0 -877
  344. data/glfw-3.3.9.bin.MACOS/docs/html/splitbar.png +0 -0
  345. data/glfw-3.3.9.bin.MACOS/docs/html/splitbard.png +0 -0
  346. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgamepadstate.html +0 -134
  347. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgammaramp.html +0 -170
  348. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wimage.html +0 -151
  349. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wvidmode.html +0 -204
  350. data/glfw-3.3.9.bin.MACOS/docs/html/sync_off.png +0 -0
  351. data/glfw-3.3.9.bin.MACOS/docs/html/sync_on.png +0 -0
  352. data/glfw-3.3.9.bin.MACOS/docs/html/tab_a.png +0 -0
  353. data/glfw-3.3.9.bin.MACOS/docs/html/tab_ad.png +0 -0
  354. data/glfw-3.3.9.bin.MACOS/docs/html/tab_b.png +0 -0
  355. data/glfw-3.3.9.bin.MACOS/docs/html/tab_bd.png +0 -0
  356. data/glfw-3.3.9.bin.MACOS/docs/html/tab_h.png +0 -0
  357. data/glfw-3.3.9.bin.MACOS/docs/html/tab_hd.png +0 -0
  358. data/glfw-3.3.9.bin.MACOS/docs/html/tab_s.png +0 -0
  359. data/glfw-3.3.9.bin.MACOS/docs/html/tab_sd.png +0 -0
  360. data/glfw-3.3.9.bin.MACOS/docs/html/tabs.css +0 -1
  361. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_8dox.html +0 -81
  362. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_guide.html +0 -196
  363. data/glfw-3.3.9.bin.MACOS/docs/html/window_8dox.html +0 -81
  364. data/glfw-3.3.9.bin.MACOS/docs/html/window_guide.html +0 -763
  365. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3.h +0 -5932
  366. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3native.h +0 -634
  367. data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw3.a +0 -0
  368. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw.3.dylib +0 -0
  369. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw3.a +0 -0
  370. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw.3.dylib +0 -0
  371. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw3.a +0 -0
  372. data/glfw-3.4.bin.WIN64/README.md +0 -70
  373. data/glfw-3.4.bin.WIN64/docs/html/bc_s.png +0 -0
  374. data/glfw-3.4.bin.WIN64/docs/html/bc_sd.png +0 -0
  375. data/glfw-3.4.bin.WIN64/docs/html/build_8md.html +0 -81
  376. data/glfw-3.4.bin.WIN64/docs/html/build_guide.html +0 -217
  377. data/glfw-3.4.bin.WIN64/docs/html/closed.png +0 -0
  378. data/glfw-3.4.bin.WIN64/docs/html/compat_8md.html +0 -81
  379. data/glfw-3.4.bin.WIN64/docs/html/compat_guide.html +0 -156
  380. data/glfw-3.4.bin.WIN64/docs/html/compile_8md.html +0 -81
  381. data/glfw-3.4.bin.WIN64/docs/html/compile_guide.html +0 -219
  382. data/glfw-3.4.bin.WIN64/docs/html/context_8md.html +0 -81
  383. data/glfw-3.4.bin.WIN64/docs/html/context_guide.html +0 -258
  384. data/glfw-3.4.bin.WIN64/docs/html/deprecated.html +0 -88
  385. data/glfw-3.4.bin.WIN64/docs/html/dir_13577e2d8b9423099662de029791bd7d.html +0 -93
  386. data/glfw-3.4.bin.WIN64/docs/html/dir_7f92719a7fe62e5b064f87d7a3c220b1.html +0 -95
  387. data/glfw-3.4.bin.WIN64/docs/html/dir_a788ef6c2b1e5b367804e0b6ccfd6f11.html +0 -85
  388. data/glfw-3.4.bin.WIN64/docs/html/dir_b11153cd0f4fd04a7564cc166f482635.html +0 -91
  389. data/glfw-3.4.bin.WIN64/docs/html/doc.svg +0 -12
  390. data/glfw-3.4.bin.WIN64/docs/html/docd.svg +0 -12
  391. data/glfw-3.4.bin.WIN64/docs/html/doxygen.css +0 -1685
  392. data/glfw-3.4.bin.WIN64/docs/html/doxygen.svg +0 -28
  393. data/glfw-3.4.bin.WIN64/docs/html/dynsections.js +0 -192
  394. data/glfw-3.4.bin.WIN64/docs/html/extra.css +0 -2
  395. data/glfw-3.4.bin.WIN64/docs/html/files.html +0 -91
  396. data/glfw-3.4.bin.WIN64/docs/html/folderclosed.svg +0 -11
  397. data/glfw-3.4.bin.WIN64/docs/html/folderclosedd.svg +0 -11
  398. data/glfw-3.4.bin.WIN64/docs/html/folderopen.svg +0 -17
  399. data/glfw-3.4.bin.WIN64/docs/html/folderopend.svg +0 -12
  400. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h.html +0 -1910
  401. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h_source.html +0 -1260
  402. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h.html +0 -170
  403. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h_source.html +0 -306
  404. data/glfw-3.4.bin.WIN64/docs/html/group__buttons.html +0 -282
  405. data/glfw-3.4.bin.WIN64/docs/html/group__context.html +0 -304
  406. data/glfw-3.4.bin.WIN64/docs/html/group__errors.html +0 -384
  407. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__axes.html +0 -202
  408. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__buttons.html +0 -410
  409. data/glfw-3.4.bin.WIN64/docs/html/group__hat__state.html +0 -234
  410. data/glfw-3.4.bin.WIN64/docs/html/group__init.html +0 -1015
  411. data/glfw-3.4.bin.WIN64/docs/html/group__input.html +0 -2285
  412. data/glfw-3.4.bin.WIN64/docs/html/group__joysticks.html +0 -362
  413. data/glfw-3.4.bin.WIN64/docs/html/group__keys.html +0 -2034
  414. data/glfw-3.4.bin.WIN64/docs/html/group__mods.html +0 -198
  415. data/glfw-3.4.bin.WIN64/docs/html/group__monitor.html +0 -849
  416. data/glfw-3.4.bin.WIN64/docs/html/group__native.html +0 -837
  417. data/glfw-3.4.bin.WIN64/docs/html/group__shapes.html +0 -337
  418. data/glfw-3.4.bin.WIN64/docs/html/group__vulkan.html +0 -361
  419. data/glfw-3.4.bin.WIN64/docs/html/group__window.html +0 -3608
  420. data/glfw-3.4.bin.WIN64/docs/html/index.html +0 -100
  421. data/glfw-3.4.bin.WIN64/docs/html/input_8md.html +0 -81
  422. data/glfw-3.4.bin.WIN64/docs/html/input_guide.html +0 -576
  423. data/glfw-3.4.bin.WIN64/docs/html/internal_8md.html +0 -81
  424. data/glfw-3.4.bin.WIN64/docs/html/internals_guide.html +0 -135
  425. data/glfw-3.4.bin.WIN64/docs/html/intro_8md.html +0 -81
  426. data/glfw-3.4.bin.WIN64/docs/html/intro_guide.html +0 -429
  427. data/glfw-3.4.bin.WIN64/docs/html/jquery.js +0 -34
  428. data/glfw-3.4.bin.WIN64/docs/html/main_8md.html +0 -81
  429. data/glfw-3.4.bin.WIN64/docs/html/menu.js +0 -136
  430. data/glfw-3.4.bin.WIN64/docs/html/menudata.js +0 -30
  431. data/glfw-3.4.bin.WIN64/docs/html/minus.svg +0 -8
  432. data/glfw-3.4.bin.WIN64/docs/html/minusd.svg +0 -8
  433. data/glfw-3.4.bin.WIN64/docs/html/monitor_8md.html +0 -81
  434. data/glfw-3.4.bin.WIN64/docs/html/monitor_guide.html +0 -228
  435. data/glfw-3.4.bin.WIN64/docs/html/moving_8md.html +0 -81
  436. data/glfw-3.4.bin.WIN64/docs/html/moving_guide.html +0 -360
  437. data/glfw-3.4.bin.WIN64/docs/html/nav_f.png +0 -0
  438. data/glfw-3.4.bin.WIN64/docs/html/nav_fd.png +0 -0
  439. data/glfw-3.4.bin.WIN64/docs/html/nav_g.png +0 -0
  440. data/glfw-3.4.bin.WIN64/docs/html/nav_h.png +0 -0
  441. data/glfw-3.4.bin.WIN64/docs/html/nav_hd.png +0 -0
  442. data/glfw-3.4.bin.WIN64/docs/html/news.html +0 -336
  443. data/glfw-3.4.bin.WIN64/docs/html/news_8md.html +0 -81
  444. data/glfw-3.4.bin.WIN64/docs/html/open.png +0 -0
  445. data/glfw-3.4.bin.WIN64/docs/html/pages.html +0 -99
  446. data/glfw-3.4.bin.WIN64/docs/html/plus.svg +0 -9
  447. data/glfw-3.4.bin.WIN64/docs/html/plusd.svg +0 -9
  448. data/glfw-3.4.bin.WIN64/docs/html/quick_8md.html +0 -81
  449. data/glfw-3.4.bin.WIN64/docs/html/quick_guide.html +0 -406
  450. data/glfw-3.4.bin.WIN64/docs/html/search/all_0.js +0 -4
  451. data/glfw-3.4.bin.WIN64/docs/html/search/all_1.js +0 -4
  452. data/glfw-3.4.bin.WIN64/docs/html/search/all_10.js +0 -13
  453. data/glfw-3.4.bin.WIN64/docs/html/search/all_11.js +0 -11
  454. data/glfw-3.4.bin.WIN64/docs/html/search/all_12.js +0 -26
  455. data/glfw-3.4.bin.WIN64/docs/html/search/all_13.js +0 -51
  456. data/glfw-3.4.bin.WIN64/docs/html/search/all_14.js +0 -22
  457. data/glfw-3.4.bin.WIN64/docs/html/search/all_15.js +0 -35
  458. data/glfw-3.4.bin.WIN64/docs/html/search/all_16.js +0 -29
  459. data/glfw-3.4.bin.WIN64/docs/html/search/all_17.js +0 -8
  460. data/glfw-3.4.bin.WIN64/docs/html/search/all_18.js +0 -44
  461. data/glfw-3.4.bin.WIN64/docs/html/search/all_19.js +0 -60
  462. data/glfw-3.4.bin.WIN64/docs/html/search/all_1a.js +0 -39
  463. data/glfw-3.4.bin.WIN64/docs/html/search/all_1b.js +0 -8
  464. data/glfw-3.4.bin.WIN64/docs/html/search/all_1c.js +0 -32
  465. data/glfw-3.4.bin.WIN64/docs/html/search/all_1d.js +0 -84
  466. data/glfw-3.4.bin.WIN64/docs/html/search/all_1e.js +0 -13
  467. data/glfw-3.4.bin.WIN64/docs/html/search/all_1f.js +0 -4
  468. data/glfw-3.4.bin.WIN64/docs/html/search/all_2.js +0 -5
  469. data/glfw-3.4.bin.WIN64/docs/html/search/all_3.js +0 -4
  470. data/glfw-3.4.bin.WIN64/docs/html/search/all_4.js +0 -4
  471. data/glfw-3.4.bin.WIN64/docs/html/search/all_5.js +0 -4
  472. data/glfw-3.4.bin.WIN64/docs/html/search/all_6.js +0 -4
  473. data/glfw-3.4.bin.WIN64/docs/html/search/all_7.js +0 -58
  474. data/glfw-3.4.bin.WIN64/docs/html/search/all_8.js +0 -21
  475. data/glfw-3.4.bin.WIN64/docs/html/search/all_9.js +0 -82
  476. data/glfw-3.4.bin.WIN64/docs/html/search/all_a.js +0 -20
  477. data/glfw-3.4.bin.WIN64/docs/html/search/all_b.js +0 -26
  478. data/glfw-3.4.bin.WIN64/docs/html/search/all_c.js +0 -35
  479. data/glfw-3.4.bin.WIN64/docs/html/search/all_d.js +0 -555
  480. data/glfw-3.4.bin.WIN64/docs/html/search/all_e.js +0 -23
  481. data/glfw-3.4.bin.WIN64/docs/html/search/all_f.js +0 -40
  482. data/glfw-3.4.bin.WIN64/docs/html/search/classes_0.js +0 -8
  483. data/glfw-3.4.bin.WIN64/docs/html/search/close.svg +0 -18
  484. data/glfw-3.4.bin.WIN64/docs/html/search/defines_0.js +0 -43
  485. data/glfw-3.4.bin.WIN64/docs/html/search/files_0.js +0 -4
  486. data/glfw-3.4.bin.WIN64/docs/html/search/files_1.js +0 -6
  487. data/glfw-3.4.bin.WIN64/docs/html/search/files_2.js +0 -5
  488. data/glfw-3.4.bin.WIN64/docs/html/search/files_3.js +0 -6
  489. data/glfw-3.4.bin.WIN64/docs/html/search/files_4.js +0 -6
  490. data/glfw-3.4.bin.WIN64/docs/html/search/files_5.js +0 -4
  491. data/glfw-3.4.bin.WIN64/docs/html/search/files_6.js +0 -4
  492. data/glfw-3.4.bin.WIN64/docs/html/search/files_7.js +0 -4
  493. data/glfw-3.4.bin.WIN64/docs/html/search/files_8.js +0 -4
  494. data/glfw-3.4.bin.WIN64/docs/html/search/functions_0.js +0 -152
  495. data/glfw-3.4.bin.WIN64/docs/html/search/groups_0.js +0 -6
  496. data/glfw-3.4.bin.WIN64/docs/html/search/groups_1.js +0 -4
  497. data/glfw-3.4.bin.WIN64/docs/html/search/groups_10.js +0 -4
  498. data/glfw-3.4.bin.WIN64/docs/html/search/groups_2.js +0 -6
  499. data/glfw-3.4.bin.WIN64/docs/html/search/groups_3.js +0 -5
  500. data/glfw-3.4.bin.WIN64/docs/html/search/groups_4.js +0 -4
  501. data/glfw-3.4.bin.WIN64/docs/html/search/groups_5.js +0 -5
  502. data/glfw-3.4.bin.WIN64/docs/html/search/groups_6.js +0 -4
  503. data/glfw-3.4.bin.WIN64/docs/html/search/groups_7.js +0 -5
  504. data/glfw-3.4.bin.WIN64/docs/html/search/groups_8.js +0 -5
  505. data/glfw-3.4.bin.WIN64/docs/html/search/groups_9.js +0 -6
  506. data/glfw-3.4.bin.WIN64/docs/html/search/groups_a.js +0 -6
  507. data/glfw-3.4.bin.WIN64/docs/html/search/groups_b.js +0 -4
  508. data/glfw-3.4.bin.WIN64/docs/html/search/groups_c.js +0 -4
  509. data/glfw-3.4.bin.WIN64/docs/html/search/groups_d.js +0 -7
  510. data/glfw-3.4.bin.WIN64/docs/html/search/groups_e.js +0 -4
  511. data/glfw-3.4.bin.WIN64/docs/html/search/groups_f.js +0 -5
  512. data/glfw-3.4.bin.WIN64/docs/html/search/mag.svg +0 -24
  513. data/glfw-3.4.bin.WIN64/docs/html/search/mag_d.svg +0 -24
  514. data/glfw-3.4.bin.WIN64/docs/html/search/mag_sel.svg +0 -31
  515. data/glfw-3.4.bin.WIN64/docs/html/search/mag_seld.svg +0 -31
  516. data/glfw-3.4.bin.WIN64/docs/html/search/pages_0.js +0 -4
  517. data/glfw-3.4.bin.WIN64/docs/html/search/pages_1.js +0 -5
  518. data/glfw-3.4.bin.WIN64/docs/html/search/pages_10.js +0 -5
  519. data/glfw-3.4.bin.WIN64/docs/html/search/pages_11.js +0 -4
  520. data/glfw-3.4.bin.WIN64/docs/html/search/pages_2.js +0 -4
  521. data/glfw-3.4.bin.WIN64/docs/html/search/pages_3.js +0 -5
  522. data/glfw-3.4.bin.WIN64/docs/html/search/pages_4.js +0 -4
  523. data/glfw-3.4.bin.WIN64/docs/html/search/pages_5.js +0 -6
  524. data/glfw-3.4.bin.WIN64/docs/html/search/pages_6.js +0 -4
  525. data/glfw-3.4.bin.WIN64/docs/html/search/pages_7.js +0 -5
  526. data/glfw-3.4.bin.WIN64/docs/html/search/pages_8.js +0 -7
  527. data/glfw-3.4.bin.WIN64/docs/html/search/pages_9.js +0 -7
  528. data/glfw-3.4.bin.WIN64/docs/html/search/pages_a.js +0 -4
  529. data/glfw-3.4.bin.WIN64/docs/html/search/pages_b.js +0 -5
  530. data/glfw-3.4.bin.WIN64/docs/html/search/pages_c.js +0 -4
  531. data/glfw-3.4.bin.WIN64/docs/html/search/pages_d.js +0 -4
  532. data/glfw-3.4.bin.WIN64/docs/html/search/pages_e.js +0 -6
  533. data/glfw-3.4.bin.WIN64/docs/html/search/pages_f.js +0 -6
  534. data/glfw-3.4.bin.WIN64/docs/html/search/search.css +0 -291
  535. data/glfw-3.4.bin.WIN64/docs/html/search/search.js +0 -840
  536. data/glfw-3.4.bin.WIN64/docs/html/search/searchdata.js +0 -39
  537. data/glfw-3.4.bin.WIN64/docs/html/search/typedefs_0.js +0 -36
  538. data/glfw-3.4.bin.WIN64/docs/html/search/variables_0.js +0 -5
  539. data/glfw-3.4.bin.WIN64/docs/html/search/variables_1.js +0 -6
  540. data/glfw-3.4.bin.WIN64/docs/html/search/variables_2.js +0 -4
  541. data/glfw-3.4.bin.WIN64/docs/html/search/variables_3.js +0 -5
  542. data/glfw-3.4.bin.WIN64/docs/html/search/variables_4.js +0 -4
  543. data/glfw-3.4.bin.WIN64/docs/html/search/variables_5.js +0 -4
  544. data/glfw-3.4.bin.WIN64/docs/html/search/variables_6.js +0 -7
  545. data/glfw-3.4.bin.WIN64/docs/html/search/variables_7.js +0 -4
  546. data/glfw-3.4.bin.WIN64/docs/html/search/variables_8.js +0 -4
  547. data/glfw-3.4.bin.WIN64/docs/html/search/variables_9.js +0 -4
  548. data/glfw-3.4.bin.WIN64/docs/html/spaces.svg +0 -877
  549. data/glfw-3.4.bin.WIN64/docs/html/splitbar.png +0 -0
  550. data/glfw-3.4.bin.WIN64/docs/html/splitbard.png +0 -0
  551. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wallocator.html +0 -168
  552. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgamepadstate.html +0 -134
  553. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgammaramp.html +0 -170
  554. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wimage.html +0 -151
  555. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wvidmode.html +0 -204
  556. data/glfw-3.4.bin.WIN64/docs/html/sync_off.png +0 -0
  557. data/glfw-3.4.bin.WIN64/docs/html/sync_on.png +0 -0
  558. data/glfw-3.4.bin.WIN64/docs/html/tab_a.png +0 -0
  559. data/glfw-3.4.bin.WIN64/docs/html/tab_ad.png +0 -0
  560. data/glfw-3.4.bin.WIN64/docs/html/tab_b.png +0 -0
  561. data/glfw-3.4.bin.WIN64/docs/html/tab_bd.png +0 -0
  562. data/glfw-3.4.bin.WIN64/docs/html/tab_h.png +0 -0
  563. data/glfw-3.4.bin.WIN64/docs/html/tab_hd.png +0 -0
  564. data/glfw-3.4.bin.WIN64/docs/html/tab_s.png +0 -0
  565. data/glfw-3.4.bin.WIN64/docs/html/tab_sd.png +0 -0
  566. data/glfw-3.4.bin.WIN64/docs/html/tabs.css +0 -1
  567. data/glfw-3.4.bin.WIN64/docs/html/topics.html +0 -101
  568. data/glfw-3.4.bin.WIN64/docs/html/vulkan_8md.html +0 -81
  569. data/glfw-3.4.bin.WIN64/docs/html/vulkan_guide.html +0 -206
  570. data/glfw-3.4.bin.WIN64/docs/html/window_8md.html +0 -81
  571. data/glfw-3.4.bin.WIN64/docs/html/window_guide.html +0 -806
  572. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3.h +0 -6547
  573. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3native.h +0 -663
  574. data/glfw-3.4.bin.WIN64/lib-mingw-w64/glfw3.dll +0 -0
  575. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3.a +0 -0
  576. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3dll.a +0 -0
  577. data/glfw-3.4.bin.WIN64/lib-static-ucrt/glfw3dll.lib +0 -0
  578. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.dll +0 -0
  579. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.lib +0 -0
  580. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3_mt.lib +0 -0
  581. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3dll.lib +0 -0
  582. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.dll +0 -0
  583. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.lib +0 -0
  584. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3_mt.lib +0 -0
  585. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3dll.lib +0 -0
  586. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.dll +0 -0
  587. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.lib +0 -0
  588. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3_mt.lib +0 -0
  589. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3dll.lib +0 -0
  590. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.dll +0 -0
  591. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.lib +0 -0
  592. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3_mt.lib +0 -0
  593. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3dll.lib +0 -0
  594. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.dll +0 -0
  595. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.lib +0 -0
  596. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3_mt.lib +0 -0
  597. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3dll.lib +0 -0
  598. data/lib/engine/components/font_renderer.rb +0 -134
  599. data/lib/engine/components/mesh_renderer.rb +0 -31
  600. data/lib/engine/components/sprite_renderer.rb +0 -141
  601. data/lib/engine/components/ui_font_renderer.rb +0 -140
  602. data/lib/engine/components/ui_sprite_clickbox.rb +0 -62
  603. data/lib/engine/components/ui_sprite_renderer.rb +0 -101
  604. data/lib/engine/shaders/skybox_frag.glsl +0 -12
  605. /data/{glfw-3.4.bin.WIN64 → vendor/glfw-3.3.9.bin.MACOS}/LICENSE.md +0 -0
  606. /data/{glfw-3.4.bin.WIN64 → vendor/glfw-3.4.bin.WIN64}/lib-static-ucrt/glfw3.dll +0 -0
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ module MatrixHelpers
5
+ def look_at(eye, center, up)
6
+ f = (center - eye).normalize
7
+ s = f.cross(up).normalize
8
+ u = s.cross(f)
9
+
10
+ Matrix[
11
+ [s[0], s[1], s[2], -s.dot(eye)],
12
+ [u[0], u[1], u[2], -u.dot(eye)],
13
+ [-f[0], -f[1], -f[2], f.dot(eye)],
14
+ [0, 0, 0, 1]
15
+ ]
16
+ end
17
+
18
+ def perspective(fov, aspect, near, far)
19
+ tan_half_fov = Math.tan(fov / 2.0)
20
+
21
+ Matrix[
22
+ [1.0 / (aspect * tan_half_fov), 0, 0, 0],
23
+ [0, 1.0 / tan_half_fov, 0, 0],
24
+ [0, 0, -(far + near) / (far - near), -(2.0 * far * near) / (far - near)],
25
+ [0, 0, -1, 0]
26
+ ]
27
+ end
28
+
29
+ def ortho(left, right, bottom, top, near, far)
30
+ Matrix[
31
+ [2.0 / (right - left), 0, 0, -(right + left) / (right - left)],
32
+ [0, 2.0 / (top - bottom), 0, -(top + bottom) / (top - bottom)],
33
+ [0, 0, -2.0 / (far - near), -(far + near) / (far - near)],
34
+ [0, 0, 0, 1]
35
+ ]
36
+ end
37
+ end
38
+ end
data/lib/engine/mesh.rb CHANGED
@@ -1,43 +1,68 @@
1
- # frozen_string_literal: true
2
-
3
- module Engine
4
- class Mesh
5
- attr_reader :vertex_data, :index_data
6
- private_class_method :new
7
-
8
- def initialize(mesh_file)
9
- @vertex_data = Mesh.open_vertex(mesh_file)
10
- @index_data = Mesh.open_index(mesh_file)
11
- end
12
-
13
- def self.for(mesh_file)
14
- mesh_cache[mesh_file]
15
- end
16
-
17
- def self.mesh_cache
18
- @mesh_cache ||= Hash.new do |hash, key|
19
- hash[key] = new(key)
20
- end
21
- end
22
-
23
- def self.open_vertex(mesh_file)
24
- vertex_cache[File.join(GAME_DIR, "_imported", mesh_file + ".vertex_data")]
25
- end
26
-
27
- def self.vertex_cache
28
- @index_data_cache ||= Hash.new do |hash, key|
29
- hash[key] = File.readlines(key).reject{|l| l == ""}.map(&:to_f)
30
- end
31
- end
32
-
33
- def self.open_index(mesh_file)
34
- index_cache[File.join(GAME_DIR, "_imported", mesh_file + ".index_data")]
35
- end
36
-
37
- def self.index_cache
38
- @index_data_cache ||= Hash.new do |hash, key|
39
- hash[key] = File.readlines(key).reject{|l| l == ""}.map(&:to_i)
40
- end
41
- end
42
- end
43
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ class Mesh
5
+ include Serializable
6
+
7
+ attr_reader :mesh_file, :source
8
+
9
+ def self.from_serializable_data(data)
10
+ self.for(data[:mesh_file], source: (data[:source] || :game).to_sym)
11
+ end
12
+
13
+ def serializable_data
14
+ { mesh_file: @mesh_file, source: @source }
15
+ end
16
+
17
+ def vertex_data
18
+ @vertex_data ||= Mesh.load_vertex(base_path)
19
+ end
20
+
21
+ def index_data
22
+ @index_data ||= Mesh.load_index(base_path)
23
+ end
24
+
25
+ def self.for(mesh_file, source: :game)
26
+ cache_key = [mesh_file, source]
27
+ mesh_cache[cache_key] ||= create(mesh_file: mesh_file, source: source)
28
+ end
29
+
30
+ def self.mesh_cache
31
+ @mesh_cache ||= {}
32
+ end
33
+
34
+ def self.load_vertex(base_path)
35
+ vertex_cache[base_path + ".vertex_data"]
36
+ end
37
+
38
+ def self.vertex_cache
39
+ @vertex_cache ||= Hash.new do |hash, key|
40
+ hash[key] = File.readlines(key).reject{|l| l == ""}.map(&:to_f)
41
+ end
42
+ end
43
+
44
+ def self.load_index(base_path)
45
+ index_cache[base_path + ".index_data"]
46
+ end
47
+
48
+ def self.index_cache
49
+ @index_cache ||= Hash.new do |hash, key|
50
+ hash[key] = File.readlines(key).reject{|l| l == ""}.map(&:to_i)
51
+ end
52
+ end
53
+
54
+ def self.quad
55
+ @quad ||= QuadMesh.new
56
+ end
57
+
58
+ private
59
+
60
+ def base_path
61
+ @base_path ||= if @source == :engine
62
+ File.join(ENGINE_DIR, "assets", "_imported", @mesh_file)
63
+ else
64
+ File.join(GAME_DIR, "_imported", @mesh_file)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'device'
4
+
5
+ module Engine
6
+ module Metal
7
+ class ComputeShader
8
+ include Fiddle
9
+
10
+ def initialize(shader_path)
11
+ @device = Device.instance
12
+ @uniform_buffer_data = {}
13
+
14
+ path = File.expand_path(File.join(GAME_DIR, shader_path))
15
+ source = File.read(path)
16
+
17
+ @library = @device.new_library_with_source(source)
18
+ @pipeline = @device.new_compute_pipeline(@library, 'computeMain')
19
+
20
+ # Get thread execution width for optimal dispatch
21
+ @thread_width = ObjC.msg(@pipeline, 'threadExecutionWidth').to_i
22
+ @thread_height = ObjC.msg(@pipeline, 'maxTotalThreadsPerThreadgroup').to_i / @thread_width
23
+ end
24
+
25
+ def dispatch(width, height, depth, textures: [], floats: {}, ints: {})
26
+ command_buffer = @device.new_command_buffer
27
+ encoder = ObjC.msg(command_buffer, 'computeCommandEncoder')
28
+
29
+ # Set the pipeline state
30
+ ObjC.msg(encoder, 'setComputePipelineState:', @pipeline)
31
+
32
+ # Set textures (extract metal_texture from ComputeTexture objects)
33
+ textures.each_with_index do |texture, index|
34
+ next if texture.nil?
35
+ metal_tex = texture.respond_to?(:metal_texture) ? texture.metal_texture : texture
36
+ ObjC.msg(encoder, 'setTexture:atIndex:', metal_tex, index)
37
+ end
38
+
39
+ # Create uniform buffer with floats and ints
40
+ if floats.any? || ints.any?
41
+ uniform_data = create_uniform_buffer(floats, ints)
42
+ uniform_buffer = create_metal_buffer(uniform_data)
43
+ ObjC.msg(encoder, 'setBuffer:offset:atIndex:', uniform_buffer, 0, 0)
44
+ end
45
+
46
+ # Calculate thread groups
47
+ # Use dispatchThreads for simpler dispatch (Metal 2.0+)
48
+ threads = create_mtl_size_ptr(width, height, depth)
49
+ threads_per_group = create_mtl_size_ptr(@thread_width, @thread_height, 1)
50
+
51
+ # Use objc_msgSend_stret variant for struct-passing methods
52
+ dispatch_threads(encoder, threads, threads_per_group)
53
+
54
+ ObjC.msg(encoder, 'endEncoding')
55
+ ObjC.msg(command_buffer, 'commit')
56
+ ObjC.msg(command_buffer, 'waitUntilCompleted')
57
+
58
+ # Sync textures to make results available for OpenGL rendering
59
+ textures.each { |tex| tex.sync if tex.respond_to?(:sync) }
60
+ end
61
+
62
+ private
63
+
64
+ def create_uniform_buffer(floats, ints)
65
+ # Pack uniforms into a byte buffer
66
+ # Layout: all floats first, then ints (aligned to 4 bytes)
67
+ data = []
68
+ floats.each_value { |v| data.concat([v].pack('f').bytes) }
69
+ ints.each_value { |v| data.concat([v].pack('i').bytes) }
70
+ data.pack('C*')
71
+ end
72
+
73
+ def create_metal_buffer(data)
74
+ data_ptr = Pointer[data]
75
+ ObjC.msg(
76
+ @device.device,
77
+ 'newBufferWithBytes:length:options:',
78
+ data_ptr,
79
+ data.bytesize,
80
+ 0 # MTLResourceStorageModeShared
81
+ )
82
+ end
83
+
84
+ def create_mtl_size_ptr(width, height, depth)
85
+ # MTLSize is a struct { width, height, depth } - 3 NSUInteger (64-bit each)
86
+ data = [width, height, depth].pack('Q3')
87
+ ptr = Pointer.malloc(24)
88
+ ptr[0, 24] = data
89
+ ptr
90
+ end
91
+
92
+ def dispatch_threads(encoder, threads, threads_per_group)
93
+ # dispatchThreads:threadsPerThreadgroup: passes MTLSize structs
94
+ # On ARM64, structs > 16 bytes are passed by pointer in x8
95
+ # We need to use objc_msgSend directly with proper calling convention
96
+
97
+ sel = ObjC.sel('dispatchThreads:threadsPerThreadgroup:')
98
+
99
+ # Build a function that takes the struct values directly
100
+ # ARM64 ABI: first 8 args in x0-x7, structs by value if <= 16 bytes, else by pointer
101
+ # MTLSize is 24 bytes, so passed by pointer
102
+
103
+ func = Fiddle::Function.new(
104
+ ObjC::OBJC_MSGSEND_ADDR,
105
+ [
106
+ Fiddle::TYPE_VOIDP, # self (encoder)
107
+ Fiddle::TYPE_VOIDP, # _cmd (selector)
108
+ Fiddle::TYPE_VOIDP, # threads (pointer to MTLSize)
109
+ Fiddle::TYPE_VOIDP # threadsPerThreadgroup (pointer to MTLSize)
110
+ ],
111
+ Fiddle::TYPE_VOID
112
+ )
113
+
114
+ func.call(encoder, sel, threads, threads_per_group)
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,176 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'metal_bindings'
4
+ require_relative 'device'
5
+
6
+ module Engine
7
+ module Metal
8
+ class ComputeTexture
9
+ include Fiddle
10
+
11
+ attr_reader :width, :height, :gl_texture, :metal_texture
12
+
13
+ # IOSurface property keys
14
+ IOSURFACE_WIDTH = 'IOSurfaceWidth'
15
+ IOSURFACE_HEIGHT = 'IOSurfaceHeight'
16
+ IOSURFACE_BYTES_PER_ELEMENT = 'IOSurfaceBytesPerElement'
17
+ IOSURFACE_BYTES_PER_ROW = 'IOSurfaceBytesPerRow'
18
+ IOSURFACE_ALLOC_SIZE = 'IOSurfaceAllocSize'
19
+ IOSURFACE_PIXEL_FORMAT = 'IOSurfacePixelFormat'
20
+
21
+ # Pixel format for RGBA32F
22
+ PIXEL_FORMAT_RGBA32F = 0x52474241 # 'RGBA' as 32-bit int
23
+
24
+ def initialize(width, height)
25
+ @width = width
26
+ @height = height
27
+ @device = Device.instance
28
+
29
+ create_iosurface
30
+ create_metal_texture
31
+ create_gl_rect_texture
32
+ create_gl_2d_texture
33
+ setup_blit_fbo
34
+ end
35
+
36
+ def sync
37
+ Engine::GL.BindFramebuffer(Engine::GL::READ_FRAMEBUFFER, @read_fbo)
38
+ Engine::GL.BindFramebuffer(Engine::GL::DRAW_FRAMEBUFFER, @draw_fbo)
39
+
40
+ Engine::GL.BlitFramebuffer(
41
+ 0, 0, @width, @height,
42
+ 0, 0, @width, @height,
43
+ Engine::GL::COLOR_BUFFER_BIT,
44
+ Engine::GL::NEAREST
45
+ )
46
+
47
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, 0)
48
+ Engine::GL.Finish
49
+ end
50
+
51
+ private
52
+
53
+ def create_iosurface
54
+ props = create_iosurface_properties
55
+ @iosurface = IOSurfaceFramework.IOSurfaceCreate(props)
56
+
57
+ if @iosurface.null? || @iosurface.to_i == 0
58
+ raise "Failed to create IOSurface"
59
+ end
60
+
61
+ CoreFoundation.CFRelease(props)
62
+ end
63
+
64
+ def create_iosurface_properties
65
+ dict = CoreFoundation.CFDictionaryCreateMutable(nil, 0, nil, nil)
66
+
67
+ bytes_per_element = 16 # 4 floats * 4 bytes
68
+ bytes_per_row = @width * bytes_per_element
69
+ alloc_size = bytes_per_row * @height
70
+
71
+ set_dict_int(dict, IOSURFACE_WIDTH, @width)
72
+ set_dict_int(dict, IOSURFACE_HEIGHT, @height)
73
+ set_dict_int(dict, IOSURFACE_BYTES_PER_ELEMENT, bytes_per_element)
74
+ set_dict_int(dict, IOSURFACE_BYTES_PER_ROW, bytes_per_row)
75
+ set_dict_int(dict, IOSURFACE_ALLOC_SIZE, alloc_size)
76
+ set_dict_int(dict, IOSURFACE_PIXEL_FORMAT, PIXEL_FORMAT_RGBA32F)
77
+
78
+ dict
79
+ end
80
+
81
+ def set_dict_int(dict, key, value)
82
+ key_str = ObjC.msg(ObjC.cls('NSString'), 'stringWithUTF8String:', key)
83
+ num = CoreFoundation.create_int(value)
84
+ CoreFoundation.CFDictionarySetValue(dict, key_str, num)
85
+ end
86
+
87
+ def create_metal_texture
88
+ descriptor = ObjC.msg(ObjC.cls('MTLTextureDescriptor'), 'new')
89
+
90
+ # MTLPixelFormatRGBA32Float = 125
91
+ ObjC.msg(descriptor, 'setPixelFormat:', 125)
92
+ ObjC.msg(descriptor, 'setWidth:', @width)
93
+ ObjC.msg(descriptor, 'setHeight:', @height)
94
+ # MTLTextureUsageShaderRead | MTLTextureUsageShaderWrite = 1 | 2 = 3
95
+ ObjC.msg(descriptor, 'setUsage:', 3)
96
+ # MTLStorageModeShared = 0
97
+ ObjC.msg(descriptor, 'setStorageMode:', 0)
98
+
99
+ @metal_texture = ObjC.msg(
100
+ @device.device,
101
+ 'newTextureWithDescriptor:iosurface:plane:',
102
+ descriptor,
103
+ @iosurface,
104
+ 0
105
+ )
106
+
107
+ if @metal_texture.null? || @metal_texture.to_i == 0
108
+ raise "Failed to create Metal texture from IOSurface"
109
+ end
110
+ end
111
+
112
+ def create_gl_rect_texture
113
+ tex_buf = ' ' * 4
114
+ Engine::GL.GenTextures(1, tex_buf)
115
+ @gl_texture_rect = tex_buf.unpack('L')[0]
116
+
117
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_RECTANGLE, @gl_texture_rect)
118
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_RECTANGLE, Engine::GL::TEXTURE_MIN_FILTER, Engine::GL::LINEAR)
119
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_RECTANGLE, Engine::GL::TEXTURE_MAG_FILTER, Engine::GL::LINEAR)
120
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_RECTANGLE, Engine::GL::TEXTURE_WRAP_S, Engine::GL::CLAMP_TO_EDGE)
121
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_RECTANGLE, Engine::GL::TEXTURE_WRAP_T, Engine::GL::CLAMP_TO_EDGE)
122
+
123
+ cgl_context = OpenGLBridge.CGLGetCurrentContext()
124
+
125
+ result = OpenGLBridge.CGLTexImageIOSurface2D(
126
+ cgl_context,
127
+ Engine::GL::TEXTURE_RECTANGLE,
128
+ Engine::GL::RGBA32F,
129
+ @width,
130
+ @height,
131
+ Engine::GL::RGBA,
132
+ Engine::GL::FLOAT,
133
+ @iosurface,
134
+ 0
135
+ )
136
+
137
+ raise "Failed to bind IOSurface to GL texture: #{result}" unless result == 0
138
+
139
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_RECTANGLE, 0)
140
+ end
141
+
142
+ def create_gl_2d_texture
143
+ tex_buf = ' ' * 4
144
+ Engine::GL.GenTextures(1, tex_buf)
145
+ @gl_texture = tex_buf.unpack('L')[0]
146
+
147
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, @gl_texture)
148
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MIN_FILTER, Engine::GL::LINEAR)
149
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MAG_FILTER, Engine::GL::LINEAR)
150
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_S, Engine::GL::REPEAT)
151
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_T, Engine::GL::REPEAT)
152
+
153
+ Engine::GL.TexImage2D(Engine::GL::TEXTURE_2D, 0, Engine::GL::RGBA32F, @width, @height, 0, Engine::GL::RGBA, Engine::GL::FLOAT, nil)
154
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, 0)
155
+ end
156
+
157
+ def setup_blit_fbo
158
+ read_fbo_buf = ' ' * 4
159
+ Engine::GL.GenFramebuffers(1, read_fbo_buf)
160
+ @read_fbo = read_fbo_buf.unpack('L')[0]
161
+
162
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, @read_fbo)
163
+ Engine::GL.FramebufferTexture2D(Engine::GL::FRAMEBUFFER, Engine::GL::COLOR_ATTACHMENT0, Engine::GL::TEXTURE_RECTANGLE, @gl_texture_rect, 0)
164
+
165
+ draw_fbo_buf = ' ' * 4
166
+ Engine::GL.GenFramebuffers(1, draw_fbo_buf)
167
+ @draw_fbo = draw_fbo_buf.unpack('L')[0]
168
+
169
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, @draw_fbo)
170
+ Engine::GL.FramebufferTexture2D(Engine::GL::FRAMEBUFFER, Engine::GL::COLOR_ATTACHMENT0, Engine::GL::TEXTURE_2D, @gl_texture, 0)
171
+
172
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, 0)
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'metal_bindings'
4
+
5
+ module Engine
6
+ module Metal
7
+ class Device
8
+ include Fiddle
9
+
10
+ attr_reader :device, :command_queue
11
+
12
+ def self.instance
13
+ @instance ||= new
14
+ end
15
+
16
+ def initialize
17
+ @device = MetalFramework.create_system_default_device
18
+ raise "Failed to create Metal device" if @device.null?
19
+
20
+ @command_queue = ObjC.msg(@device, 'newCommandQueue')
21
+ raise "Failed to create command queue" if @command_queue.null?
22
+ end
23
+
24
+ def new_library_with_source(source)
25
+ # Create NSString from source
26
+ ns_string_class = ObjC.cls('NSString')
27
+ source_nsstring = ObjC.msg(
28
+ ns_string_class,
29
+ 'stringWithUTF8String:',
30
+ source
31
+ )
32
+
33
+ # Create error pointer
34
+ error_ptr = Pointer.malloc(8)
35
+ error_ptr[0, 8] = [0].pack('Q')
36
+
37
+ # Compile the library
38
+ library = ObjC.msg(
39
+ @device,
40
+ 'newLibraryWithSource:options:error:',
41
+ source_nsstring,
42
+ nil,
43
+ error_ptr
44
+ )
45
+
46
+ if library.null?
47
+ error = Pointer.new(error_ptr[0, 8].unpack('Q')[0])
48
+ unless error.null?
49
+ desc = ObjC.msg(error, 'localizedDescription')
50
+ utf8 = ObjC.msg(desc, 'UTF8String')
51
+ raise "Metal shader compilation failed: #{utf8.to_s}"
52
+ end
53
+ raise "Metal shader compilation failed with unknown error"
54
+ end
55
+
56
+ library
57
+ end
58
+
59
+ def new_compute_pipeline(library, function_name)
60
+ # Get function from library
61
+ func_name_nsstring = ObjC.msg(
62
+ ObjC.cls('NSString'),
63
+ 'stringWithUTF8String:',
64
+ function_name
65
+ )
66
+ function = ObjC.msg(library, 'newFunctionWithName:', func_name_nsstring)
67
+ raise "Failed to find function '#{function_name}'" if function.null?
68
+
69
+ # Create compute pipeline
70
+ error_ptr = Pointer.malloc(8)
71
+ error_ptr[0, 8] = [0].pack('Q')
72
+
73
+ pipeline = ObjC.msg(
74
+ @device,
75
+ 'newComputePipelineStateWithFunction:error:',
76
+ function,
77
+ error_ptr
78
+ )
79
+
80
+ if pipeline.null?
81
+ error = Pointer.new(error_ptr[0, 8].unpack('Q')[0])
82
+ unless error.null?
83
+ desc = ObjC.msg(error, 'localizedDescription')
84
+ utf8 = ObjC.msg(desc, 'UTF8String')
85
+ raise "Failed to create compute pipeline: #{utf8.to_s}"
86
+ end
87
+ raise "Failed to create compute pipeline with unknown error"
88
+ end
89
+
90
+ pipeline
91
+ end
92
+
93
+ def new_command_buffer
94
+ ObjC.msg(@command_queue, 'commandBuffer')
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fiddle'
4
+ require 'fiddle/import'
5
+
6
+ module Engine
7
+ module Metal
8
+ module ObjC
9
+ extend Fiddle::Importer
10
+ dlload '/usr/lib/libobjc.A.dylib'
11
+
12
+ extern 'void* objc_getClass(const char*)'
13
+ extern 'void* sel_registerName(const char*)'
14
+
15
+ # We need to handle objc_msgSend manually for variadic args
16
+ OBJC_LIB = Fiddle.dlopen('/usr/lib/libobjc.A.dylib')
17
+ OBJC_MSGSEND_ADDR = OBJC_LIB['objc_msgSend']
18
+
19
+ def self.cls(name)
20
+ objc_getClass(name)
21
+ end
22
+
23
+ def self.sel(name)
24
+ sel_registerName(name)
25
+ end
26
+
27
+ def self.msg(obj, selector, *args)
28
+ sel_ptr = sel(selector)
29
+
30
+ # Build argument types: obj, sel, then args
31
+ arg_types = [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VOIDP]
32
+ call_args = [obj, sel_ptr]
33
+
34
+ args.each do |arg|
35
+ case arg
36
+ when Integer
37
+ arg_types << Fiddle::TYPE_LONG
38
+ call_args << arg
39
+ when Float
40
+ arg_types << Fiddle::TYPE_DOUBLE
41
+ call_args << arg
42
+ when String
43
+ arg_types << Fiddle::TYPE_VOIDP
44
+ call_args << Fiddle::Pointer[arg]
45
+ when Fiddle::Pointer
46
+ arg_types << Fiddle::TYPE_VOIDP
47
+ call_args << arg
48
+ when nil
49
+ arg_types << Fiddle::TYPE_VOIDP
50
+ call_args << Fiddle::Pointer.new(0)
51
+ else
52
+ # Assume it's a pointer-like thing
53
+ arg_types << Fiddle::TYPE_VOIDP
54
+ call_args << arg
55
+ end
56
+ end
57
+
58
+ func = Fiddle::Function.new(OBJC_MSGSEND_ADDR, arg_types, Fiddle::TYPE_VOIDP)
59
+ result = func.call(*call_args)
60
+ Fiddle::Pointer.new(result)
61
+ end
62
+ end
63
+
64
+ module MetalFramework
65
+ extend Fiddle::Importer
66
+ dlload '/System/Library/Frameworks/Metal.framework/Metal'
67
+ dlload '/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics'
68
+
69
+ # Get default device via Objective-C runtime instead of C function
70
+ def self.create_system_default_device
71
+ # MTLCopyAllDevices returns an NSArray of devices, first one is default
72
+ devices = ObjC.msg(ObjC.cls('MTLCopyAllDevicesWithObserver'), 'alloc')
73
+ # Simpler: use the class method on MTLDevice protocol
74
+ # Actually, let's just call the C function through a different approach
75
+ metal_lib = Fiddle.dlopen('/System/Library/Frameworks/Metal.framework/Metal')
76
+ create_device = Fiddle::Function.new(
77
+ metal_lib['MTLCreateSystemDefaultDevice'],
78
+ [],
79
+ Fiddle::TYPE_VOIDP
80
+ )
81
+ create_device.call
82
+ end
83
+ end
84
+
85
+ module IOSurfaceFramework
86
+ extend Fiddle::Importer
87
+ dlload '/System/Library/Frameworks/IOSurface.framework/IOSurface'
88
+
89
+ extern 'void* IOSurfaceCreate(void*)'
90
+ extern 'int IOSurfaceLock(void*, int, void*)'
91
+ extern 'int IOSurfaceUnlock(void*, int, void*)'
92
+ extern 'void* IOSurfaceGetBaseAddress(void*)'
93
+ extern 'int IOSurfaceGetWidth(void*)'
94
+ extern 'int IOSurfaceGetHeight(void*)'
95
+ extern 'int IOSurfaceGetBytesPerRow(void*)'
96
+ end
97
+
98
+ module CoreFoundation
99
+ extend Fiddle::Importer
100
+ dlload '/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation'
101
+
102
+ extern 'void* CFDictionaryCreateMutable(void*, long, void*, void*)'
103
+ extern 'void CFDictionarySetValue(void*, void*, void*)'
104
+ extern 'void* CFNumberCreate(void*, int, void*)'
105
+ extern 'void CFRelease(void*)'
106
+
107
+ # CFNumber types
108
+ CFNUMBER_INT_TYPE = 9
109
+ CFNUMBER_FLOAT_TYPE = 12
110
+
111
+ def self.create_int(value)
112
+ ptr = Fiddle::Pointer.malloc(4)
113
+ ptr[0, 4] = [value].pack('i')
114
+ CFNumberCreate(nil, CFNUMBER_INT_TYPE, ptr)
115
+ end
116
+ end
117
+
118
+ module OpenGLBridge
119
+ extend Fiddle::Importer
120
+ dlload '/System/Library/Frameworks/OpenGL.framework/OpenGL'
121
+
122
+ extern 'int CGLTexImageIOSurface2D(void*, int, int, int, int, int, int, void*, int)'
123
+ extern 'void* CGLGetCurrentContext()'
124
+ end
125
+ end
126
+ end