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,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class RenderTexture
5
+ attr_reader :width, :height, :framebuffer, :depth_stencil_texture, :color_textures
6
+
7
+ def initialize(width, height, num_color_attachments: 1)
8
+ @width = width
9
+ @height = height
10
+ @num_color_attachments = num_color_attachments
11
+ @color_textures = []
12
+ create_framebuffer
13
+ create_color_textures
14
+ create_depth_stencil_texture
15
+ attach_to_framebuffer
16
+ check_framebuffer_complete
17
+ end
18
+
19
+ def color_texture
20
+ @color_textures[0]
21
+ end
22
+
23
+ # Accessor for normal+roughness texture (second attachment)
24
+ def normal_texture
25
+ @color_textures[1]
26
+ end
27
+
28
+ # Alias for backward compatibility (depth can still be sampled from depth-stencil)
29
+ alias depth_texture depth_stencil_texture
30
+
31
+ def bind
32
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, @framebuffer)
33
+ Engine::GL.Viewport(0, 0, @width, @height)
34
+ end
35
+
36
+ def resize(width, height)
37
+ return if width == @width && height == @height
38
+
39
+ @width = width
40
+ @height = height
41
+
42
+ @color_textures.each do |tex|
43
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, tex)
44
+ Engine::GL.TexImage2D(Engine::GL::TEXTURE_2D, 0, Engine::GL::RGBA16F, @width, @height, 0, Engine::GL::RGBA, Engine::GL::FLOAT, nil)
45
+ end
46
+
47
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, @depth_stencil_texture)
48
+ Engine::GL.TexImage2D(Engine::GL::TEXTURE_2D, 0, Engine::GL::DEPTH24_STENCIL8, @width, @height, 0, Engine::GL::DEPTH_STENCIL, Engine::GL::UNSIGNED_INT_24_8, nil)
49
+ end
50
+
51
+ private
52
+
53
+ def create_framebuffer
54
+ fbo_buf = ' ' * 4
55
+ Engine::GL.GenFramebuffers(1, fbo_buf)
56
+ @framebuffer = fbo_buf.unpack1('L')
57
+ end
58
+
59
+ def create_color_textures
60
+ @num_color_attachments.times do
61
+ tex_buf = ' ' * 4
62
+ Engine::GL.GenTextures(1, tex_buf)
63
+ texture = tex_buf.unpack1('L')
64
+
65
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, texture)
66
+ Engine::GL.TexImage2D(Engine::GL::TEXTURE_2D, 0, Engine::GL::RGBA16F, @width, @height, 0, Engine::GL::RGBA, Engine::GL::FLOAT, nil)
67
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MIN_FILTER, Engine::GL::LINEAR)
68
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MAG_FILTER, Engine::GL::LINEAR)
69
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_S, Engine::GL::CLAMP_TO_EDGE)
70
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_T, Engine::GL::CLAMP_TO_EDGE)
71
+
72
+ @color_textures << texture
73
+ end
74
+ end
75
+
76
+ def create_depth_stencil_texture
77
+ tex_buf = ' ' * 4
78
+ Engine::GL.GenTextures(1, tex_buf)
79
+ @depth_stencil_texture = tex_buf.unpack1('L')
80
+
81
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, @depth_stencil_texture)
82
+ Engine::GL.TexImage2D(Engine::GL::TEXTURE_2D, 0, Engine::GL::DEPTH24_STENCIL8, @width, @height, 0, Engine::GL::DEPTH_STENCIL, Engine::GL::UNSIGNED_INT_24_8, nil)
83
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MIN_FILTER, Engine::GL::NEAREST)
84
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MAG_FILTER, Engine::GL::NEAREST)
85
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_S, Engine::GL::CLAMP_TO_EDGE)
86
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_T, Engine::GL::CLAMP_TO_EDGE)
87
+ # Disable depth comparison for direct sampling
88
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_COMPARE_MODE, Engine::GL::NONE)
89
+ # Specify we want to read depth component (not stencil)
90
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::DEPTH_STENCIL_TEXTURE_MODE, Engine::GL::DEPTH_COMPONENT)
91
+ end
92
+
93
+ def attach_to_framebuffer
94
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, @framebuffer)
95
+
96
+ # Attach all color textures
97
+ @color_textures.each_with_index do |tex, i|
98
+ Engine::GL.FramebufferTexture2D(Engine::GL::FRAMEBUFFER, Engine::GL::COLOR_ATTACHMENT0 + i, Engine::GL::TEXTURE_2D, tex, 0)
99
+ end
100
+
101
+ # Attach depth-stencil texture
102
+ Engine::GL.FramebufferTexture2D(Engine::GL::FRAMEBUFFER, Engine::GL::DEPTH_STENCIL_ATTACHMENT, Engine::GL::TEXTURE_2D, @depth_stencil_texture, 0)
103
+
104
+ # Tell OpenGL which color attachments to draw to (MRT)
105
+ if @num_color_attachments > 1
106
+ attachments = (0...@num_color_attachments).map { |i| Engine::GL::COLOR_ATTACHMENT0 + i }
107
+ Engine::GL.DrawBuffers(@num_color_attachments, attachments.pack('L*'))
108
+ end
109
+ end
110
+
111
+ def check_framebuffer_complete
112
+ status = Engine::GL.CheckFramebufferStatus(Engine::GL::FRAMEBUFFER)
113
+ unless status == Engine::GL::FRAMEBUFFER_COMPLETE
114
+ raise "Framebuffer not complete: #{status}"
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class ScreenQuad
5
+ def initialize
6
+ setup_vao
7
+ setup_vbo
8
+ Engine::GL.BindVertexArray(0)
9
+ end
10
+
11
+ def draw(material, texture)
12
+ material.set_runtime_texture("screenTexture", texture)
13
+ draw_with_material(material)
14
+ end
15
+
16
+ def draw_with_material(material)
17
+ material.update_shader
18
+ Engine::GL.BindVertexArray(@vao)
19
+ Engine::GL.DrawArrays(Engine::GL::TRIANGLES, 0, 6)
20
+ end
21
+
22
+ def draw_raw
23
+ Engine::GL.BindVertexArray(@vao)
24
+ Engine::GL.DrawArrays(Engine::GL::TRIANGLES, 0, 6)
25
+ end
26
+
27
+ private
28
+
29
+ def setup_vao
30
+ vao_buf = ' ' * 4
31
+ Engine::GL.GenVertexArrays(1, vao_buf)
32
+ @vao = vao_buf.unpack1('L')
33
+ Engine::GL.BindVertexArray(@vao)
34
+ end
35
+
36
+ def setup_vbo
37
+ # Fullscreen quad: 2 triangles covering -1 to 1 in NDC
38
+ # Each vertex: x, y, u, v
39
+ vertices = [
40
+ # First triangle
41
+ -1.0, 1.0, 0.0, 1.0,
42
+ -1.0, -1.0, 0.0, 0.0,
43
+ 1.0, -1.0, 1.0, 0.0,
44
+ # Second triangle
45
+ -1.0, 1.0, 0.0, 1.0,
46
+ 1.0, -1.0, 1.0, 0.0,
47
+ 1.0, 1.0, 1.0, 1.0
48
+ ]
49
+
50
+ vbo_buf = ' ' * 4
51
+ Engine::GL.GenBuffers(1, vbo_buf)
52
+ vbo = vbo_buf.unpack1('L')
53
+
54
+ Engine::GL.BindBuffer(Engine::GL::ARRAY_BUFFER, vbo)
55
+ Engine::GL.BufferData(Engine::GL::ARRAY_BUFFER, vertices.length * Fiddle::SIZEOF_FLOAT, vertices.pack('F*'), Engine::GL::STATIC_DRAW)
56
+
57
+ stride = 4 * Fiddle::SIZEOF_FLOAT
58
+ Engine::GL.VertexAttribPointer(0, 2, Engine::GL::FLOAT, Engine::GL::FALSE, stride, 0)
59
+ Engine::GL.VertexAttribPointer(1, 2, Engine::GL::FLOAT, Engine::GL::FALSE, stride, 2 * Fiddle::SIZEOF_FLOAT)
60
+ Engine::GL.EnableVertexAttribArray(0)
61
+ Engine::GL.EnableVertexAttribArray(1)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class ShadowMapArray
5
+ attr_reader :width, :height, :layer_count, :framebuffer, :depth_texture
6
+
7
+ def initialize(width: 2048, height: 2048, layer_count: 4)
8
+ @width = width
9
+ @height = height
10
+ @layer_count = layer_count
11
+ create_framebuffer
12
+ create_depth_texture_array
13
+ check_framebuffer_complete
14
+ end
15
+
16
+ def bind_layer(layer_index)
17
+ raise "Layer index #{layer_index} out of bounds (max: #{@layer_count - 1})" if layer_index >= @layer_count
18
+
19
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, @framebuffer)
20
+ Engine::GL.FramebufferTextureLayer(Engine::GL::FRAMEBUFFER, Engine::GL::DEPTH_ATTACHMENT, @depth_texture, 0, layer_index)
21
+ Engine::GL.Viewport(0, 0, @width, @height)
22
+ Engine::GL.Clear(Engine::GL::DEPTH_BUFFER_BIT)
23
+ end
24
+
25
+ private
26
+
27
+ def create_framebuffer
28
+ fbo_buf = ' ' * 4
29
+ Engine::GL.GenFramebuffers(1, fbo_buf)
30
+ @framebuffer = fbo_buf.unpack1('L')
31
+ end
32
+
33
+ def create_depth_texture_array
34
+ tex_buf = ' ' * 4
35
+ Engine::GL.GenTextures(1, tex_buf)
36
+ @depth_texture = tex_buf.unpack1('L')
37
+
38
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D_ARRAY, @depth_texture)
39
+ Engine::GL.TexImage3D(
40
+ Engine::GL::TEXTURE_2D_ARRAY,
41
+ 0,
42
+ Engine::GL::DEPTH_COMPONENT32F,
43
+ @width,
44
+ @height,
45
+ @layer_count,
46
+ 0,
47
+ Engine::GL::DEPTH_COMPONENT,
48
+ Engine::GL::FLOAT,
49
+ nil
50
+ )
51
+
52
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D_ARRAY, Engine::GL::TEXTURE_MIN_FILTER, Engine::GL::NEAREST)
53
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D_ARRAY, Engine::GL::TEXTURE_MAG_FILTER, Engine::GL::NEAREST)
54
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D_ARRAY, Engine::GL::TEXTURE_WRAP_S, Engine::GL::CLAMP_TO_BORDER)
55
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D_ARRAY, Engine::GL::TEXTURE_WRAP_T, Engine::GL::CLAMP_TO_BORDER)
56
+ border_color = [1.0, 1.0, 1.0, 1.0].pack('F*')
57
+ Engine::GL.TexParameterfv(Engine::GL::TEXTURE_2D_ARRAY, Engine::GL::TEXTURE_BORDER_COLOR, border_color)
58
+ end
59
+
60
+ def check_framebuffer_complete
61
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, @framebuffer)
62
+ Engine::GL.FramebufferTextureLayer(Engine::GL::FRAMEBUFFER, Engine::GL::DEPTH_ATTACHMENT, @depth_texture, 0, 0)
63
+ Engine::GL.DrawBuffer(Engine::GL::NONE)
64
+ Engine::GL.ReadBuffer(Engine::GL::NONE)
65
+
66
+ status = Engine::GL.CheckFramebufferStatus(Engine::GL::FRAMEBUFFER)
67
+ unless status == Engine::GL::FRAMEBUFFER_COMPLETE
68
+ raise "Shadow map array framebuffer not complete: #{status}"
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class SkyboxCubemap
5
+ CUBEMAP_SIZE = 512
6
+
7
+ def initialize
8
+ @rendered = false
9
+ @ground_color = nil
10
+ @horizon_color = nil
11
+ @sky_color = nil
12
+ @ground_y = nil
13
+ @horizon_y = nil
14
+ @sky_y = nil
15
+ create_cubemap_texture
16
+ create_framebuffer
17
+ end
18
+
19
+ def render_if_needed(ground_color, horizon_color, sky_color, ground_y, horizon_y, sky_y)
20
+ return if @rendered &&
21
+ @ground_color == ground_color &&
22
+ @horizon_color == horizon_color &&
23
+ @sky_color == sky_color &&
24
+ @ground_y == ground_y &&
25
+ @horizon_y == horizon_y &&
26
+ @sky_y == sky_y
27
+
28
+ @ground_color = ground_color
29
+ @horizon_color = horizon_color
30
+ @sky_color = sky_color
31
+ @ground_y = ground_y
32
+ @horizon_y = horizon_y
33
+ @sky_y = sky_y
34
+ render_all_faces
35
+ @rendered = true
36
+ end
37
+
38
+ def invalidate
39
+ @rendered = false
40
+ end
41
+
42
+ def texture
43
+ @cubemap_texture
44
+ end
45
+
46
+ private
47
+
48
+ def create_cubemap_texture
49
+ tex_buf = ' ' * 4
50
+ Engine::GL.GenTextures(1, tex_buf)
51
+ @cubemap_texture = tex_buf.unpack1('L')
52
+
53
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_CUBE_MAP, @cubemap_texture)
54
+
55
+ 6.times do |i|
56
+ Engine::GL.TexImage2D(
57
+ Engine::GL::TEXTURE_CUBE_MAP_POSITIVE_X + i,
58
+ 0,
59
+ Engine::GL::RGBA16F,
60
+ CUBEMAP_SIZE,
61
+ CUBEMAP_SIZE,
62
+ 0,
63
+ Engine::GL::RGBA,
64
+ Engine::GL::FLOAT,
65
+ nil
66
+ )
67
+ end
68
+
69
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_CUBE_MAP, Engine::GL::TEXTURE_MIN_FILTER, Engine::GL::LINEAR)
70
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_CUBE_MAP, Engine::GL::TEXTURE_MAG_FILTER, Engine::GL::LINEAR)
71
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_CUBE_MAP, Engine::GL::TEXTURE_WRAP_S, Engine::GL::CLAMP_TO_EDGE)
72
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_CUBE_MAP, Engine::GL::TEXTURE_WRAP_T, Engine::GL::CLAMP_TO_EDGE)
73
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_CUBE_MAP, Engine::GL::TEXTURE_WRAP_R, Engine::GL::CLAMP_TO_EDGE)
74
+
75
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_CUBE_MAP, 0)
76
+ end
77
+
78
+ def create_framebuffer
79
+ fbo_buf = ' ' * 4
80
+ Engine::GL.GenFramebuffers(1, fbo_buf)
81
+ @fbo = fbo_buf.unpack1('L')
82
+ end
83
+
84
+ def render_all_faces
85
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, @fbo)
86
+ Engine::GL.Viewport(0, 0, CUBEMAP_SIZE, CUBEMAP_SIZE)
87
+
88
+ shader.use
89
+ shader.set_vec3("groundColour", @ground_color) if @ground_color
90
+ shader.set_vec3("horizonColour", @horizon_color) if @horizon_color
91
+ shader.set_vec3("skyColour", @sky_color) if @sky_color
92
+ shader.set_float("groundY", @ground_y) if @ground_y
93
+ shader.set_float("horizonY", @horizon_y) if @horizon_y
94
+ shader.set_float("skyY", @sky_y) if @sky_y
95
+
96
+ 6.times do |face_index|
97
+ Engine::GL.FramebufferTexture2D(
98
+ Engine::GL::FRAMEBUFFER,
99
+ Engine::GL::COLOR_ATTACHMENT0,
100
+ Engine::GL::TEXTURE_CUBE_MAP_POSITIVE_X + face_index,
101
+ @cubemap_texture,
102
+ 0
103
+ )
104
+
105
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
106
+ shader.set_int("faceIndex", face_index)
107
+ screen_quad.draw_raw
108
+ end
109
+ end
110
+
111
+ def shader
112
+ @shader ||= Engine::Shader.skybox_cubemap
113
+ end
114
+
115
+ def screen_quad
116
+ @screen_quad ||= ScreenQuad.new
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class SkyboxRenderer
5
+ class << self
6
+ def set_colors(ground:, horizon:, sky:, ground_y: -0.3, horizon_y: 0.0, sky_y: 1.0)
7
+ @ground_color = ground
8
+ @horizon_color = horizon
9
+ @sky_color = sky
10
+ @ground_y = ground_y
11
+ @horizon_y = horizon_y
12
+ @sky_y = sky_y
13
+ @skybox_cubemap&.invalidate
14
+ end
15
+
16
+ def render_cubemap
17
+ @skybox_cubemap ||= SkyboxCubemap.new
18
+ @skybox_cubemap.render_if_needed(
19
+ @ground_color,
20
+ @horizon_color,
21
+ @sky_color,
22
+ @ground_y,
23
+ @horizon_y,
24
+ @sky_y
25
+ )
26
+ end
27
+
28
+ def draw(input_rt, alternate_rt, screen_quad)
29
+ output_rt = alternate_rt
30
+
31
+ output_rt.bind
32
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
33
+ Engine::GL.Disable(Engine::GL::DEPTH_TEST)
34
+
35
+ camera = Engine::Camera.instance
36
+ return input_rt unless camera
37
+
38
+ material.set_mat4("inverseVP", camera.inverse_vp_matrix)
39
+ material.set_vec3("cameraPos", camera.position)
40
+ material.set_cubemap("skyboxCubemap", @skybox_cubemap&.texture)
41
+ material.set_runtime_texture("depthTexture", input_rt.depth_texture)
42
+
43
+ screen_quad.draw(material, input_rt.color_texture)
44
+ output_rt
45
+ end
46
+
47
+ def cubemap
48
+ @skybox_cubemap
49
+ end
50
+
51
+ private
52
+
53
+ def material
54
+ @material ||= Engine::Material.create(
55
+ shader: Engine::Shader.for(
56
+ 'fullscreen_vertex.glsl',
57
+ 'post_process/skybox_frag.glsl',
58
+ source: :engine
59
+ )
60
+ )
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ module UI
5
+ module StencilManager
6
+ class << self
7
+ def setup_for_rect(rect)
8
+ chain = rect.ancestor_masks
9
+
10
+ if chain.empty?
11
+ Engine::GL.Disable(Engine::GL::STENCIL_TEST)
12
+ return
13
+ end
14
+
15
+ # Rebuild stencil if chain changed
16
+ if chain != @current_chain
17
+ rebuild_stencil(chain)
18
+ @current_chain = chain
19
+ end
20
+
21
+ # Configure stencil test: only draw where stencil == chain.length (intersection of all masks)
22
+ Engine::GL.Enable(Engine::GL::STENCIL_TEST)
23
+ Engine::GL.StencilFunc(Engine::GL::EQUAL, chain.length, 0xFF)
24
+ Engine::GL.StencilOp(Engine::GL::KEEP, Engine::GL::KEEP, Engine::GL::KEEP)
25
+ end
26
+
27
+ def reset
28
+ Engine::GL.Disable(Engine::GL::STENCIL_TEST)
29
+ @current_chain = nil
30
+ end
31
+
32
+ private
33
+
34
+ def rebuild_stencil(chain)
35
+ # Clear stencil buffer
36
+ Engine::GL.Clear(Engine::GL::STENCIL_BUFFER_BIT)
37
+
38
+ Engine::GL.Enable(Engine::GL::STENCIL_TEST)
39
+
40
+ # Draw each mask in the chain, incrementing stencil ref
41
+ chain.each_with_index do |mask_rect, index|
42
+ write_mask_to_stencil(mask_rect, index + 1)
43
+ end
44
+ end
45
+
46
+ def write_mask_to_stencil(mask_rect, ref)
47
+ # Disable color writes - we only want to update stencil
48
+ Engine::GL.ColorMask(Engine::GL::FALSE, Engine::GL::FALSE, Engine::GL::FALSE, Engine::GL::FALSE)
49
+
50
+ if ref == 1
51
+ # First mask: write 1 everywhere it covers
52
+ Engine::GL.StencilFunc(Engine::GL::ALWAYS, ref, 0xFF)
53
+ Engine::GL.StencilOp(Engine::GL::KEEP, Engine::GL::KEEP, Engine::GL::REPLACE)
54
+ else
55
+ # Nested mask: only increment where previous masks passed (stencil == ref-1)
56
+ Engine::GL.StencilFunc(Engine::GL::EQUAL, ref - 1, 0xFF)
57
+ Engine::GL.StencilOp(Engine::GL::KEEP, Engine::GL::KEEP, Engine::GL::INCR)
58
+ end
59
+
60
+ # Draw the mask shape
61
+ mask_rect.game_object.ui_renderers.each(&:draw)
62
+
63
+ # Re-enable color writes
64
+ Engine::GL.ColorMask(Engine::GL::TRUE, Engine::GL::TRUE, Engine::GL::TRUE, Engine::GL::TRUE)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,34 +1,34 @@
1
- module Engine
2
- class Screenshoter
3
- def self.screenshot(&block)
4
- @after_screenshot = block
5
- end
6
-
7
- def self.scheduled_screenshot
8
- @after_screenshot != nil
9
- end
10
-
11
- def self.take_screenshot
12
- @scheduled_screenshot = nil
13
- width = Engine::Window.framebuffer_width
14
- height = Engine::Window.framebuffer_height
15
- pixels = ' ' * (width * height * 3)
16
- GL.ReadPixels(0, 0, width, height, GL::RGB, GL::UNSIGNED_BYTE, pixels)
17
- png = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
18
- pixels = pixels.bytes.map { |b| b.to_i }
19
- x = 0
20
- y = 0
21
- pixels.each_slice(3) do |r, g, b|
22
- png[x, height - y - 1] = ChunkyPNG::Color.rgb(r, g, b)
23
- x += 1
24
- if x >= width
25
- x = 0
26
- y += 1
27
- end
28
- end
29
- block = @after_screenshot
30
- @after_screenshot = nil
31
- block.call(png)
32
- end
33
- end
34
- end
1
+ module Engine
2
+ class Screenshoter
3
+ def self.screenshot(&block)
4
+ @after_screenshot = block
5
+ end
6
+
7
+ def self.scheduled_screenshot
8
+ @after_screenshot != nil
9
+ end
10
+
11
+ def self.take_screenshot
12
+ @scheduled_screenshot = nil
13
+ width = Engine::Window.framebuffer_width
14
+ height = Engine::Window.framebuffer_height
15
+ pixels = ' ' * (width * height * 3)
16
+ Engine::GL.ReadPixels(0, 0, width, height, Engine::GL::RGB, Engine::GL::UNSIGNED_BYTE, pixels)
17
+ png = ChunkyPNG::Image.new(width, height, ChunkyPNG::Color::TRANSPARENT)
18
+ pixels = pixels.bytes.map { |b| b.to_i }
19
+ x = 0
20
+ y = 0
21
+ pixels.each_slice(3) do |r, g, b|
22
+ png[x, height - y - 1] = ChunkyPNG::Color.rgb(r, g, b)
23
+ x += 1
24
+ if x >= width
25
+ x = 0
26
+ y += 1
27
+ end
28
+ end
29
+ block = @after_screenshot
30
+ @after_screenshot = nil
31
+ block.call(png)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Engine
4
+ module Serialization
5
+ class GraphSerializer
6
+ class << self
7
+ def serialize(root)
8
+ collected = {}
9
+ collect_refs(root, collected)
10
+ collected.values.map { |obj| ObjectSerializer.serialize(obj) }
11
+ end
12
+
13
+ def deserialize(data_array)
14
+ # Pass 1: Create all objects (with UnresolvedRefs)
15
+ objects = data_array.map { |data| ObjectSerializer.deserialize(data) }
16
+ registry = objects.each_with_object({}) { |obj, h| h[obj.uuid] = obj }
17
+
18
+ # Pass 2: Resolve all references
19
+ objects.each { |obj| resolve_references(obj, registry) }
20
+
21
+ # Pass 3: Call awake on all objects
22
+ objects.each(&:awake)
23
+
24
+ objects
25
+ end
26
+
27
+ private
28
+
29
+ def collect_refs(obj, collected)
30
+ return if collected.key?(obj.uuid)
31
+
32
+ collected[obj.uuid] = obj
33
+
34
+ obj.class.serializable_attributes.each do |attr|
35
+ value = obj.instance_variable_get("@#{attr}")
36
+ collect_refs_from_value(value, collected)
37
+ end
38
+ end
39
+
40
+ def collect_refs_from_value(value, collected)
41
+ case value
42
+ when Serializable
43
+ collect_refs(value, collected) unless value.respond_to?(:serializable_data)
44
+ when Array
45
+ value.each { |v| collect_refs_from_value(v, collected) }
46
+ when Hash
47
+ value.each_value { |v| collect_refs_from_value(v, collected) }
48
+ end
49
+ end
50
+
51
+ def resolve_references(obj, registry)
52
+ obj.class.serializable_attributes.each do |attr|
53
+ value = obj.instance_variable_get("@#{attr}")
54
+ resolved = resolve_value(value, registry)
55
+ obj.instance_variable_set("@#{attr}", resolved)
56
+ end
57
+ end
58
+
59
+ def resolve_value(value, registry)
60
+ case value
61
+ when ObjectSerializer::UnresolvedRef
62
+ registry[value.uuid]
63
+ when Hash
64
+ value.transform_values { |v| resolve_value(v, registry) }
65
+ when Array
66
+ value.map { |v| resolve_value(v, registry) }
67
+ else
68
+ value
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end