ruby_rpg 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +43 -21
  3. data/bin/build.bash +13 -13
  4. data/bin/import +54 -44
  5. data/ext/gl_native/extconf.rb +20 -0
  6. data/ext/gl_native/gl_native.c +563 -0
  7. data/ext/glfw_native/extconf.rb +18 -0
  8. data/ext/glfw_native/glfw_native.c +451 -0
  9. data/lib/engine/assets/_imported/cube.index_data +36 -0
  10. data/lib/engine/assets/_imported/cube.vertex_data +720 -0
  11. data/lib/engine/assets/_imported/plane.index_data +6 -0
  12. data/lib/engine/assets/_imported/plane.vertex_data +120 -0
  13. data/lib/engine/assets/_imported/sphere.index_data +2880 -0
  14. data/lib/engine/assets/_imported/sphere.vertex_data +57600 -0
  15. data/lib/engine/assets/cube.obj +46 -0
  16. data/lib/engine/assets/plane.obj +16 -0
  17. data/lib/engine/assets/sphere.obj +2488 -0
  18. data/lib/engine/autoloader.rb +11 -11
  19. data/lib/engine/camera.rb +12 -12
  20. data/lib/engine/component.rb +65 -63
  21. data/lib/engine/components/audio_source.rb +43 -41
  22. data/lib/engine/components/direction_light.rb +102 -23
  23. data/lib/engine/components/orthographic_camera.rb +60 -54
  24. data/lib/engine/components/perspective_camera.rb +76 -53
  25. data/lib/engine/components/point_light.rb +80 -24
  26. data/lib/engine/components/renderers/font_renderer.rb +19 -0
  27. data/lib/engine/components/renderers/font_renderer_base.rb +134 -0
  28. data/lib/engine/components/renderers/mesh_renderer.rb +41 -0
  29. data/lib/engine/components/renderers/sprite_renderer.rb +46 -0
  30. data/lib/engine/components/spot_light.rb +90 -0
  31. data/lib/engine/components/sprite_animator.rb +42 -0
  32. data/lib/engine/components/ui/flex/layout.rb +94 -0
  33. data/lib/engine/components/ui/flex/pack_layout.rb +65 -0
  34. data/lib/engine/components/ui/flex/stretch_layout.rb +52 -0
  35. data/lib/engine/components/ui/flex.rb +60 -0
  36. data/lib/engine/components/ui/font_renderer.rb +57 -0
  37. data/lib/engine/components/ui/rect.rb +117 -0
  38. data/lib/engine/components/ui/sprite_clickbox.rb +47 -0
  39. data/lib/engine/components/ui/sprite_renderer.rb +117 -0
  40. data/lib/engine/compute_shader.rb +14 -93
  41. data/lib/engine/compute_texture.rb +13 -0
  42. data/lib/engine/cursor.rb +43 -43
  43. data/lib/engine/debugging.rb +41 -41
  44. data/lib/engine/engine.rb +127 -131
  45. data/lib/engine/font.rb +99 -74
  46. data/lib/engine/game_object.rb +306 -234
  47. data/lib/engine/gl.rb +439 -0
  48. data/lib/engine/glfw.rb +151 -0
  49. data/lib/engine/importers/font_importer.rb +69 -69
  50. data/lib/engine/importers/obj_file.rb +244 -244
  51. data/lib/engine/importers/obj_importer.rb +33 -33
  52. data/lib/engine/input.rb +212 -105
  53. data/lib/engine/material.rb +214 -79
  54. data/lib/engine/matrix_helpers.rb +38 -0
  55. data/lib/engine/mesh.rb +68 -43
  56. data/lib/engine/metal/compute_shader.rb +118 -0
  57. data/lib/engine/metal/compute_texture.rb +176 -0
  58. data/lib/engine/metal/device.rb +98 -0
  59. data/lib/engine/metal/metal_bindings.rb +126 -0
  60. data/lib/engine/opengl/compute_shader.rb +77 -0
  61. data/lib/engine/opengl/compute_texture.rb +31 -0
  62. data/lib/engine/path.rb +92 -92
  63. data/lib/engine/physics/collision.rb +12 -12
  64. data/lib/engine/physics/components/cube_collider.rb +6 -6
  65. data/lib/engine/physics/components/rigidbody.rb +106 -103
  66. data/lib/engine/physics/components/sphere_collider.rb +103 -93
  67. data/lib/engine/physics/physics_resolver.rb +49 -37
  68. data/lib/engine/polygon_mesh.rb +45 -45
  69. data/lib/engine/quaternion.rb +234 -234
  70. data/lib/engine/rendering/cubemap_shadow_map_array.rb +77 -0
  71. data/lib/engine/rendering/gpu_timer.rb +68 -0
  72. data/lib/engine/rendering/instance_renderer.rb +232 -153
  73. data/lib/engine/rendering/post_processing/bloom_effect.rb +87 -0
  74. data/lib/engine/rendering/post_processing/depth_debug_effect.rb +17 -0
  75. data/lib/engine/rendering/post_processing/depth_of_field_effect.rb +52 -0
  76. data/lib/engine/rendering/post_processing/effect.rb +11 -0
  77. data/lib/engine/rendering/post_processing/post_processing_effect.rb +86 -0
  78. data/lib/engine/rendering/post_processing/single_pass_effect.rb +19 -0
  79. data/lib/engine/rendering/post_processing/ssao_effect.rb +182 -0
  80. data/lib/engine/rendering/post_processing/ssr_effect.rb +89 -0
  81. data/lib/engine/rendering/post_processing/tint_effect.rb +18 -0
  82. data/lib/engine/rendering/render_pipeline.rb +267 -35
  83. data/lib/engine/rendering/render_texture.rb +118 -0
  84. data/lib/engine/rendering/screen_quad.rb +64 -0
  85. data/lib/engine/rendering/shadow_map_array.rb +72 -0
  86. data/lib/engine/rendering/skybox_cubemap.rb +119 -0
  87. data/lib/engine/rendering/skybox_renderer.rb +64 -0
  88. data/lib/engine/rendering/ui/stencil_manager.rb +69 -0
  89. data/lib/engine/screenshoter.rb +34 -34
  90. data/lib/engine/serialization/graph_serializer.rb +74 -0
  91. data/lib/engine/serialization/object_serializer.rb +98 -0
  92. data/lib/engine/serialization/serializable.rb +78 -0
  93. data/lib/engine/serialization/yaml_persistence.rb +45 -0
  94. data/lib/engine/shader.rb +215 -119
  95. data/lib/engine/shaders/colour_frag.glsl +16 -8
  96. data/lib/engine/shaders/colour_vertex.glsl +20 -13
  97. data/lib/engine/shaders/fullscreen_frag.glsl +11 -0
  98. data/lib/engine/shaders/fullscreen_vertex.glsl +12 -0
  99. data/lib/engine/shaders/instanced_sprite_frag.glsl +21 -0
  100. data/lib/engine/shaders/{skybox_vert.glsl → instanced_sprite_vertex.glsl} +15 -14
  101. data/lib/engine/shaders/lighting/directional_light.glsl +49 -0
  102. data/lib/engine/shaders/lighting/lighting.glsl +33 -0
  103. data/lib/engine/shaders/lighting/lighting_common.glsl +13 -0
  104. data/lib/engine/shaders/lighting/point_light.glsl +46 -0
  105. data/lib/engine/shaders/lighting/spot_light.glsl +80 -0
  106. data/lib/engine/shaders/mesh_frag.glsl +53 -102
  107. data/lib/engine/shaders/mesh_vertex.glsl +25 -25
  108. data/lib/engine/shaders/point_shadow_frag.glsl +12 -0
  109. data/lib/engine/shaders/point_shadow_vertex.glsl +15 -0
  110. data/lib/engine/shaders/post_process/bloom_blur_frag.glsl +25 -0
  111. data/lib/engine/shaders/post_process/bloom_combine_frag.glsl +19 -0
  112. data/lib/engine/shaders/post_process/bloom_threshold_frag.glsl +19 -0
  113. data/lib/engine/shaders/post_process/debug_normals_frag.glsl +21 -0
  114. data/lib/engine/shaders/post_process/depth_debug_frag.glsl +17 -0
  115. data/lib/engine/shaders/post_process/dof_blur_frag.glsl +52 -0
  116. data/lib/engine/shaders/post_process/skybox_frag.glsl +29 -0
  117. data/lib/engine/shaders/post_process/ssao/blur_frag.glsl +50 -0
  118. data/lib/engine/shaders/post_process/ssao/combine_frag.glsl +15 -0
  119. data/lib/engine/shaders/post_process/ssao/frag.glsl +99 -0
  120. data/lib/engine/shaders/post_process/ssr/combine_frag.glsl +16 -0
  121. data/lib/engine/shaders/post_process/ssr/frag.glsl +118 -0
  122. data/lib/engine/shaders/post_process/tint_frag.glsl +14 -0
  123. data/lib/engine/shaders/shadow_frag.glsl +6 -0
  124. data/lib/engine/shaders/shadow_vertex.glsl +11 -0
  125. data/lib/engine/shaders/skybox_cubemap_frag.glsl +46 -0
  126. data/lib/engine/shaders/sprite_frag.glsl +17 -17
  127. data/lib/engine/shaders/sprite_vertex.glsl +15 -15
  128. data/lib/engine/shaders/text_frag.glsl +15 -15
  129. data/lib/engine/shaders/text_vertex.glsl +31 -31
  130. data/lib/engine/shaders/ui_sprite_frag.glsl +15 -15
  131. data/lib/engine/shaders/ui_sprite_vertex.glsl +15 -15
  132. data/lib/engine/shaders/vertex_lit_frag.glsl +33 -89
  133. data/lib/engine/shaders/vertex_lit_vertex.glsl +28 -28
  134. data/lib/engine/standard_meshes/quad_mesh.rb +26 -0
  135. data/lib/engine/standard_objects/cube.rb +23 -0
  136. data/lib/engine/standard_objects/default_material.rb +20 -0
  137. data/lib/engine/standard_objects/plane.rb +23 -0
  138. data/lib/engine/standard_objects/sphere.rb +23 -0
  139. data/lib/engine/tangent_calculator.rb +42 -42
  140. data/lib/engine/texture.rb +62 -53
  141. data/lib/engine/ui/rect.rb +16 -0
  142. data/lib/engine/video_mode.rb +37 -37
  143. data/lib/engine/window.rb +126 -126
  144. data/lib/ruby_rpg.rb +116 -58
  145. data/vendor/glew-2.2.0-win32/LICENSE.txt +73 -0
  146. data/vendor/glew-2.2.0-win32/bin/Release/x64/glew32.dll +0 -0
  147. data/vendor/glew-2.2.0-win32/include/GL/glew.h +26427 -0
  148. data/vendor/glew-2.2.0-win32/lib/Release/x64/glew32.lib +0 -0
  149. data/{glfw-3.3.9.bin.MACOS → vendor/glfw-3.3.9.bin.MACOS}/lib-arm64/libglfw.3.dylib +0 -0
  150. data/{glfw-3.3.9.bin.MACOS → vendor/glfw-3.4.bin.WIN64}/LICENSE.md +23 -23
  151. metadata +122 -463
  152. data/glfw-3.3.9.bin.MACOS/README.md +0 -5
  153. data/glfw-3.3.9.bin.MACOS/docs/html/bc_s.png +0 -0
  154. data/glfw-3.3.9.bin.MACOS/docs/html/bc_sd.png +0 -0
  155. data/glfw-3.3.9.bin.MACOS/docs/html/build_8dox.html +0 -81
  156. data/glfw-3.3.9.bin.MACOS/docs/html/build_guide.html +0 -199
  157. data/glfw-3.3.9.bin.MACOS/docs/html/closed.png +0 -0
  158. data/glfw-3.3.9.bin.MACOS/docs/html/compat_8dox.html +0 -81
  159. data/glfw-3.3.9.bin.MACOS/docs/html/compat_guide.html +0 -153
  160. data/glfw-3.3.9.bin.MACOS/docs/html/compile_8dox.html +0 -81
  161. data/glfw-3.3.9.bin.MACOS/docs/html/compile_guide.html +0 -223
  162. data/glfw-3.3.9.bin.MACOS/docs/html/context_8dox.html +0 -81
  163. data/glfw-3.3.9.bin.MACOS/docs/html/context_guide.html +0 -259
  164. data/glfw-3.3.9.bin.MACOS/docs/html/deprecated.html +0 -88
  165. data/glfw-3.3.9.bin.MACOS/docs/html/dir_08423ce7729c4554356a7de7171ba263.html +0 -85
  166. data/glfw-3.3.9.bin.MACOS/docs/html/dir_2dcebcdf14b42e92a6ed85c61bda6b9d.html +0 -93
  167. data/glfw-3.3.9.bin.MACOS/docs/html/dir_62ce056722ee97c199075aa1d6eca309.html +0 -95
  168. data/glfw-3.3.9.bin.MACOS/docs/html/dir_dddf4cf62655095a666cf715de3a31a2.html +0 -91
  169. data/glfw-3.3.9.bin.MACOS/docs/html/doc.svg +0 -12
  170. data/glfw-3.3.9.bin.MACOS/docs/html/docd.svg +0 -12
  171. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.css +0 -1685
  172. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.svg +0 -28
  173. data/glfw-3.3.9.bin.MACOS/docs/html/dynsections.js +0 -192
  174. data/glfw-3.3.9.bin.MACOS/docs/html/extra.css +0 -1
  175. data/glfw-3.3.9.bin.MACOS/docs/html/files.html +0 -91
  176. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosed.svg +0 -11
  177. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosedd.svg +0 -11
  178. data/glfw-3.3.9.bin.MACOS/docs/html/folderopen.svg +0 -17
  179. data/glfw-3.3.9.bin.MACOS/docs/html/folderopend.svg +0 -12
  180. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h.html +0 -1661
  181. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h_source.html +0 -1175
  182. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h.html +0 -167
  183. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h_source.html +0 -303
  184. data/glfw-3.3.9.bin.MACOS/docs/html/group__buttons.html +0 -282
  185. data/glfw-3.3.9.bin.MACOS/docs/html/group__context.html +0 -304
  186. data/glfw-3.3.9.bin.MACOS/docs/html/group__errors.html +0 -304
  187. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__axes.html +0 -202
  188. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__buttons.html +0 -410
  189. data/glfw-3.3.9.bin.MACOS/docs/html/group__hat__state.html +0 -234
  190. data/glfw-3.3.9.bin.MACOS/docs/html/group__init.html +0 -570
  191. data/glfw-3.3.9.bin.MACOS/docs/html/group__input.html +0 -2255
  192. data/glfw-3.3.9.bin.MACOS/docs/html/group__joysticks.html +0 -362
  193. data/glfw-3.3.9.bin.MACOS/docs/html/group__keys.html +0 -2034
  194. data/glfw-3.3.9.bin.MACOS/docs/html/group__mods.html +0 -198
  195. data/glfw-3.3.9.bin.MACOS/docs/html/group__monitor.html +0 -848
  196. data/glfw-3.3.9.bin.MACOS/docs/html/group__native.html +0 -812
  197. data/glfw-3.3.9.bin.MACOS/docs/html/group__shapes.html +0 -198
  198. data/glfw-3.3.9.bin.MACOS/docs/html/group__vulkan.html +0 -359
  199. data/glfw-3.3.9.bin.MACOS/docs/html/group__window.html +0 -3434
  200. data/glfw-3.3.9.bin.MACOS/docs/html/index.html +0 -100
  201. data/glfw-3.3.9.bin.MACOS/docs/html/input_8dox.html +0 -81
  202. data/glfw-3.3.9.bin.MACOS/docs/html/input_guide.html +0 -570
  203. data/glfw-3.3.9.bin.MACOS/docs/html/internal_8dox.html +0 -81
  204. data/glfw-3.3.9.bin.MACOS/docs/html/internals_guide.html +0 -132
  205. data/glfw-3.3.9.bin.MACOS/docs/html/intro_8dox.html +0 -81
  206. data/glfw-3.3.9.bin.MACOS/docs/html/intro_guide.html +0 -351
  207. data/glfw-3.3.9.bin.MACOS/docs/html/jquery.js +0 -34
  208. data/glfw-3.3.9.bin.MACOS/docs/html/main_8dox.html +0 -81
  209. data/glfw-3.3.9.bin.MACOS/docs/html/menu.js +0 -136
  210. data/glfw-3.3.9.bin.MACOS/docs/html/menudata.js +0 -29
  211. data/glfw-3.3.9.bin.MACOS/docs/html/minus.svg +0 -8
  212. data/glfw-3.3.9.bin.MACOS/docs/html/minusd.svg +0 -8
  213. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_8dox.html +0 -81
  214. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_guide.html +0 -229
  215. data/glfw-3.3.9.bin.MACOS/docs/html/moving_8dox.html +0 -81
  216. data/glfw-3.3.9.bin.MACOS/docs/html/moving_guide.html +0 -374
  217. data/glfw-3.3.9.bin.MACOS/docs/html/nav_f.png +0 -0
  218. data/glfw-3.3.9.bin.MACOS/docs/html/nav_fd.png +0 -0
  219. data/glfw-3.3.9.bin.MACOS/docs/html/nav_g.png +0 -0
  220. data/glfw-3.3.9.bin.MACOS/docs/html/nav_h.png +0 -0
  221. data/glfw-3.3.9.bin.MACOS/docs/html/nav_hd.png +0 -0
  222. data/glfw-3.3.9.bin.MACOS/docs/html/news.html +0 -634
  223. data/glfw-3.3.9.bin.MACOS/docs/html/news_8dox.html +0 -81
  224. data/glfw-3.3.9.bin.MACOS/docs/html/open.png +0 -0
  225. data/glfw-3.3.9.bin.MACOS/docs/html/pages.html +0 -99
  226. data/glfw-3.3.9.bin.MACOS/docs/html/plus.svg +0 -9
  227. data/glfw-3.3.9.bin.MACOS/docs/html/plusd.svg +0 -9
  228. data/glfw-3.3.9.bin.MACOS/docs/html/quick_8dox.html +0 -81
  229. data/glfw-3.3.9.bin.MACOS/docs/html/quick_guide.html +0 -397
  230. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_0.js +0 -5
  231. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1.js +0 -4
  232. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_10.js +0 -65
  233. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_11.js +0 -26
  234. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_12.js +0 -44
  235. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_13.js +0 -34
  236. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_14.js +0 -12
  237. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_15.js +0 -52
  238. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_16.js +0 -69
  239. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_17.js +0 -51
  240. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_18.js +0 -14
  241. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_19.js +0 -36
  242. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1a.js +0 -98
  243. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1b.js +0 -12
  244. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_2.js +0 -6
  245. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_3.js +0 -9
  246. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_4.js +0 -57
  247. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_5.js +0 -22
  248. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_6.js +0 -103
  249. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_7.js +0 -23
  250. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_8.js +0 -35
  251. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_9.js +0 -63
  252. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_a.js +0 -505
  253. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_b.js +0 -24
  254. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_c.js +0 -50
  255. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_d.js +0 -17
  256. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_e.js +0 -12
  257. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_f.js +0 -35
  258. data/glfw-3.3.9.bin.MACOS/docs/html/search/classes_0.js +0 -7
  259. data/glfw-3.3.9.bin.MACOS/docs/html/search/close.svg +0 -18
  260. data/glfw-3.3.9.bin.MACOS/docs/html/search/defines_0.js +0 -34
  261. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_0.js +0 -4
  262. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_1.js +0 -6
  263. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_2.js +0 -5
  264. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_3.js +0 -6
  265. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_4.js +0 -6
  266. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_5.js +0 -4
  267. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_6.js +0 -4
  268. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_7.js +0 -4
  269. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_8.js +0 -4
  270. data/glfw-3.3.9.bin.MACOS/docs/html/search/functions_0.js +0 -146
  271. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_0.js +0 -6
  272. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_1.js +0 -4
  273. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_10.js +0 -4
  274. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_2.js +0 -6
  275. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_3.js +0 -5
  276. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_4.js +0 -4
  277. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_5.js +0 -5
  278. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_6.js +0 -4
  279. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_7.js +0 -5
  280. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_8.js +0 -5
  281. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_9.js +0 -6
  282. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_a.js +0 -6
  283. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_b.js +0 -4
  284. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_c.js +0 -4
  285. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_d.js +0 -7
  286. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_e.js +0 -4
  287. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_f.js +0 -5
  288. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag.svg +0 -24
  289. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_d.svg +0 -24
  290. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_sel.svg +0 -31
  291. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_seld.svg +0 -31
  292. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_0.js +0 -4
  293. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_1.js +0 -4
  294. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_10.js +0 -4
  295. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_2.js +0 -5
  296. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_3.js +0 -4
  297. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_4.js +0 -6
  298. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_5.js +0 -4
  299. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_6.js +0 -4
  300. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_7.js +0 -7
  301. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_8.js +0 -6
  302. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_9.js +0 -4
  303. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_a.js +0 -5
  304. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_b.js +0 -5
  305. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_c.js +0 -4
  306. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_d.js +0 -6
  307. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_e.js +0 -6
  308. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_f.js +0 -4
  309. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.css +0 -291
  310. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.js +0 -840
  311. data/glfw-3.3.9.bin.MACOS/docs/html/search/searchdata.js +0 -39
  312. data/glfw-3.3.9.bin.MACOS/docs/html/search/typedefs_0.js +0 -32
  313. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_0.js +0 -4
  314. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_1.js +0 -6
  315. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_2.js +0 -5
  316. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_3.js +0 -4
  317. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_4.js +0 -4
  318. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_5.js +0 -6
  319. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_6.js +0 -4
  320. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_7.js +0 -4
  321. data/glfw-3.3.9.bin.MACOS/docs/html/spaces.svg +0 -877
  322. data/glfw-3.3.9.bin.MACOS/docs/html/splitbar.png +0 -0
  323. data/glfw-3.3.9.bin.MACOS/docs/html/splitbard.png +0 -0
  324. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgamepadstate.html +0 -134
  325. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgammaramp.html +0 -170
  326. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wimage.html +0 -151
  327. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wvidmode.html +0 -204
  328. data/glfw-3.3.9.bin.MACOS/docs/html/sync_off.png +0 -0
  329. data/glfw-3.3.9.bin.MACOS/docs/html/sync_on.png +0 -0
  330. data/glfw-3.3.9.bin.MACOS/docs/html/tab_a.png +0 -0
  331. data/glfw-3.3.9.bin.MACOS/docs/html/tab_ad.png +0 -0
  332. data/glfw-3.3.9.bin.MACOS/docs/html/tab_b.png +0 -0
  333. data/glfw-3.3.9.bin.MACOS/docs/html/tab_bd.png +0 -0
  334. data/glfw-3.3.9.bin.MACOS/docs/html/tab_h.png +0 -0
  335. data/glfw-3.3.9.bin.MACOS/docs/html/tab_hd.png +0 -0
  336. data/glfw-3.3.9.bin.MACOS/docs/html/tab_s.png +0 -0
  337. data/glfw-3.3.9.bin.MACOS/docs/html/tab_sd.png +0 -0
  338. data/glfw-3.3.9.bin.MACOS/docs/html/tabs.css +0 -1
  339. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_8dox.html +0 -81
  340. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_guide.html +0 -196
  341. data/glfw-3.3.9.bin.MACOS/docs/html/window_8dox.html +0 -81
  342. data/glfw-3.3.9.bin.MACOS/docs/html/window_guide.html +0 -763
  343. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3.h +0 -5932
  344. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3native.h +0 -634
  345. data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw3.a +0 -0
  346. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw.3.dylib +0 -0
  347. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw3.a +0 -0
  348. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw.3.dylib +0 -0
  349. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw3.a +0 -0
  350. data/glfw-3.4.bin.WIN64/README.md +0 -70
  351. data/glfw-3.4.bin.WIN64/docs/html/bc_s.png +0 -0
  352. data/glfw-3.4.bin.WIN64/docs/html/bc_sd.png +0 -0
  353. data/glfw-3.4.bin.WIN64/docs/html/build_8md.html +0 -81
  354. data/glfw-3.4.bin.WIN64/docs/html/build_guide.html +0 -217
  355. data/glfw-3.4.bin.WIN64/docs/html/closed.png +0 -0
  356. data/glfw-3.4.bin.WIN64/docs/html/compat_8md.html +0 -81
  357. data/glfw-3.4.bin.WIN64/docs/html/compat_guide.html +0 -156
  358. data/glfw-3.4.bin.WIN64/docs/html/compile_8md.html +0 -81
  359. data/glfw-3.4.bin.WIN64/docs/html/compile_guide.html +0 -219
  360. data/glfw-3.4.bin.WIN64/docs/html/context_8md.html +0 -81
  361. data/glfw-3.4.bin.WIN64/docs/html/context_guide.html +0 -258
  362. data/glfw-3.4.bin.WIN64/docs/html/deprecated.html +0 -88
  363. data/glfw-3.4.bin.WIN64/docs/html/dir_13577e2d8b9423099662de029791bd7d.html +0 -93
  364. data/glfw-3.4.bin.WIN64/docs/html/dir_7f92719a7fe62e5b064f87d7a3c220b1.html +0 -95
  365. data/glfw-3.4.bin.WIN64/docs/html/dir_a788ef6c2b1e5b367804e0b6ccfd6f11.html +0 -85
  366. data/glfw-3.4.bin.WIN64/docs/html/dir_b11153cd0f4fd04a7564cc166f482635.html +0 -91
  367. data/glfw-3.4.bin.WIN64/docs/html/doc.svg +0 -12
  368. data/glfw-3.4.bin.WIN64/docs/html/docd.svg +0 -12
  369. data/glfw-3.4.bin.WIN64/docs/html/doxygen.css +0 -1685
  370. data/glfw-3.4.bin.WIN64/docs/html/doxygen.svg +0 -28
  371. data/glfw-3.4.bin.WIN64/docs/html/dynsections.js +0 -192
  372. data/glfw-3.4.bin.WIN64/docs/html/extra.css +0 -2
  373. data/glfw-3.4.bin.WIN64/docs/html/files.html +0 -91
  374. data/glfw-3.4.bin.WIN64/docs/html/folderclosed.svg +0 -11
  375. data/glfw-3.4.bin.WIN64/docs/html/folderclosedd.svg +0 -11
  376. data/glfw-3.4.bin.WIN64/docs/html/folderopen.svg +0 -17
  377. data/glfw-3.4.bin.WIN64/docs/html/folderopend.svg +0 -12
  378. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h.html +0 -1910
  379. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h_source.html +0 -1260
  380. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h.html +0 -170
  381. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h_source.html +0 -306
  382. data/glfw-3.4.bin.WIN64/docs/html/group__buttons.html +0 -282
  383. data/glfw-3.4.bin.WIN64/docs/html/group__context.html +0 -304
  384. data/glfw-3.4.bin.WIN64/docs/html/group__errors.html +0 -384
  385. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__axes.html +0 -202
  386. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__buttons.html +0 -410
  387. data/glfw-3.4.bin.WIN64/docs/html/group__hat__state.html +0 -234
  388. data/glfw-3.4.bin.WIN64/docs/html/group__init.html +0 -1015
  389. data/glfw-3.4.bin.WIN64/docs/html/group__input.html +0 -2285
  390. data/glfw-3.4.bin.WIN64/docs/html/group__joysticks.html +0 -362
  391. data/glfw-3.4.bin.WIN64/docs/html/group__keys.html +0 -2034
  392. data/glfw-3.4.bin.WIN64/docs/html/group__mods.html +0 -198
  393. data/glfw-3.4.bin.WIN64/docs/html/group__monitor.html +0 -849
  394. data/glfw-3.4.bin.WIN64/docs/html/group__native.html +0 -837
  395. data/glfw-3.4.bin.WIN64/docs/html/group__shapes.html +0 -337
  396. data/glfw-3.4.bin.WIN64/docs/html/group__vulkan.html +0 -361
  397. data/glfw-3.4.bin.WIN64/docs/html/group__window.html +0 -3608
  398. data/glfw-3.4.bin.WIN64/docs/html/index.html +0 -100
  399. data/glfw-3.4.bin.WIN64/docs/html/input_8md.html +0 -81
  400. data/glfw-3.4.bin.WIN64/docs/html/input_guide.html +0 -576
  401. data/glfw-3.4.bin.WIN64/docs/html/internal_8md.html +0 -81
  402. data/glfw-3.4.bin.WIN64/docs/html/internals_guide.html +0 -135
  403. data/glfw-3.4.bin.WIN64/docs/html/intro_8md.html +0 -81
  404. data/glfw-3.4.bin.WIN64/docs/html/intro_guide.html +0 -429
  405. data/glfw-3.4.bin.WIN64/docs/html/jquery.js +0 -34
  406. data/glfw-3.4.bin.WIN64/docs/html/main_8md.html +0 -81
  407. data/glfw-3.4.bin.WIN64/docs/html/menu.js +0 -136
  408. data/glfw-3.4.bin.WIN64/docs/html/menudata.js +0 -30
  409. data/glfw-3.4.bin.WIN64/docs/html/minus.svg +0 -8
  410. data/glfw-3.4.bin.WIN64/docs/html/minusd.svg +0 -8
  411. data/glfw-3.4.bin.WIN64/docs/html/monitor_8md.html +0 -81
  412. data/glfw-3.4.bin.WIN64/docs/html/monitor_guide.html +0 -228
  413. data/glfw-3.4.bin.WIN64/docs/html/moving_8md.html +0 -81
  414. data/glfw-3.4.bin.WIN64/docs/html/moving_guide.html +0 -360
  415. data/glfw-3.4.bin.WIN64/docs/html/nav_f.png +0 -0
  416. data/glfw-3.4.bin.WIN64/docs/html/nav_fd.png +0 -0
  417. data/glfw-3.4.bin.WIN64/docs/html/nav_g.png +0 -0
  418. data/glfw-3.4.bin.WIN64/docs/html/nav_h.png +0 -0
  419. data/glfw-3.4.bin.WIN64/docs/html/nav_hd.png +0 -0
  420. data/glfw-3.4.bin.WIN64/docs/html/news.html +0 -336
  421. data/glfw-3.4.bin.WIN64/docs/html/news_8md.html +0 -81
  422. data/glfw-3.4.bin.WIN64/docs/html/open.png +0 -0
  423. data/glfw-3.4.bin.WIN64/docs/html/pages.html +0 -99
  424. data/glfw-3.4.bin.WIN64/docs/html/plus.svg +0 -9
  425. data/glfw-3.4.bin.WIN64/docs/html/plusd.svg +0 -9
  426. data/glfw-3.4.bin.WIN64/docs/html/quick_8md.html +0 -81
  427. data/glfw-3.4.bin.WIN64/docs/html/quick_guide.html +0 -406
  428. data/glfw-3.4.bin.WIN64/docs/html/search/all_0.js +0 -4
  429. data/glfw-3.4.bin.WIN64/docs/html/search/all_1.js +0 -4
  430. data/glfw-3.4.bin.WIN64/docs/html/search/all_10.js +0 -13
  431. data/glfw-3.4.bin.WIN64/docs/html/search/all_11.js +0 -11
  432. data/glfw-3.4.bin.WIN64/docs/html/search/all_12.js +0 -26
  433. data/glfw-3.4.bin.WIN64/docs/html/search/all_13.js +0 -51
  434. data/glfw-3.4.bin.WIN64/docs/html/search/all_14.js +0 -22
  435. data/glfw-3.4.bin.WIN64/docs/html/search/all_15.js +0 -35
  436. data/glfw-3.4.bin.WIN64/docs/html/search/all_16.js +0 -29
  437. data/glfw-3.4.bin.WIN64/docs/html/search/all_17.js +0 -8
  438. data/glfw-3.4.bin.WIN64/docs/html/search/all_18.js +0 -44
  439. data/glfw-3.4.bin.WIN64/docs/html/search/all_19.js +0 -60
  440. data/glfw-3.4.bin.WIN64/docs/html/search/all_1a.js +0 -39
  441. data/glfw-3.4.bin.WIN64/docs/html/search/all_1b.js +0 -8
  442. data/glfw-3.4.bin.WIN64/docs/html/search/all_1c.js +0 -32
  443. data/glfw-3.4.bin.WIN64/docs/html/search/all_1d.js +0 -84
  444. data/glfw-3.4.bin.WIN64/docs/html/search/all_1e.js +0 -13
  445. data/glfw-3.4.bin.WIN64/docs/html/search/all_1f.js +0 -4
  446. data/glfw-3.4.bin.WIN64/docs/html/search/all_2.js +0 -5
  447. data/glfw-3.4.bin.WIN64/docs/html/search/all_3.js +0 -4
  448. data/glfw-3.4.bin.WIN64/docs/html/search/all_4.js +0 -4
  449. data/glfw-3.4.bin.WIN64/docs/html/search/all_5.js +0 -4
  450. data/glfw-3.4.bin.WIN64/docs/html/search/all_6.js +0 -4
  451. data/glfw-3.4.bin.WIN64/docs/html/search/all_7.js +0 -58
  452. data/glfw-3.4.bin.WIN64/docs/html/search/all_8.js +0 -21
  453. data/glfw-3.4.bin.WIN64/docs/html/search/all_9.js +0 -82
  454. data/glfw-3.4.bin.WIN64/docs/html/search/all_a.js +0 -20
  455. data/glfw-3.4.bin.WIN64/docs/html/search/all_b.js +0 -26
  456. data/glfw-3.4.bin.WIN64/docs/html/search/all_c.js +0 -35
  457. data/glfw-3.4.bin.WIN64/docs/html/search/all_d.js +0 -555
  458. data/glfw-3.4.bin.WIN64/docs/html/search/all_e.js +0 -23
  459. data/glfw-3.4.bin.WIN64/docs/html/search/all_f.js +0 -40
  460. data/glfw-3.4.bin.WIN64/docs/html/search/classes_0.js +0 -8
  461. data/glfw-3.4.bin.WIN64/docs/html/search/close.svg +0 -18
  462. data/glfw-3.4.bin.WIN64/docs/html/search/defines_0.js +0 -43
  463. data/glfw-3.4.bin.WIN64/docs/html/search/files_0.js +0 -4
  464. data/glfw-3.4.bin.WIN64/docs/html/search/files_1.js +0 -6
  465. data/glfw-3.4.bin.WIN64/docs/html/search/files_2.js +0 -5
  466. data/glfw-3.4.bin.WIN64/docs/html/search/files_3.js +0 -6
  467. data/glfw-3.4.bin.WIN64/docs/html/search/files_4.js +0 -6
  468. data/glfw-3.4.bin.WIN64/docs/html/search/files_5.js +0 -4
  469. data/glfw-3.4.bin.WIN64/docs/html/search/files_6.js +0 -4
  470. data/glfw-3.4.bin.WIN64/docs/html/search/files_7.js +0 -4
  471. data/glfw-3.4.bin.WIN64/docs/html/search/files_8.js +0 -4
  472. data/glfw-3.4.bin.WIN64/docs/html/search/functions_0.js +0 -152
  473. data/glfw-3.4.bin.WIN64/docs/html/search/groups_0.js +0 -6
  474. data/glfw-3.4.bin.WIN64/docs/html/search/groups_1.js +0 -4
  475. data/glfw-3.4.bin.WIN64/docs/html/search/groups_10.js +0 -4
  476. data/glfw-3.4.bin.WIN64/docs/html/search/groups_2.js +0 -6
  477. data/glfw-3.4.bin.WIN64/docs/html/search/groups_3.js +0 -5
  478. data/glfw-3.4.bin.WIN64/docs/html/search/groups_4.js +0 -4
  479. data/glfw-3.4.bin.WIN64/docs/html/search/groups_5.js +0 -5
  480. data/glfw-3.4.bin.WIN64/docs/html/search/groups_6.js +0 -4
  481. data/glfw-3.4.bin.WIN64/docs/html/search/groups_7.js +0 -5
  482. data/glfw-3.4.bin.WIN64/docs/html/search/groups_8.js +0 -5
  483. data/glfw-3.4.bin.WIN64/docs/html/search/groups_9.js +0 -6
  484. data/glfw-3.4.bin.WIN64/docs/html/search/groups_a.js +0 -6
  485. data/glfw-3.4.bin.WIN64/docs/html/search/groups_b.js +0 -4
  486. data/glfw-3.4.bin.WIN64/docs/html/search/groups_c.js +0 -4
  487. data/glfw-3.4.bin.WIN64/docs/html/search/groups_d.js +0 -7
  488. data/glfw-3.4.bin.WIN64/docs/html/search/groups_e.js +0 -4
  489. data/glfw-3.4.bin.WIN64/docs/html/search/groups_f.js +0 -5
  490. data/glfw-3.4.bin.WIN64/docs/html/search/mag.svg +0 -24
  491. data/glfw-3.4.bin.WIN64/docs/html/search/mag_d.svg +0 -24
  492. data/glfw-3.4.bin.WIN64/docs/html/search/mag_sel.svg +0 -31
  493. data/glfw-3.4.bin.WIN64/docs/html/search/mag_seld.svg +0 -31
  494. data/glfw-3.4.bin.WIN64/docs/html/search/pages_0.js +0 -4
  495. data/glfw-3.4.bin.WIN64/docs/html/search/pages_1.js +0 -5
  496. data/glfw-3.4.bin.WIN64/docs/html/search/pages_10.js +0 -5
  497. data/glfw-3.4.bin.WIN64/docs/html/search/pages_11.js +0 -4
  498. data/glfw-3.4.bin.WIN64/docs/html/search/pages_2.js +0 -4
  499. data/glfw-3.4.bin.WIN64/docs/html/search/pages_3.js +0 -5
  500. data/glfw-3.4.bin.WIN64/docs/html/search/pages_4.js +0 -4
  501. data/glfw-3.4.bin.WIN64/docs/html/search/pages_5.js +0 -6
  502. data/glfw-3.4.bin.WIN64/docs/html/search/pages_6.js +0 -4
  503. data/glfw-3.4.bin.WIN64/docs/html/search/pages_7.js +0 -5
  504. data/glfw-3.4.bin.WIN64/docs/html/search/pages_8.js +0 -7
  505. data/glfw-3.4.bin.WIN64/docs/html/search/pages_9.js +0 -7
  506. data/glfw-3.4.bin.WIN64/docs/html/search/pages_a.js +0 -4
  507. data/glfw-3.4.bin.WIN64/docs/html/search/pages_b.js +0 -5
  508. data/glfw-3.4.bin.WIN64/docs/html/search/pages_c.js +0 -4
  509. data/glfw-3.4.bin.WIN64/docs/html/search/pages_d.js +0 -4
  510. data/glfw-3.4.bin.WIN64/docs/html/search/pages_e.js +0 -6
  511. data/glfw-3.4.bin.WIN64/docs/html/search/pages_f.js +0 -6
  512. data/glfw-3.4.bin.WIN64/docs/html/search/search.css +0 -291
  513. data/glfw-3.4.bin.WIN64/docs/html/search/search.js +0 -840
  514. data/glfw-3.4.bin.WIN64/docs/html/search/searchdata.js +0 -39
  515. data/glfw-3.4.bin.WIN64/docs/html/search/typedefs_0.js +0 -36
  516. data/glfw-3.4.bin.WIN64/docs/html/search/variables_0.js +0 -5
  517. data/glfw-3.4.bin.WIN64/docs/html/search/variables_1.js +0 -6
  518. data/glfw-3.4.bin.WIN64/docs/html/search/variables_2.js +0 -4
  519. data/glfw-3.4.bin.WIN64/docs/html/search/variables_3.js +0 -5
  520. data/glfw-3.4.bin.WIN64/docs/html/search/variables_4.js +0 -4
  521. data/glfw-3.4.bin.WIN64/docs/html/search/variables_5.js +0 -4
  522. data/glfw-3.4.bin.WIN64/docs/html/search/variables_6.js +0 -7
  523. data/glfw-3.4.bin.WIN64/docs/html/search/variables_7.js +0 -4
  524. data/glfw-3.4.bin.WIN64/docs/html/search/variables_8.js +0 -4
  525. data/glfw-3.4.bin.WIN64/docs/html/search/variables_9.js +0 -4
  526. data/glfw-3.4.bin.WIN64/docs/html/spaces.svg +0 -877
  527. data/glfw-3.4.bin.WIN64/docs/html/splitbar.png +0 -0
  528. data/glfw-3.4.bin.WIN64/docs/html/splitbard.png +0 -0
  529. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wallocator.html +0 -168
  530. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgamepadstate.html +0 -134
  531. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgammaramp.html +0 -170
  532. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wimage.html +0 -151
  533. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wvidmode.html +0 -204
  534. data/glfw-3.4.bin.WIN64/docs/html/sync_off.png +0 -0
  535. data/glfw-3.4.bin.WIN64/docs/html/sync_on.png +0 -0
  536. data/glfw-3.4.bin.WIN64/docs/html/tab_a.png +0 -0
  537. data/glfw-3.4.bin.WIN64/docs/html/tab_ad.png +0 -0
  538. data/glfw-3.4.bin.WIN64/docs/html/tab_b.png +0 -0
  539. data/glfw-3.4.bin.WIN64/docs/html/tab_bd.png +0 -0
  540. data/glfw-3.4.bin.WIN64/docs/html/tab_h.png +0 -0
  541. data/glfw-3.4.bin.WIN64/docs/html/tab_hd.png +0 -0
  542. data/glfw-3.4.bin.WIN64/docs/html/tab_s.png +0 -0
  543. data/glfw-3.4.bin.WIN64/docs/html/tab_sd.png +0 -0
  544. data/glfw-3.4.bin.WIN64/docs/html/tabs.css +0 -1
  545. data/glfw-3.4.bin.WIN64/docs/html/topics.html +0 -101
  546. data/glfw-3.4.bin.WIN64/docs/html/vulkan_8md.html +0 -81
  547. data/glfw-3.4.bin.WIN64/docs/html/vulkan_guide.html +0 -206
  548. data/glfw-3.4.bin.WIN64/docs/html/window_8md.html +0 -81
  549. data/glfw-3.4.bin.WIN64/docs/html/window_guide.html +0 -806
  550. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3.h +0 -6547
  551. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3native.h +0 -663
  552. data/glfw-3.4.bin.WIN64/lib-mingw-w64/glfw3.dll +0 -0
  553. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3.a +0 -0
  554. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3dll.a +0 -0
  555. data/glfw-3.4.bin.WIN64/lib-static-ucrt/glfw3dll.lib +0 -0
  556. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.dll +0 -0
  557. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.lib +0 -0
  558. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3_mt.lib +0 -0
  559. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3dll.lib +0 -0
  560. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.dll +0 -0
  561. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.lib +0 -0
  562. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3_mt.lib +0 -0
  563. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3dll.lib +0 -0
  564. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.dll +0 -0
  565. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.lib +0 -0
  566. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3_mt.lib +0 -0
  567. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3dll.lib +0 -0
  568. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.dll +0 -0
  569. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.lib +0 -0
  570. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3_mt.lib +0 -0
  571. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3dll.lib +0 -0
  572. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.dll +0 -0
  573. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.lib +0 -0
  574. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3_mt.lib +0 -0
  575. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3dll.lib +0 -0
  576. data/lib/engine/components/font_renderer.rb +0 -134
  577. data/lib/engine/components/mesh_renderer.rb +0 -31
  578. data/lib/engine/components/sprite_renderer.rb +0 -141
  579. data/lib/engine/components/ui_font_renderer.rb +0 -140
  580. data/lib/engine/components/ui_sprite_clickbox.rb +0 -62
  581. data/lib/engine/components/ui_sprite_renderer.rb +0 -101
  582. data/lib/engine/shaders/skybox_frag.glsl +0 -12
  583. /data/{glfw-3.4.bin.WIN64 → vendor/glfw-3.3.9.bin.MACOS}/LICENSE.md +0 -0
  584. /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