ruby_rpg 0.0.4 → 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 (564) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +22 -0
  3. data/bin/build.bash +1 -1
  4. data/bin/import +11 -1
  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/component.rb +2 -0
  19. data/lib/engine/components/audio_source.rb +6 -4
  20. data/lib/engine/components/direction_light.rb +83 -4
  21. data/lib/engine/components/orthographic_camera.rb +31 -25
  22. data/lib/engine/components/perspective_camera.rb +35 -12
  23. data/lib/engine/components/point_light.rb +61 -5
  24. data/lib/engine/components/renderers/font_renderer.rb +19 -0
  25. data/lib/engine/components/renderers/font_renderer_base.rb +134 -0
  26. data/lib/engine/components/renderers/mesh_renderer.rb +41 -0
  27. data/lib/engine/components/renderers/sprite_renderer.rb +46 -0
  28. data/lib/engine/components/spot_light.rb +90 -0
  29. data/lib/engine/components/sprite_animator.rb +42 -0
  30. data/lib/engine/components/ui/flex/layout.rb +94 -0
  31. data/lib/engine/components/ui/flex/pack_layout.rb +65 -0
  32. data/lib/engine/components/ui/flex/stretch_layout.rb +52 -0
  33. data/lib/engine/components/ui/flex.rb +60 -0
  34. data/lib/engine/components/ui/font_renderer.rb +57 -0
  35. data/lib/engine/components/ui/rect.rb +117 -0
  36. data/lib/engine/components/ui/sprite_clickbox.rb +47 -0
  37. data/lib/engine/components/ui/sprite_renderer.rb +117 -0
  38. data/lib/engine/compute_shader.rb +14 -0
  39. data/lib/engine/compute_texture.rb +13 -0
  40. data/lib/engine/debugging.rb +4 -4
  41. data/lib/engine/engine.rb +8 -12
  42. data/lib/engine/font.rb +29 -4
  43. data/lib/engine/game_object.rb +121 -49
  44. data/lib/engine/gl.rb +439 -0
  45. data/lib/engine/glfw.rb +151 -0
  46. data/lib/engine/input.rb +115 -7
  47. data/lib/engine/material.rb +146 -11
  48. data/lib/engine/matrix_helpers.rb +38 -0
  49. data/lib/engine/mesh.rb +41 -16
  50. data/lib/engine/metal/compute_shader.rb +118 -0
  51. data/lib/engine/metal/compute_texture.rb +176 -0
  52. data/lib/engine/metal/device.rb +98 -0
  53. data/lib/engine/metal/metal_bindings.rb +126 -0
  54. data/lib/engine/opengl/compute_shader.rb +77 -0
  55. data/lib/engine/opengl/compute_texture.rb +31 -0
  56. data/lib/engine/physics/components/rigidbody.rb +23 -20
  57. data/lib/engine/physics/components/sphere_collider.rb +13 -3
  58. data/lib/engine/physics/physics_resolver.rb +24 -12
  59. data/lib/engine/rendering/cubemap_shadow_map_array.rb +77 -0
  60. data/lib/engine/rendering/gpu_timer.rb +68 -0
  61. data/lib/engine/rendering/instance_renderer.rb +140 -61
  62. data/lib/engine/rendering/post_processing/bloom_effect.rb +87 -0
  63. data/lib/engine/rendering/post_processing/depth_debug_effect.rb +17 -0
  64. data/lib/engine/rendering/post_processing/depth_of_field_effect.rb +52 -0
  65. data/lib/engine/rendering/post_processing/effect.rb +11 -0
  66. data/lib/engine/rendering/post_processing/post_processing_effect.rb +86 -0
  67. data/lib/engine/rendering/post_processing/single_pass_effect.rb +19 -0
  68. data/lib/engine/rendering/post_processing/ssao_effect.rb +182 -0
  69. data/lib/engine/rendering/post_processing/ssr_effect.rb +89 -0
  70. data/lib/engine/rendering/post_processing/tint_effect.rb +18 -0
  71. data/lib/engine/rendering/render_pipeline.rb +238 -6
  72. data/lib/engine/rendering/render_texture.rb +118 -0
  73. data/lib/engine/rendering/screen_quad.rb +64 -0
  74. data/lib/engine/rendering/shadow_map_array.rb +72 -0
  75. data/lib/engine/rendering/skybox_cubemap.rb +119 -0
  76. data/lib/engine/rendering/skybox_renderer.rb +64 -0
  77. data/lib/engine/rendering/ui/stencil_manager.rb +69 -0
  78. data/lib/engine/screenshoter.rb +1 -1
  79. data/lib/engine/serialization/graph_serializer.rb +74 -0
  80. data/lib/engine/serialization/object_serializer.rb +98 -0
  81. data/lib/engine/serialization/serializable.rb +78 -0
  82. data/lib/engine/serialization/yaml_persistence.rb +45 -0
  83. data/lib/engine/shader.rb +149 -25
  84. data/lib/engine/shaders/colour_frag.glsl +9 -1
  85. data/lib/engine/shaders/colour_vertex.glsl +12 -5
  86. data/lib/engine/shaders/fullscreen_frag.glsl +11 -0
  87. data/lib/engine/shaders/fullscreen_vertex.glsl +12 -0
  88. data/lib/engine/shaders/instanced_sprite_frag.glsl +21 -0
  89. data/lib/engine/shaders/{skybox_vert.glsl → instanced_sprite_vertex.glsl} +3 -2
  90. data/lib/engine/shaders/lighting/directional_light.glsl +49 -0
  91. data/lib/engine/shaders/lighting/lighting.glsl +33 -0
  92. data/lib/engine/shaders/lighting/lighting_common.glsl +13 -0
  93. data/lib/engine/shaders/lighting/point_light.glsl +46 -0
  94. data/lib/engine/shaders/lighting/spot_light.glsl +80 -0
  95. data/lib/engine/shaders/mesh_frag.glsl +28 -77
  96. data/lib/engine/shaders/mesh_vertex.glsl +5 -5
  97. data/lib/engine/shaders/point_shadow_frag.glsl +12 -0
  98. data/lib/engine/shaders/point_shadow_vertex.glsl +15 -0
  99. data/lib/engine/shaders/post_process/bloom_blur_frag.glsl +25 -0
  100. data/lib/engine/shaders/post_process/bloom_combine_frag.glsl +19 -0
  101. data/lib/engine/shaders/post_process/bloom_threshold_frag.glsl +19 -0
  102. data/lib/engine/shaders/post_process/debug_normals_frag.glsl +21 -0
  103. data/lib/engine/shaders/post_process/depth_debug_frag.glsl +17 -0
  104. data/lib/engine/shaders/post_process/dof_blur_frag.glsl +52 -0
  105. data/lib/engine/shaders/post_process/skybox_frag.glsl +29 -0
  106. data/lib/engine/shaders/post_process/ssao/blur_frag.glsl +50 -0
  107. data/lib/engine/shaders/post_process/ssao/combine_frag.glsl +15 -0
  108. data/lib/engine/shaders/post_process/ssao/frag.glsl +99 -0
  109. data/lib/engine/shaders/post_process/ssr/combine_frag.glsl +16 -0
  110. data/lib/engine/shaders/post_process/ssr/frag.glsl +118 -0
  111. data/lib/engine/shaders/post_process/tint_frag.glsl +14 -0
  112. data/lib/engine/shaders/shadow_frag.glsl +6 -0
  113. data/lib/engine/shaders/shadow_vertex.glsl +11 -0
  114. data/lib/engine/shaders/skybox_cubemap_frag.glsl +46 -0
  115. data/lib/engine/shaders/vertex_lit_frag.glsl +10 -66
  116. data/lib/engine/shaders/vertex_lit_vertex.glsl +1 -1
  117. data/lib/engine/standard_meshes/quad_mesh.rb +26 -0
  118. data/lib/engine/standard_objects/cube.rb +23 -0
  119. data/lib/engine/standard_objects/default_material.rb +20 -0
  120. data/lib/engine/standard_objects/plane.rb +23 -0
  121. data/lib/engine/standard_objects/sphere.rb +23 -0
  122. data/lib/engine/texture.rb +28 -19
  123. data/lib/engine/ui/rect.rb +16 -0
  124. data/lib/engine/window.rb +2 -2
  125. data/lib/ruby_rpg.rb +69 -9
  126. data/vendor/glew-2.2.0-win32/LICENSE.txt +73 -0
  127. data/vendor/glew-2.2.0-win32/bin/Release/x64/glew32.dll +0 -0
  128. data/vendor/glew-2.2.0-win32/include/GL/glew.h +26427 -0
  129. data/vendor/glew-2.2.0-win32/lib/Release/x64/glew32.lib +0 -0
  130. metadata +124 -466
  131. data/glfw-3.3.9.bin.MACOS/README.md +0 -5
  132. data/glfw-3.3.9.bin.MACOS/docs/html/bc_s.png +0 -0
  133. data/glfw-3.3.9.bin.MACOS/docs/html/bc_sd.png +0 -0
  134. data/glfw-3.3.9.bin.MACOS/docs/html/build_8dox.html +0 -81
  135. data/glfw-3.3.9.bin.MACOS/docs/html/build_guide.html +0 -199
  136. data/glfw-3.3.9.bin.MACOS/docs/html/closed.png +0 -0
  137. data/glfw-3.3.9.bin.MACOS/docs/html/compat_8dox.html +0 -81
  138. data/glfw-3.3.9.bin.MACOS/docs/html/compat_guide.html +0 -153
  139. data/glfw-3.3.9.bin.MACOS/docs/html/compile_8dox.html +0 -81
  140. data/glfw-3.3.9.bin.MACOS/docs/html/compile_guide.html +0 -223
  141. data/glfw-3.3.9.bin.MACOS/docs/html/context_8dox.html +0 -81
  142. data/glfw-3.3.9.bin.MACOS/docs/html/context_guide.html +0 -259
  143. data/glfw-3.3.9.bin.MACOS/docs/html/deprecated.html +0 -88
  144. data/glfw-3.3.9.bin.MACOS/docs/html/dir_08423ce7729c4554356a7de7171ba263.html +0 -85
  145. data/glfw-3.3.9.bin.MACOS/docs/html/dir_2dcebcdf14b42e92a6ed85c61bda6b9d.html +0 -93
  146. data/glfw-3.3.9.bin.MACOS/docs/html/dir_62ce056722ee97c199075aa1d6eca309.html +0 -95
  147. data/glfw-3.3.9.bin.MACOS/docs/html/dir_dddf4cf62655095a666cf715de3a31a2.html +0 -91
  148. data/glfw-3.3.9.bin.MACOS/docs/html/doc.svg +0 -12
  149. data/glfw-3.3.9.bin.MACOS/docs/html/docd.svg +0 -12
  150. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.css +0 -1685
  151. data/glfw-3.3.9.bin.MACOS/docs/html/doxygen.svg +0 -28
  152. data/glfw-3.3.9.bin.MACOS/docs/html/dynsections.js +0 -192
  153. data/glfw-3.3.9.bin.MACOS/docs/html/extra.css +0 -1
  154. data/glfw-3.3.9.bin.MACOS/docs/html/files.html +0 -91
  155. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosed.svg +0 -11
  156. data/glfw-3.3.9.bin.MACOS/docs/html/folderclosedd.svg +0 -11
  157. data/glfw-3.3.9.bin.MACOS/docs/html/folderopen.svg +0 -17
  158. data/glfw-3.3.9.bin.MACOS/docs/html/folderopend.svg +0 -12
  159. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h.html +0 -1661
  160. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3_8h_source.html +0 -1175
  161. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h.html +0 -167
  162. data/glfw-3.3.9.bin.MACOS/docs/html/glfw3native_8h_source.html +0 -303
  163. data/glfw-3.3.9.bin.MACOS/docs/html/group__buttons.html +0 -282
  164. data/glfw-3.3.9.bin.MACOS/docs/html/group__context.html +0 -304
  165. data/glfw-3.3.9.bin.MACOS/docs/html/group__errors.html +0 -304
  166. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__axes.html +0 -202
  167. data/glfw-3.3.9.bin.MACOS/docs/html/group__gamepad__buttons.html +0 -410
  168. data/glfw-3.3.9.bin.MACOS/docs/html/group__hat__state.html +0 -234
  169. data/glfw-3.3.9.bin.MACOS/docs/html/group__init.html +0 -570
  170. data/glfw-3.3.9.bin.MACOS/docs/html/group__input.html +0 -2255
  171. data/glfw-3.3.9.bin.MACOS/docs/html/group__joysticks.html +0 -362
  172. data/glfw-3.3.9.bin.MACOS/docs/html/group__keys.html +0 -2034
  173. data/glfw-3.3.9.bin.MACOS/docs/html/group__mods.html +0 -198
  174. data/glfw-3.3.9.bin.MACOS/docs/html/group__monitor.html +0 -848
  175. data/glfw-3.3.9.bin.MACOS/docs/html/group__native.html +0 -812
  176. data/glfw-3.3.9.bin.MACOS/docs/html/group__shapes.html +0 -198
  177. data/glfw-3.3.9.bin.MACOS/docs/html/group__vulkan.html +0 -359
  178. data/glfw-3.3.9.bin.MACOS/docs/html/group__window.html +0 -3434
  179. data/glfw-3.3.9.bin.MACOS/docs/html/index.html +0 -100
  180. data/glfw-3.3.9.bin.MACOS/docs/html/input_8dox.html +0 -81
  181. data/glfw-3.3.9.bin.MACOS/docs/html/input_guide.html +0 -570
  182. data/glfw-3.3.9.bin.MACOS/docs/html/internal_8dox.html +0 -81
  183. data/glfw-3.3.9.bin.MACOS/docs/html/internals_guide.html +0 -132
  184. data/glfw-3.3.9.bin.MACOS/docs/html/intro_8dox.html +0 -81
  185. data/glfw-3.3.9.bin.MACOS/docs/html/intro_guide.html +0 -351
  186. data/glfw-3.3.9.bin.MACOS/docs/html/jquery.js +0 -34
  187. data/glfw-3.3.9.bin.MACOS/docs/html/main_8dox.html +0 -81
  188. data/glfw-3.3.9.bin.MACOS/docs/html/menu.js +0 -136
  189. data/glfw-3.3.9.bin.MACOS/docs/html/menudata.js +0 -29
  190. data/glfw-3.3.9.bin.MACOS/docs/html/minus.svg +0 -8
  191. data/glfw-3.3.9.bin.MACOS/docs/html/minusd.svg +0 -8
  192. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_8dox.html +0 -81
  193. data/glfw-3.3.9.bin.MACOS/docs/html/monitor_guide.html +0 -229
  194. data/glfw-3.3.9.bin.MACOS/docs/html/moving_8dox.html +0 -81
  195. data/glfw-3.3.9.bin.MACOS/docs/html/moving_guide.html +0 -374
  196. data/glfw-3.3.9.bin.MACOS/docs/html/nav_f.png +0 -0
  197. data/glfw-3.3.9.bin.MACOS/docs/html/nav_fd.png +0 -0
  198. data/glfw-3.3.9.bin.MACOS/docs/html/nav_g.png +0 -0
  199. data/glfw-3.3.9.bin.MACOS/docs/html/nav_h.png +0 -0
  200. data/glfw-3.3.9.bin.MACOS/docs/html/nav_hd.png +0 -0
  201. data/glfw-3.3.9.bin.MACOS/docs/html/news.html +0 -634
  202. data/glfw-3.3.9.bin.MACOS/docs/html/news_8dox.html +0 -81
  203. data/glfw-3.3.9.bin.MACOS/docs/html/open.png +0 -0
  204. data/glfw-3.3.9.bin.MACOS/docs/html/pages.html +0 -99
  205. data/glfw-3.3.9.bin.MACOS/docs/html/plus.svg +0 -9
  206. data/glfw-3.3.9.bin.MACOS/docs/html/plusd.svg +0 -9
  207. data/glfw-3.3.9.bin.MACOS/docs/html/quick_8dox.html +0 -81
  208. data/glfw-3.3.9.bin.MACOS/docs/html/quick_guide.html +0 -397
  209. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_0.js +0 -5
  210. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1.js +0 -4
  211. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_10.js +0 -65
  212. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_11.js +0 -26
  213. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_12.js +0 -44
  214. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_13.js +0 -34
  215. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_14.js +0 -12
  216. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_15.js +0 -52
  217. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_16.js +0 -69
  218. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_17.js +0 -51
  219. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_18.js +0 -14
  220. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_19.js +0 -36
  221. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1a.js +0 -98
  222. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_1b.js +0 -12
  223. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_2.js +0 -6
  224. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_3.js +0 -9
  225. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_4.js +0 -57
  226. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_5.js +0 -22
  227. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_6.js +0 -103
  228. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_7.js +0 -23
  229. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_8.js +0 -35
  230. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_9.js +0 -63
  231. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_a.js +0 -505
  232. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_b.js +0 -24
  233. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_c.js +0 -50
  234. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_d.js +0 -17
  235. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_e.js +0 -12
  236. data/glfw-3.3.9.bin.MACOS/docs/html/search/all_f.js +0 -35
  237. data/glfw-3.3.9.bin.MACOS/docs/html/search/classes_0.js +0 -7
  238. data/glfw-3.3.9.bin.MACOS/docs/html/search/close.svg +0 -18
  239. data/glfw-3.3.9.bin.MACOS/docs/html/search/defines_0.js +0 -34
  240. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_0.js +0 -4
  241. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_1.js +0 -6
  242. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_2.js +0 -5
  243. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_3.js +0 -6
  244. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_4.js +0 -6
  245. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_5.js +0 -4
  246. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_6.js +0 -4
  247. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_7.js +0 -4
  248. data/glfw-3.3.9.bin.MACOS/docs/html/search/files_8.js +0 -4
  249. data/glfw-3.3.9.bin.MACOS/docs/html/search/functions_0.js +0 -146
  250. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_0.js +0 -6
  251. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_1.js +0 -4
  252. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_10.js +0 -4
  253. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_2.js +0 -6
  254. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_3.js +0 -5
  255. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_4.js +0 -4
  256. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_5.js +0 -5
  257. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_6.js +0 -4
  258. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_7.js +0 -5
  259. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_8.js +0 -5
  260. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_9.js +0 -6
  261. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_a.js +0 -6
  262. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_b.js +0 -4
  263. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_c.js +0 -4
  264. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_d.js +0 -7
  265. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_e.js +0 -4
  266. data/glfw-3.3.9.bin.MACOS/docs/html/search/groups_f.js +0 -5
  267. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag.svg +0 -24
  268. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_d.svg +0 -24
  269. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_sel.svg +0 -31
  270. data/glfw-3.3.9.bin.MACOS/docs/html/search/mag_seld.svg +0 -31
  271. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_0.js +0 -4
  272. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_1.js +0 -4
  273. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_10.js +0 -4
  274. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_2.js +0 -5
  275. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_3.js +0 -4
  276. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_4.js +0 -6
  277. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_5.js +0 -4
  278. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_6.js +0 -4
  279. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_7.js +0 -7
  280. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_8.js +0 -6
  281. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_9.js +0 -4
  282. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_a.js +0 -5
  283. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_b.js +0 -5
  284. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_c.js +0 -4
  285. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_d.js +0 -6
  286. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_e.js +0 -6
  287. data/glfw-3.3.9.bin.MACOS/docs/html/search/pages_f.js +0 -4
  288. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.css +0 -291
  289. data/glfw-3.3.9.bin.MACOS/docs/html/search/search.js +0 -840
  290. data/glfw-3.3.9.bin.MACOS/docs/html/search/searchdata.js +0 -39
  291. data/glfw-3.3.9.bin.MACOS/docs/html/search/typedefs_0.js +0 -32
  292. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_0.js +0 -4
  293. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_1.js +0 -6
  294. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_2.js +0 -5
  295. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_3.js +0 -4
  296. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_4.js +0 -4
  297. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_5.js +0 -6
  298. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_6.js +0 -4
  299. data/glfw-3.3.9.bin.MACOS/docs/html/search/variables_7.js +0 -4
  300. data/glfw-3.3.9.bin.MACOS/docs/html/spaces.svg +0 -877
  301. data/glfw-3.3.9.bin.MACOS/docs/html/splitbar.png +0 -0
  302. data/glfw-3.3.9.bin.MACOS/docs/html/splitbard.png +0 -0
  303. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgamepadstate.html +0 -134
  304. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wgammaramp.html +0 -170
  305. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wimage.html +0 -151
  306. data/glfw-3.3.9.bin.MACOS/docs/html/struct_g_l_f_wvidmode.html +0 -204
  307. data/glfw-3.3.9.bin.MACOS/docs/html/sync_off.png +0 -0
  308. data/glfw-3.3.9.bin.MACOS/docs/html/sync_on.png +0 -0
  309. data/glfw-3.3.9.bin.MACOS/docs/html/tab_a.png +0 -0
  310. data/glfw-3.3.9.bin.MACOS/docs/html/tab_ad.png +0 -0
  311. data/glfw-3.3.9.bin.MACOS/docs/html/tab_b.png +0 -0
  312. data/glfw-3.3.9.bin.MACOS/docs/html/tab_bd.png +0 -0
  313. data/glfw-3.3.9.bin.MACOS/docs/html/tab_h.png +0 -0
  314. data/glfw-3.3.9.bin.MACOS/docs/html/tab_hd.png +0 -0
  315. data/glfw-3.3.9.bin.MACOS/docs/html/tab_s.png +0 -0
  316. data/glfw-3.3.9.bin.MACOS/docs/html/tab_sd.png +0 -0
  317. data/glfw-3.3.9.bin.MACOS/docs/html/tabs.css +0 -1
  318. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_8dox.html +0 -81
  319. data/glfw-3.3.9.bin.MACOS/docs/html/vulkan_guide.html +0 -196
  320. data/glfw-3.3.9.bin.MACOS/docs/html/window_8dox.html +0 -81
  321. data/glfw-3.3.9.bin.MACOS/docs/html/window_guide.html +0 -763
  322. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3.h +0 -5932
  323. data/glfw-3.3.9.bin.MACOS/include/GLFW/glfw3native.h +0 -634
  324. data/glfw-3.3.9.bin.MACOS/lib-arm64/libglfw3.a +0 -0
  325. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw.3.dylib +0 -0
  326. data/glfw-3.3.9.bin.MACOS/lib-universal/libglfw3.a +0 -0
  327. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw.3.dylib +0 -0
  328. data/glfw-3.3.9.bin.MACOS/lib-x86_64/libglfw3.a +0 -0
  329. data/glfw-3.4.bin.WIN64/README.md +0 -70
  330. data/glfw-3.4.bin.WIN64/docs/html/bc_s.png +0 -0
  331. data/glfw-3.4.bin.WIN64/docs/html/bc_sd.png +0 -0
  332. data/glfw-3.4.bin.WIN64/docs/html/build_8md.html +0 -81
  333. data/glfw-3.4.bin.WIN64/docs/html/build_guide.html +0 -217
  334. data/glfw-3.4.bin.WIN64/docs/html/closed.png +0 -0
  335. data/glfw-3.4.bin.WIN64/docs/html/compat_8md.html +0 -81
  336. data/glfw-3.4.bin.WIN64/docs/html/compat_guide.html +0 -156
  337. data/glfw-3.4.bin.WIN64/docs/html/compile_8md.html +0 -81
  338. data/glfw-3.4.bin.WIN64/docs/html/compile_guide.html +0 -219
  339. data/glfw-3.4.bin.WIN64/docs/html/context_8md.html +0 -81
  340. data/glfw-3.4.bin.WIN64/docs/html/context_guide.html +0 -258
  341. data/glfw-3.4.bin.WIN64/docs/html/deprecated.html +0 -88
  342. data/glfw-3.4.bin.WIN64/docs/html/dir_13577e2d8b9423099662de029791bd7d.html +0 -93
  343. data/glfw-3.4.bin.WIN64/docs/html/dir_7f92719a7fe62e5b064f87d7a3c220b1.html +0 -95
  344. data/glfw-3.4.bin.WIN64/docs/html/dir_a788ef6c2b1e5b367804e0b6ccfd6f11.html +0 -85
  345. data/glfw-3.4.bin.WIN64/docs/html/dir_b11153cd0f4fd04a7564cc166f482635.html +0 -91
  346. data/glfw-3.4.bin.WIN64/docs/html/doc.svg +0 -12
  347. data/glfw-3.4.bin.WIN64/docs/html/docd.svg +0 -12
  348. data/glfw-3.4.bin.WIN64/docs/html/doxygen.css +0 -1685
  349. data/glfw-3.4.bin.WIN64/docs/html/doxygen.svg +0 -28
  350. data/glfw-3.4.bin.WIN64/docs/html/dynsections.js +0 -192
  351. data/glfw-3.4.bin.WIN64/docs/html/extra.css +0 -2
  352. data/glfw-3.4.bin.WIN64/docs/html/files.html +0 -91
  353. data/glfw-3.4.bin.WIN64/docs/html/folderclosed.svg +0 -11
  354. data/glfw-3.4.bin.WIN64/docs/html/folderclosedd.svg +0 -11
  355. data/glfw-3.4.bin.WIN64/docs/html/folderopen.svg +0 -17
  356. data/glfw-3.4.bin.WIN64/docs/html/folderopend.svg +0 -12
  357. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h.html +0 -1910
  358. data/glfw-3.4.bin.WIN64/docs/html/glfw3_8h_source.html +0 -1260
  359. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h.html +0 -170
  360. data/glfw-3.4.bin.WIN64/docs/html/glfw3native_8h_source.html +0 -306
  361. data/glfw-3.4.bin.WIN64/docs/html/group__buttons.html +0 -282
  362. data/glfw-3.4.bin.WIN64/docs/html/group__context.html +0 -304
  363. data/glfw-3.4.bin.WIN64/docs/html/group__errors.html +0 -384
  364. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__axes.html +0 -202
  365. data/glfw-3.4.bin.WIN64/docs/html/group__gamepad__buttons.html +0 -410
  366. data/glfw-3.4.bin.WIN64/docs/html/group__hat__state.html +0 -234
  367. data/glfw-3.4.bin.WIN64/docs/html/group__init.html +0 -1015
  368. data/glfw-3.4.bin.WIN64/docs/html/group__input.html +0 -2285
  369. data/glfw-3.4.bin.WIN64/docs/html/group__joysticks.html +0 -362
  370. data/glfw-3.4.bin.WIN64/docs/html/group__keys.html +0 -2034
  371. data/glfw-3.4.bin.WIN64/docs/html/group__mods.html +0 -198
  372. data/glfw-3.4.bin.WIN64/docs/html/group__monitor.html +0 -849
  373. data/glfw-3.4.bin.WIN64/docs/html/group__native.html +0 -837
  374. data/glfw-3.4.bin.WIN64/docs/html/group__shapes.html +0 -337
  375. data/glfw-3.4.bin.WIN64/docs/html/group__vulkan.html +0 -361
  376. data/glfw-3.4.bin.WIN64/docs/html/group__window.html +0 -3608
  377. data/glfw-3.4.bin.WIN64/docs/html/index.html +0 -100
  378. data/glfw-3.4.bin.WIN64/docs/html/input_8md.html +0 -81
  379. data/glfw-3.4.bin.WIN64/docs/html/input_guide.html +0 -576
  380. data/glfw-3.4.bin.WIN64/docs/html/internal_8md.html +0 -81
  381. data/glfw-3.4.bin.WIN64/docs/html/internals_guide.html +0 -135
  382. data/glfw-3.4.bin.WIN64/docs/html/intro_8md.html +0 -81
  383. data/glfw-3.4.bin.WIN64/docs/html/intro_guide.html +0 -429
  384. data/glfw-3.4.bin.WIN64/docs/html/jquery.js +0 -34
  385. data/glfw-3.4.bin.WIN64/docs/html/main_8md.html +0 -81
  386. data/glfw-3.4.bin.WIN64/docs/html/menu.js +0 -136
  387. data/glfw-3.4.bin.WIN64/docs/html/menudata.js +0 -30
  388. data/glfw-3.4.bin.WIN64/docs/html/minus.svg +0 -8
  389. data/glfw-3.4.bin.WIN64/docs/html/minusd.svg +0 -8
  390. data/glfw-3.4.bin.WIN64/docs/html/monitor_8md.html +0 -81
  391. data/glfw-3.4.bin.WIN64/docs/html/monitor_guide.html +0 -228
  392. data/glfw-3.4.bin.WIN64/docs/html/moving_8md.html +0 -81
  393. data/glfw-3.4.bin.WIN64/docs/html/moving_guide.html +0 -360
  394. data/glfw-3.4.bin.WIN64/docs/html/nav_f.png +0 -0
  395. data/glfw-3.4.bin.WIN64/docs/html/nav_fd.png +0 -0
  396. data/glfw-3.4.bin.WIN64/docs/html/nav_g.png +0 -0
  397. data/glfw-3.4.bin.WIN64/docs/html/nav_h.png +0 -0
  398. data/glfw-3.4.bin.WIN64/docs/html/nav_hd.png +0 -0
  399. data/glfw-3.4.bin.WIN64/docs/html/news.html +0 -336
  400. data/glfw-3.4.bin.WIN64/docs/html/news_8md.html +0 -81
  401. data/glfw-3.4.bin.WIN64/docs/html/open.png +0 -0
  402. data/glfw-3.4.bin.WIN64/docs/html/pages.html +0 -99
  403. data/glfw-3.4.bin.WIN64/docs/html/plus.svg +0 -9
  404. data/glfw-3.4.bin.WIN64/docs/html/plusd.svg +0 -9
  405. data/glfw-3.4.bin.WIN64/docs/html/quick_8md.html +0 -81
  406. data/glfw-3.4.bin.WIN64/docs/html/quick_guide.html +0 -406
  407. data/glfw-3.4.bin.WIN64/docs/html/search/all_0.js +0 -4
  408. data/glfw-3.4.bin.WIN64/docs/html/search/all_1.js +0 -4
  409. data/glfw-3.4.bin.WIN64/docs/html/search/all_10.js +0 -13
  410. data/glfw-3.4.bin.WIN64/docs/html/search/all_11.js +0 -11
  411. data/glfw-3.4.bin.WIN64/docs/html/search/all_12.js +0 -26
  412. data/glfw-3.4.bin.WIN64/docs/html/search/all_13.js +0 -51
  413. data/glfw-3.4.bin.WIN64/docs/html/search/all_14.js +0 -22
  414. data/glfw-3.4.bin.WIN64/docs/html/search/all_15.js +0 -35
  415. data/glfw-3.4.bin.WIN64/docs/html/search/all_16.js +0 -29
  416. data/glfw-3.4.bin.WIN64/docs/html/search/all_17.js +0 -8
  417. data/glfw-3.4.bin.WIN64/docs/html/search/all_18.js +0 -44
  418. data/glfw-3.4.bin.WIN64/docs/html/search/all_19.js +0 -60
  419. data/glfw-3.4.bin.WIN64/docs/html/search/all_1a.js +0 -39
  420. data/glfw-3.4.bin.WIN64/docs/html/search/all_1b.js +0 -8
  421. data/glfw-3.4.bin.WIN64/docs/html/search/all_1c.js +0 -32
  422. data/glfw-3.4.bin.WIN64/docs/html/search/all_1d.js +0 -84
  423. data/glfw-3.4.bin.WIN64/docs/html/search/all_1e.js +0 -13
  424. data/glfw-3.4.bin.WIN64/docs/html/search/all_1f.js +0 -4
  425. data/glfw-3.4.bin.WIN64/docs/html/search/all_2.js +0 -5
  426. data/glfw-3.4.bin.WIN64/docs/html/search/all_3.js +0 -4
  427. data/glfw-3.4.bin.WIN64/docs/html/search/all_4.js +0 -4
  428. data/glfw-3.4.bin.WIN64/docs/html/search/all_5.js +0 -4
  429. data/glfw-3.4.bin.WIN64/docs/html/search/all_6.js +0 -4
  430. data/glfw-3.4.bin.WIN64/docs/html/search/all_7.js +0 -58
  431. data/glfw-3.4.bin.WIN64/docs/html/search/all_8.js +0 -21
  432. data/glfw-3.4.bin.WIN64/docs/html/search/all_9.js +0 -82
  433. data/glfw-3.4.bin.WIN64/docs/html/search/all_a.js +0 -20
  434. data/glfw-3.4.bin.WIN64/docs/html/search/all_b.js +0 -26
  435. data/glfw-3.4.bin.WIN64/docs/html/search/all_c.js +0 -35
  436. data/glfw-3.4.bin.WIN64/docs/html/search/all_d.js +0 -555
  437. data/glfw-3.4.bin.WIN64/docs/html/search/all_e.js +0 -23
  438. data/glfw-3.4.bin.WIN64/docs/html/search/all_f.js +0 -40
  439. data/glfw-3.4.bin.WIN64/docs/html/search/classes_0.js +0 -8
  440. data/glfw-3.4.bin.WIN64/docs/html/search/close.svg +0 -18
  441. data/glfw-3.4.bin.WIN64/docs/html/search/defines_0.js +0 -43
  442. data/glfw-3.4.bin.WIN64/docs/html/search/files_0.js +0 -4
  443. data/glfw-3.4.bin.WIN64/docs/html/search/files_1.js +0 -6
  444. data/glfw-3.4.bin.WIN64/docs/html/search/files_2.js +0 -5
  445. data/glfw-3.4.bin.WIN64/docs/html/search/files_3.js +0 -6
  446. data/glfw-3.4.bin.WIN64/docs/html/search/files_4.js +0 -6
  447. data/glfw-3.4.bin.WIN64/docs/html/search/files_5.js +0 -4
  448. data/glfw-3.4.bin.WIN64/docs/html/search/files_6.js +0 -4
  449. data/glfw-3.4.bin.WIN64/docs/html/search/files_7.js +0 -4
  450. data/glfw-3.4.bin.WIN64/docs/html/search/files_8.js +0 -4
  451. data/glfw-3.4.bin.WIN64/docs/html/search/functions_0.js +0 -152
  452. data/glfw-3.4.bin.WIN64/docs/html/search/groups_0.js +0 -6
  453. data/glfw-3.4.bin.WIN64/docs/html/search/groups_1.js +0 -4
  454. data/glfw-3.4.bin.WIN64/docs/html/search/groups_10.js +0 -4
  455. data/glfw-3.4.bin.WIN64/docs/html/search/groups_2.js +0 -6
  456. data/glfw-3.4.bin.WIN64/docs/html/search/groups_3.js +0 -5
  457. data/glfw-3.4.bin.WIN64/docs/html/search/groups_4.js +0 -4
  458. data/glfw-3.4.bin.WIN64/docs/html/search/groups_5.js +0 -5
  459. data/glfw-3.4.bin.WIN64/docs/html/search/groups_6.js +0 -4
  460. data/glfw-3.4.bin.WIN64/docs/html/search/groups_7.js +0 -5
  461. data/glfw-3.4.bin.WIN64/docs/html/search/groups_8.js +0 -5
  462. data/glfw-3.4.bin.WIN64/docs/html/search/groups_9.js +0 -6
  463. data/glfw-3.4.bin.WIN64/docs/html/search/groups_a.js +0 -6
  464. data/glfw-3.4.bin.WIN64/docs/html/search/groups_b.js +0 -4
  465. data/glfw-3.4.bin.WIN64/docs/html/search/groups_c.js +0 -4
  466. data/glfw-3.4.bin.WIN64/docs/html/search/groups_d.js +0 -7
  467. data/glfw-3.4.bin.WIN64/docs/html/search/groups_e.js +0 -4
  468. data/glfw-3.4.bin.WIN64/docs/html/search/groups_f.js +0 -5
  469. data/glfw-3.4.bin.WIN64/docs/html/search/mag.svg +0 -24
  470. data/glfw-3.4.bin.WIN64/docs/html/search/mag_d.svg +0 -24
  471. data/glfw-3.4.bin.WIN64/docs/html/search/mag_sel.svg +0 -31
  472. data/glfw-3.4.bin.WIN64/docs/html/search/mag_seld.svg +0 -31
  473. data/glfw-3.4.bin.WIN64/docs/html/search/pages_0.js +0 -4
  474. data/glfw-3.4.bin.WIN64/docs/html/search/pages_1.js +0 -5
  475. data/glfw-3.4.bin.WIN64/docs/html/search/pages_10.js +0 -5
  476. data/glfw-3.4.bin.WIN64/docs/html/search/pages_11.js +0 -4
  477. data/glfw-3.4.bin.WIN64/docs/html/search/pages_2.js +0 -4
  478. data/glfw-3.4.bin.WIN64/docs/html/search/pages_3.js +0 -5
  479. data/glfw-3.4.bin.WIN64/docs/html/search/pages_4.js +0 -4
  480. data/glfw-3.4.bin.WIN64/docs/html/search/pages_5.js +0 -6
  481. data/glfw-3.4.bin.WIN64/docs/html/search/pages_6.js +0 -4
  482. data/glfw-3.4.bin.WIN64/docs/html/search/pages_7.js +0 -5
  483. data/glfw-3.4.bin.WIN64/docs/html/search/pages_8.js +0 -7
  484. data/glfw-3.4.bin.WIN64/docs/html/search/pages_9.js +0 -7
  485. data/glfw-3.4.bin.WIN64/docs/html/search/pages_a.js +0 -4
  486. data/glfw-3.4.bin.WIN64/docs/html/search/pages_b.js +0 -5
  487. data/glfw-3.4.bin.WIN64/docs/html/search/pages_c.js +0 -4
  488. data/glfw-3.4.bin.WIN64/docs/html/search/pages_d.js +0 -4
  489. data/glfw-3.4.bin.WIN64/docs/html/search/pages_e.js +0 -6
  490. data/glfw-3.4.bin.WIN64/docs/html/search/pages_f.js +0 -6
  491. data/glfw-3.4.bin.WIN64/docs/html/search/search.css +0 -291
  492. data/glfw-3.4.bin.WIN64/docs/html/search/search.js +0 -840
  493. data/glfw-3.4.bin.WIN64/docs/html/search/searchdata.js +0 -39
  494. data/glfw-3.4.bin.WIN64/docs/html/search/typedefs_0.js +0 -36
  495. data/glfw-3.4.bin.WIN64/docs/html/search/variables_0.js +0 -5
  496. data/glfw-3.4.bin.WIN64/docs/html/search/variables_1.js +0 -6
  497. data/glfw-3.4.bin.WIN64/docs/html/search/variables_2.js +0 -4
  498. data/glfw-3.4.bin.WIN64/docs/html/search/variables_3.js +0 -5
  499. data/glfw-3.4.bin.WIN64/docs/html/search/variables_4.js +0 -4
  500. data/glfw-3.4.bin.WIN64/docs/html/search/variables_5.js +0 -4
  501. data/glfw-3.4.bin.WIN64/docs/html/search/variables_6.js +0 -7
  502. data/glfw-3.4.bin.WIN64/docs/html/search/variables_7.js +0 -4
  503. data/glfw-3.4.bin.WIN64/docs/html/search/variables_8.js +0 -4
  504. data/glfw-3.4.bin.WIN64/docs/html/search/variables_9.js +0 -4
  505. data/glfw-3.4.bin.WIN64/docs/html/spaces.svg +0 -877
  506. data/glfw-3.4.bin.WIN64/docs/html/splitbar.png +0 -0
  507. data/glfw-3.4.bin.WIN64/docs/html/splitbard.png +0 -0
  508. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wallocator.html +0 -168
  509. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgamepadstate.html +0 -134
  510. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wgammaramp.html +0 -170
  511. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wimage.html +0 -151
  512. data/glfw-3.4.bin.WIN64/docs/html/struct_g_l_f_wvidmode.html +0 -204
  513. data/glfw-3.4.bin.WIN64/docs/html/sync_off.png +0 -0
  514. data/glfw-3.4.bin.WIN64/docs/html/sync_on.png +0 -0
  515. data/glfw-3.4.bin.WIN64/docs/html/tab_a.png +0 -0
  516. data/glfw-3.4.bin.WIN64/docs/html/tab_ad.png +0 -0
  517. data/glfw-3.4.bin.WIN64/docs/html/tab_b.png +0 -0
  518. data/glfw-3.4.bin.WIN64/docs/html/tab_bd.png +0 -0
  519. data/glfw-3.4.bin.WIN64/docs/html/tab_h.png +0 -0
  520. data/glfw-3.4.bin.WIN64/docs/html/tab_hd.png +0 -0
  521. data/glfw-3.4.bin.WIN64/docs/html/tab_s.png +0 -0
  522. data/glfw-3.4.bin.WIN64/docs/html/tab_sd.png +0 -0
  523. data/glfw-3.4.bin.WIN64/docs/html/tabs.css +0 -1
  524. data/glfw-3.4.bin.WIN64/docs/html/topics.html +0 -101
  525. data/glfw-3.4.bin.WIN64/docs/html/vulkan_8md.html +0 -81
  526. data/glfw-3.4.bin.WIN64/docs/html/vulkan_guide.html +0 -206
  527. data/glfw-3.4.bin.WIN64/docs/html/window_8md.html +0 -81
  528. data/glfw-3.4.bin.WIN64/docs/html/window_guide.html +0 -806
  529. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3.h +0 -6547
  530. data/glfw-3.4.bin.WIN64/include/GLFW/glfw3native.h +0 -663
  531. data/glfw-3.4.bin.WIN64/lib-mingw-w64/glfw3.dll +0 -0
  532. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3.a +0 -0
  533. data/glfw-3.4.bin.WIN64/lib-mingw-w64/libglfw3dll.a +0 -0
  534. data/glfw-3.4.bin.WIN64/lib-static-ucrt/glfw3dll.lib +0 -0
  535. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.dll +0 -0
  536. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3.lib +0 -0
  537. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3_mt.lib +0 -0
  538. data/glfw-3.4.bin.WIN64/lib-vc2013/glfw3dll.lib +0 -0
  539. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.dll +0 -0
  540. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3.lib +0 -0
  541. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3_mt.lib +0 -0
  542. data/glfw-3.4.bin.WIN64/lib-vc2015/glfw3dll.lib +0 -0
  543. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.dll +0 -0
  544. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3.lib +0 -0
  545. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3_mt.lib +0 -0
  546. data/glfw-3.4.bin.WIN64/lib-vc2017/glfw3dll.lib +0 -0
  547. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.dll +0 -0
  548. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3.lib +0 -0
  549. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3_mt.lib +0 -0
  550. data/glfw-3.4.bin.WIN64/lib-vc2019/glfw3dll.lib +0 -0
  551. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.dll +0 -0
  552. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3.lib +0 -0
  553. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3_mt.lib +0 -0
  554. data/glfw-3.4.bin.WIN64/lib-vc2022/glfw3dll.lib +0 -0
  555. data/lib/engine/components/font_renderer.rb +0 -134
  556. data/lib/engine/components/mesh_renderer.rb +0 -31
  557. data/lib/engine/components/sprite_renderer.rb +0 -141
  558. data/lib/engine/components/ui_font_renderer.rb +0 -140
  559. data/lib/engine/components/ui_sprite_renderer.rb +0 -101
  560. data/lib/engine/shaders/skybox_frag.glsl +0 -12
  561. /data/{glfw-3.3.9.bin.MACOS → vendor/glfw-3.3.9.bin.MACOS}/LICENSE.md +0 -0
  562. /data/{glfw-3.3.9.bin.MACOS → vendor/glfw-3.3.9.bin.MACOS}/lib-arm64/libglfw.3.dylib +0 -0
  563. /data/{glfw-3.4.bin.WIN64 → vendor/glfw-3.4.bin.WIN64}/LICENSE.md +0 -0
  564. /data/{glfw-3.4.bin.WIN64 → vendor/glfw-3.4.bin.WIN64}/lib-static-ucrt/glfw3.dll +0 -0
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ module PostProcessingEffect
5
+ class << self
6
+ def add(effect)
7
+ effects << effect
8
+ effect
9
+ end
10
+
11
+ def add_all(effects_array)
12
+ effects_array.each { |effect| add(effect) }
13
+ effects_array
14
+ end
15
+
16
+ def remove(effect)
17
+ effects.delete(effect)
18
+ end
19
+
20
+ def clear
21
+ @effects = []
22
+ end
23
+
24
+ def apply_all(render_texture_a, render_texture_b, screen_quad, normal_buffer = nil, start_index: 0)
25
+ @depth_texture = render_texture_a.depth_texture
26
+ @normal_texture = normal_buffer || render_texture_a.normal_texture
27
+
28
+ enabled_effects = effects.select(&:enabled)
29
+ textures = [render_texture_a, render_texture_b]
30
+ return textures[start_index] if enabled_effects.empty?
31
+ current_index = start_index
32
+
33
+ enabled_effects.each do |effect|
34
+ input_rt = textures[current_index]
35
+ output_rt = textures[1 - current_index]
36
+
37
+ stage_name = "pp:#{effect.class.name.split('::').last}"
38
+ result_rt = GpuTimer.measure(stage_name) do
39
+ effect.apply(input_rt, output_rt, screen_quad)
40
+ end
41
+ current_index = 1 - current_index if result_rt == output_rt
42
+ end
43
+
44
+ textures[current_index]
45
+ end
46
+
47
+ def depth_texture
48
+ @depth_texture
49
+ end
50
+
51
+ def normal_texture
52
+ @normal_texture
53
+ end
54
+
55
+ def effects
56
+ @effects ||= []
57
+ end
58
+
59
+ # Built-in effects
60
+
61
+ def tint(color: [1.0, 1.0, 1.0], intensity: 0.5)
62
+ TintEffect.new(color: color, intensity: intensity)
63
+ end
64
+
65
+ def depth_of_field(focus_distance: 10.0, focus_range: 50.0, blur_amount: 3.0, near: 0.1, far: 1000.0)
66
+ DepthOfFieldEffect.new(focus_distance: focus_distance, focus_range: focus_range, blur_amount: blur_amount, near: near, far: far)
67
+ end
68
+
69
+ def depth_debug
70
+ DepthDebugEffect.new
71
+ end
72
+
73
+ def bloom(threshold: 0.7, intensity: 1.0, blur_passes: 2, blur_scale: 1.0)
74
+ BloomEffect.new(threshold: threshold, intensity: intensity, blur_passes: blur_passes, blur_scale: blur_scale)
75
+ end
76
+
77
+ def ssr(max_steps: 64, max_ray_distance: 50.0, thickness: 0.5, ray_offset: 2.0)
78
+ SSREffect.new(max_steps: max_steps, max_ray_distance: max_ray_distance, thickness: thickness, ray_offset: ray_offset)
79
+ end
80
+
81
+ def ssao(kernel_size: 16, radius: 0.5, bias: 0.025, power: 2.0, blur_size: 2, depth_threshold: 1000.0)
82
+ SSAOEffect.new(kernel_size: kernel_size, radius: radius, bias: bias, power: power, blur_size: blur_size, depth_threshold: depth_threshold)
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ module SinglePassEffect
5
+ include Effect
6
+
7
+ attr_reader :material
8
+
9
+ def apply(input_rt, output_rt, screen_quad)
10
+ output_rt.bind
11
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
12
+ Engine::GL.Disable(Engine::GL::DEPTH_TEST)
13
+
14
+ material.set_runtime_texture("depthTexture", PostProcessingEffect.depth_texture)
15
+ screen_quad.draw(material, input_rt.color_texture)
16
+ output_rt
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,182 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class SSAOEffect
5
+ include Effect
6
+
7
+ def initialize(kernel_size: 16, radius: 0.5, bias: 0.025, power: 2.0, blur_size: 2, depth_threshold: 1000.0)
8
+ @kernel_size = [kernel_size, 64].min
9
+ @radius = radius
10
+ @bias = bias
11
+ @power = power
12
+ @blur_size = blur_size
13
+ @depth_threshold = depth_threshold
14
+ end
15
+
16
+ def apply(input_rt, output_rt, screen_quad)
17
+ ensure_textures(input_rt.width, input_rt.height)
18
+
19
+ camera = Engine::Camera.instance
20
+ Engine::GL.Disable(Engine::GL::DEPTH_TEST)
21
+
22
+ # Pass 1: Generate SSAO
23
+ @ssao_rt.bind
24
+ Engine::GL.ClearColor(1.0, 1.0, 1.0, 1.0)
25
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
26
+
27
+ ssao_material.set_runtime_texture("depthTexture", PostProcessingEffect.depth_texture)
28
+ ssao_material.set_runtime_texture("normalTexture", PostProcessingEffect.normal_texture)
29
+ ssao_material.set_runtime_texture("noiseTexture", noise_texture)
30
+
31
+ ssao_material.set_mat4("projection", camera.projection.transpose)
32
+ ssao_material.set_mat4("view", camera.view_matrix)
33
+ ssao_material.set_mat4("inverseVP", camera.inverse_vp_matrix)
34
+ ssao_material.set_float("nearPlane", camera.near)
35
+ ssao_material.set_float("farPlane", camera.far)
36
+
37
+ noise_scale = [@ssao_rt.width / 4.0, @ssao_rt.height / 4.0]
38
+ ssao_material.set_vec2("noiseScale", noise_scale)
39
+
40
+ screen_quad.draw_with_material(ssao_material)
41
+
42
+ # Pass 2: Blur SSAO
43
+ @blur_rt.bind
44
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
45
+
46
+ blur_material.set_runtime_texture("ssaoTexture", @ssao_rt.color_texture)
47
+ blur_material.set_runtime_texture("depthTexture", PostProcessingEffect.depth_texture)
48
+
49
+ screen_quad.draw_with_material(blur_material)
50
+
51
+ # Pass 3: Combine with scene
52
+ output_rt.bind
53
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
54
+
55
+ combine_material.set_runtime_texture("screenTexture", input_rt.color_texture)
56
+ combine_material.set_runtime_texture("ssaoTexture", @blur_rt.color_texture)
57
+
58
+ screen_quad.draw_with_material(combine_material)
59
+ output_rt
60
+ end
61
+
62
+ attr_accessor :radius, :bias, :power, :blur_size
63
+
64
+ def update_params
65
+ ssao_material.set_float("radius", @radius)
66
+ ssao_material.set_float("bias", @bias)
67
+ ssao_material.set_float("power", @power)
68
+ blur_material.set_int("blurSize", @blur_size)
69
+ end
70
+
71
+ private
72
+
73
+ def kernel
74
+ @kernel ||= begin
75
+ samples = []
76
+ @kernel_size.times do |i|
77
+ # Random point in hemisphere (tangent space)
78
+ x = rand * 2.0 - 1.0
79
+ y = rand * 2.0 - 1.0
80
+ z = rand # z is always positive (hemisphere)
81
+
82
+ # Normalize
83
+ length = Math.sqrt(x**2 + y**2 + z**2)
84
+ x /= length
85
+ y /= length
86
+ z /= length
87
+
88
+ # Scale to distribute more samples near origin (accelerating lerp)
89
+ scale = i.to_f / @kernel_size
90
+ scale = lerp(0.1, 1.0, scale * scale)
91
+
92
+ samples << Vector[x * scale, y * scale, z * scale]
93
+ end
94
+ samples
95
+ end
96
+ end
97
+
98
+ def lerp(a, b, t)
99
+ a + (b - a) * t
100
+ end
101
+
102
+ def noise_texture
103
+ @noise_texture ||= begin
104
+ # 4x4 texture of random rotation vectors (tangent space)
105
+ noise_data = []
106
+ 16.times do
107
+ noise_data << (rand * 2.0 - 1.0) # x
108
+ noise_data << (rand * 2.0 - 1.0) # y
109
+ noise_data << 0.0 # z (rotate around z axis)
110
+ end
111
+
112
+ tex_buf = ' ' * 4
113
+ Engine::GL.GenTextures(1, tex_buf)
114
+ texture = tex_buf.unpack1('L')
115
+
116
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, texture)
117
+ Engine::GL.TexImage2D(Engine::GL::TEXTURE_2D, 0, Engine::GL::RGB16F, 4, 4, 0, Engine::GL::RGB, Engine::GL::FLOAT, noise_data.pack('f*'))
118
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MIN_FILTER, Engine::GL::NEAREST)
119
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MAG_FILTER, Engine::GL::NEAREST)
120
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_S, Engine::GL::REPEAT)
121
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_T, Engine::GL::REPEAT)
122
+ texture
123
+ end
124
+ end
125
+
126
+ def ssao_material
127
+ @ssao_material ||= begin
128
+ material = Engine::Material.create(
129
+ shader: Engine::Shader.for(
130
+ 'fullscreen_vertex.glsl',
131
+ 'post_process/ssao/frag.glsl',
132
+ source: :engine
133
+ )
134
+ )
135
+
136
+ # Upload kernel samples
137
+ kernel.each_with_index do |sample, i|
138
+ material.set_vec3("samples[#{i}]", sample)
139
+ end
140
+ material.set_int("kernelSize", @kernel_size)
141
+ material.set_float("radius", @radius)
142
+ material.set_float("bias", @bias)
143
+ material.set_float("power", @power)
144
+ material
145
+ end
146
+ end
147
+
148
+ def blur_material
149
+ @blur_material ||= begin
150
+ material = Engine::Material.create(
151
+ shader: Engine::Shader.for(
152
+ 'fullscreen_vertex.glsl',
153
+ 'post_process/ssao/blur_frag.glsl',
154
+ source: :engine
155
+ )
156
+ )
157
+ material.set_int("blurSize", @blur_size)
158
+ material.set_float("depthThreshold", @depth_threshold)
159
+ material
160
+ end
161
+ end
162
+
163
+ def combine_material
164
+ @combine_material ||= Engine::Material.create(
165
+ shader: Engine::Shader.for(
166
+ 'fullscreen_vertex.glsl',
167
+ 'post_process/ssao/combine_frag.glsl',
168
+ source: :engine
169
+ )
170
+ )
171
+ end
172
+
173
+ def ensure_textures(width, height)
174
+ half_width = width / 2
175
+ half_height = height / 2
176
+ if @ssao_rt.nil? || @ssao_rt.width != half_width || @ssao_rt.height != half_height
177
+ @ssao_rt = RenderTexture.new(half_width, half_height)
178
+ @blur_rt = RenderTexture.new(half_width, half_height)
179
+ end
180
+ end
181
+ end
182
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class SSREffect
5
+ include Effect
6
+
7
+ def initialize(max_steps: 64, max_ray_distance: 50.0, thickness: 0.5, ray_offset: 2.0)
8
+ @max_steps = max_steps
9
+ @max_ray_distance = max_ray_distance
10
+ @thickness = thickness
11
+ @ray_offset = ray_offset
12
+ end
13
+
14
+ def apply(input_rt, output_rt, screen_quad)
15
+ ensure_textures(input_rt.width, input_rt.height)
16
+
17
+ camera = Engine::Camera.instance
18
+ Engine::GL.Disable(Engine::GL::DEPTH_TEST)
19
+
20
+ # Pass 1: Render SSR at half resolution
21
+ @ssr_rt.bind
22
+ Engine::GL.Disable(Engine::GL::BLEND)
23
+ Engine::GL.ClearColor(0.0, 0.0, 0.0, 0.0)
24
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
25
+
26
+ ssr_material.set_runtime_texture("screenTexture", input_rt.color_texture)
27
+ ssr_material.set_runtime_texture("depthTexture", PostProcessingEffect.depth_texture)
28
+ ssr_material.set_runtime_texture("normalTexture", PostProcessingEffect.normal_texture)
29
+
30
+ ssr_material.set_mat4("inverseVP", camera.inverse_vp_matrix)
31
+ ssr_material.set_mat4("viewProj", camera.matrix)
32
+ ssr_material.set_vec3("cameraPos", camera.position)
33
+ ssr_material.set_float("nearPlane", camera.near)
34
+ ssr_material.set_float("farPlane", camera.far)
35
+
36
+ cubemap = RenderPipeline.skybox_cubemap
37
+ ssr_material.set_cubemap("skyboxCubemap", cubemap&.texture)
38
+
39
+ screen_quad.draw_with_material(ssr_material)
40
+
41
+ # Pass 2: Combine with scene at full resolution
42
+ output_rt.bind
43
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT)
44
+
45
+ combine_material.set_runtime_texture("screenTexture", input_rt.color_texture)
46
+ combine_material.set_runtime_texture("ssrTexture", @ssr_rt.color_texture)
47
+
48
+ screen_quad.draw_with_material(combine_material)
49
+ output_rt
50
+ end
51
+
52
+ private
53
+
54
+ def ssr_material
55
+ @ssr_material ||= begin
56
+ material = Engine::Material.create(
57
+ shader: Engine::Shader.for(
58
+ 'fullscreen_vertex.glsl',
59
+ 'post_process/ssr/frag.glsl',
60
+ source: :engine
61
+ )
62
+ )
63
+ material.set_int("maxSteps", @max_steps)
64
+ material.set_float("maxRayDistance", @max_ray_distance)
65
+ material.set_float("thickness", @thickness)
66
+ material.set_float("rayOffset", @ray_offset)
67
+ material
68
+ end
69
+ end
70
+
71
+ def combine_material
72
+ @combine_material ||= Engine::Material.create(
73
+ shader: Engine::Shader.for(
74
+ 'fullscreen_vertex.glsl',
75
+ 'post_process/ssr/combine_frag.glsl',
76
+ source: :engine
77
+ )
78
+ )
79
+ end
80
+
81
+ def ensure_textures(width, height)
82
+ half_width = width / 2
83
+ half_height = height / 2
84
+ if @ssr_rt.nil? || @ssr_rt.width != half_width || @ssr_rt.height != half_height
85
+ @ssr_rt = RenderTexture.new(half_width, half_height)
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rendering
4
+ class TintEffect
5
+ include SinglePassEffect
6
+
7
+ def initialize(color: [1.0, 1.0, 1.0], intensity: 0.5)
8
+ @material = Engine::Material.create(
9
+ shader: Engine::Shader.for(
10
+ 'fullscreen_vertex.glsl',
11
+ 'post_process/tint_frag.glsl',
12
+ source: :engine
13
+ )
14
+ )
15
+ @material.set_vec4("tintColor", [color[0], color[1], color[2], intensity])
16
+ end
17
+ end
18
+ end
@@ -3,29 +3,261 @@
3
3
  module Rendering
4
4
  module RenderPipeline
5
5
  def self.draw
6
- Engine::GameObject.mesh_renderers.each do |mesh_renderer|
7
- mesh_renderer.update(0)
6
+ update_render_texture_size
7
+ sync_transforms
8
+ SkyboxRenderer.render_cubemap
9
+ reset_viewport
10
+
11
+ GpuTimer.measure(:shadows) do
12
+ enable_depth_test
13
+ draw_shadow_maps
14
+ end
15
+
16
+ GpuTimer.measure(:main_3d) do
17
+ render_texture_a.bind
18
+ clear_buffer
19
+ Engine::GL.Disable(Engine::GL::BLEND) # Disable blending to preserve alpha channel (roughness) in MRT
20
+ draw_3d
21
+ Engine::GL.Enable(Engine::GL::BLEND) # Re-enable for UI and post-processing
22
+ end
23
+
24
+ # Copy normal texture to separate buffer to avoid read/write hazard in SSR
25
+ copy_normal_texture
26
+
27
+ GpuTimer.measure(:skybox) do
28
+ SkyboxRenderer.draw(render_texture_a, render_texture_b, screen_quad)
29
+ end
30
+
31
+ current_texture = PostProcessingEffect.apply_all(render_texture_a, render_texture_b, screen_quad, normal_buffer, start_index: 1)
32
+
33
+ GpuTimer.measure(:ui) do
34
+ disable_depth_test
35
+ current_texture.bind
36
+ draw_ui
37
+ end
38
+
39
+ GpuTimer.measure(:blit) do
40
+ blit_to_screen(current_texture.color_texture)
8
41
  end
9
42
 
43
+ GpuTimer.print_results
44
+ end
45
+
46
+ def self.draw_shadow_maps
47
+ # Render directional light shadows to shared texture array
48
+ directional_casters = Engine::Components::DirectionLight.direction_lights
49
+ .select(&:cast_shadows)
50
+ .take(4)
51
+ directional_casters.each_with_index do |light, layer_index|
52
+ light.shadow_layer_index = layer_index
53
+ render_shadow_map_to_layer(directional_shadow_map_array, layer_index, light.light_space_matrix)
54
+ end
55
+
56
+ # Render spot light shadows to shared texture array
57
+ spot_casters = Engine::Components::SpotLight.spot_lights
58
+ .select(&:cast_shadows)
59
+ .take(4)
60
+ spot_casters.each_with_index do |light, layer_index|
61
+ light.shadow_layer_index = layer_index
62
+ render_shadow_map_to_layer(spot_shadow_map_array, layer_index, light.light_space_matrix)
63
+ end
64
+
65
+ # Render point light shadows to shared cubemap array
66
+ point_casters = Engine::Components::PointLight.point_lights
67
+ .select(&:cast_shadows)
68
+ .take(4)
69
+ point_casters.each_with_index do |light, layer_index|
70
+ light.shadow_layer_index = layer_index
71
+ render_point_shadow_to_layer(layer_index, light)
72
+ end
73
+
74
+ reset_viewport
75
+ end
76
+
77
+ def self.directional_shadow_map_array
78
+ @directional_shadow_map_array ||= ShadowMapArray.new(layer_count: 4)
79
+ end
80
+
81
+ def self.spot_shadow_map_array
82
+ @spot_shadow_map_array ||= ShadowMapArray.new(layer_count: 4)
83
+ end
84
+
85
+ def self.point_shadow_map_array
86
+ @point_shadow_map_array ||= CubemapShadowMapArray.new(layer_count: 4)
87
+ end
88
+
89
+ def self.render_shadow_map_to_layer(shadow_map_array, layer_index, light_space_matrix)
90
+ shadow_map_array.bind_layer(layer_index)
10
91
  instance_renderers.values.each do |renderer|
11
- renderer.draw_all
92
+ renderer.draw_depth_only(light_space_matrix)
93
+ end
94
+ end
95
+
96
+ def self.render_point_shadow_to_layer(layer_index, light)
97
+ light_pos = light.position
98
+ far_plane = light.shadow_far
99
+ matrices = light.light_space_matrices
100
+
101
+ 6.times do |face_index|
102
+ point_shadow_map_array.bind_face(layer_index, face_index)
103
+ instance_renderers.values.each do |renderer|
104
+ renderer.draw_point_light_depth(matrices[face_index], light_pos, far_plane)
105
+ end
12
106
  end
13
107
  end
14
108
 
109
+ def self.sync_transforms
110
+ Engine::GameObject.mesh_renderers.each do |renderer|
111
+ renderer.sync_transform if renderer.respond_to?(:sync_transform)
112
+ end
113
+ end
114
+
115
+ def self.draw_3d
116
+ instance_renderers.values.each(&:draw_all)
117
+ end
118
+
119
+ def self.draw_ui
120
+ Engine::GL.Clear(Engine::GL::STENCIL_BUFFER_BIT)
121
+ Engine::GL.Disable(Engine::GL::CULL_FACE)
122
+ Engine::Components::UI::Rect.draw_all
123
+ Engine::GL.Enable(Engine::GL::CULL_FACE)
124
+ end
125
+
15
126
  def self.add_instance(mesh_renderer)
16
- instance_renderers[[mesh_renderer.mesh, mesh_renderer.material]].add_instance(mesh_renderer)
127
+ instance_renderers[mesh_renderer.renderer_key].add_instance(mesh_renderer)
17
128
  end
18
129
 
19
130
  def self.remove_instance(mesh_renderer)
20
- instance_renderers[[mesh_renderer.mesh, mesh_renderer.material]].remove_instance(mesh_renderer)
131
+ instance_renderers[mesh_renderer.renderer_key].remove_instance(mesh_renderer)
21
132
  end
22
133
 
23
134
  def self.update_instance(mesh_renderer)
24
- instance_renderers[[mesh_renderer.mesh, mesh_renderer.material]].update_instance(mesh_renderer)
135
+ instance_renderers[mesh_renderer.renderer_key].update_instance(mesh_renderer)
136
+ end
137
+
138
+ def self.set_skybox_colors(ground:, horizon:, sky:, ground_y: -0.3, horizon_y: 0.0, sky_y: 1.0)
139
+ SkyboxRenderer.set_colors(ground: ground, horizon: horizon, sky: sky, ground_y: ground_y, horizon_y: horizon_y, sky_y: sky_y)
140
+ end
141
+
142
+ def self.skybox_cubemap
143
+ SkyboxRenderer.cubemap
25
144
  end
26
145
 
27
146
  private
28
147
 
148
+ def self.alternate_rt(current_rt)
149
+ current_rt == render_texture_a ? render_texture_b : render_texture_a
150
+ end
151
+
152
+ def self.clear_buffer
153
+ Engine::GL.Clear(Engine::GL::COLOR_BUFFER_BIT | Engine::GL::DEPTH_BUFFER_BIT)
154
+ end
155
+
156
+ def self.blit_to_screen(texture)
157
+ Engine::GL.BindFramebuffer(Engine::GL::FRAMEBUFFER, 0)
158
+ reset_viewport
159
+ screen_quad.draw(blit_material, texture)
160
+ end
161
+
162
+ def self.enable_depth_test
163
+ Engine::GL.Enable(Engine::GL::DEPTH_TEST)
164
+ Engine::GL.DepthFunc(Engine::GL::LESS)
165
+ end
166
+
167
+ def self.disable_depth_test
168
+ Engine::GL.Disable(Engine::GL::DEPTH_TEST)
169
+ end
170
+
171
+ def self.reset_viewport
172
+ Engine::GL.Viewport(0, 0, Engine::Window.framebuffer_width, Engine::Window.framebuffer_height)
173
+ end
174
+
175
+ def self.blit_material
176
+ @blit_material ||= Engine::Material.create(shader: Engine::Shader.fullscreen)
177
+ end
178
+
179
+ def self.update_render_texture_size
180
+ width = Engine::Window.framebuffer_width
181
+ height = Engine::Window.framebuffer_height
182
+ render_texture_a.resize(width, height)
183
+ render_texture_b.resize(width, height)
184
+ resize_normal_buffer(width, height)
185
+ end
186
+
187
+ def self.normal_buffer
188
+ @normal_buffer ||= create_normal_buffer
189
+ end
190
+
191
+ def self.create_normal_buffer
192
+ width = Engine::Window.framebuffer_width
193
+ height = Engine::Window.framebuffer_height
194
+
195
+ tex_buf = ' ' * 4
196
+ Engine::GL.GenTextures(1, tex_buf)
197
+ texture = tex_buf.unpack1('L')
198
+
199
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, texture)
200
+ Engine::GL.TexImage2D(Engine::GL::TEXTURE_2D, 0, Engine::GL::RGBA16F, width, height, 0, Engine::GL::RGBA, Engine::GL::FLOAT, nil)
201
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MIN_FILTER, Engine::GL::LINEAR)
202
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_MAG_FILTER, Engine::GL::LINEAR)
203
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_S, Engine::GL::CLAMP_TO_EDGE)
204
+ Engine::GL.TexParameteri(Engine::GL::TEXTURE_2D, Engine::GL::TEXTURE_WRAP_T, Engine::GL::CLAMP_TO_EDGE)
205
+
206
+ @normal_buffer_width = width
207
+ @normal_buffer_height = height
208
+ texture
209
+ end
210
+
211
+ def self.resize_normal_buffer(width, height)
212
+ return if @normal_buffer_width == width && @normal_buffer_height == height
213
+ return unless @normal_buffer
214
+
215
+ Engine::GL.BindTexture(Engine::GL::TEXTURE_2D, @normal_buffer)
216
+ Engine::GL.TexImage2D(Engine::GL::TEXTURE_2D, 0, Engine::GL::RGBA16F, width, height, 0, Engine::GL::RGBA, Engine::GL::FLOAT, nil)
217
+ @normal_buffer_width = width
218
+ @normal_buffer_height = height
219
+ end
220
+
221
+ def self.copy_normal_texture
222
+ width = Engine::Window.framebuffer_width
223
+ height = Engine::Window.framebuffer_height
224
+
225
+ # Bind source (render_texture_a's normal attachment) as read framebuffer
226
+ Engine::GL.BindFramebuffer(Engine::GL::READ_FRAMEBUFFER, render_texture_a.framebuffer)
227
+ Engine::GL.ReadBuffer(Engine::GL::COLOR_ATTACHMENT1) # Normal is second attachment
228
+
229
+ # Bind destination texture to a temp framebuffer for writing
230
+ Engine::GL.BindFramebuffer(Engine::GL::DRAW_FRAMEBUFFER, copy_fbo)
231
+ Engine::GL.FramebufferTexture2D(Engine::GL::DRAW_FRAMEBUFFER, Engine::GL::COLOR_ATTACHMENT0, Engine::GL::TEXTURE_2D, normal_buffer, 0)
232
+
233
+ # Blit
234
+ Engine::GL.BlitFramebuffer(0, 0, width, height, 0, 0, width, height, Engine::GL::COLOR_BUFFER_BIT, Engine::GL::NEAREST)
235
+ end
236
+
237
+ def self.copy_fbo
238
+ return @copy_fbo if @copy_fbo
239
+
240
+ fbo_buf = ' ' * 4
241
+ Engine::GL.GenFramebuffers(1, fbo_buf)
242
+ @copy_fbo = fbo_buf.unpack1('L')
243
+ end
244
+
245
+ def self.render_texture_a
246
+ @render_texture_a ||= RenderTexture.new(
247
+ Engine::Window.framebuffer_width,
248
+ Engine::Window.framebuffer_height,
249
+ num_color_attachments: 2 # Color + Normal/Roughness for SSR
250
+ )
251
+ end
252
+
253
+ def self.render_texture_b
254
+ @render_texture_b ||= RenderTexture.new(Engine::Window.framebuffer_width, Engine::Window.framebuffer_height)
255
+ end
256
+
257
+ def self.screen_quad
258
+ @screen_quad ||= ScreenQuad.new
259
+ end
260
+
29
261
  def self.instance_renderers
30
262
  @instance_renderers ||= Hash.new do |hash, key|
31
263
  hash[key] = InstanceRenderer.new(key[0], key[1])