koffi 0.9.5 → 0.9.8

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 (882) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +74 -9
  3. package/package.json +27 -7
  4. package/src/call.hh +2 -1
  5. package/src/call_arm32.cc +525 -0
  6. package/src/call_arm32_fwd.S +108 -0
  7. package/src/call_arm64.cc +90 -63
  8. package/src/call_arm64_fwd.S +24 -29
  9. package/src/call_x64_sysv.cc +61 -48
  10. package/src/call_x64_win.cc +69 -43
  11. package/src/call_x86.cc +83 -62
  12. package/src/ffi.cc +166 -37
  13. package/src/ffi.hh +43 -12
  14. package/src/util.cc +72 -32
  15. package/src/util.hh +127 -18
  16. package/test/files/node32.cmd +6 -0
  17. package/test/files/node64.cmd +6 -0
  18. package/test/registry/machines.json +185 -0
  19. package/test/registry/sha256sum.txt +24 -0
  20. package/test/test.js +625 -0
  21. package/test/tests/misc.c +40 -0
  22. package/test/tests/misc.js +54 -0
  23. package/test/tests/raylib.js +167 -0
  24. package/vendor/dragonbox/include/dragonbox/dragonbox.h +6 -2
  25. package/vendor/dragonbox/other_files/Dragonbox.pdf +0 -0
  26. package/vendor/libcc/libcc.cc +36 -18
  27. package/vendor/libcc/libcc.hh +23 -1
  28. package/vendor/raylib/BINDINGS.md +123 -0
  29. package/vendor/raylib/CHANGELOG +1495 -0
  30. package/vendor/raylib/CMakeLists.txt +33 -0
  31. package/vendor/raylib/CMakeOptions.txt +87 -0
  32. package/vendor/raylib/CONTRIBUTING.md +76 -0
  33. package/vendor/raylib/CONTRIBUTORS.md +63 -0
  34. package/vendor/raylib/CONVENTIONS.md +95 -0
  35. package/vendor/raylib/HISTORY.md +364 -0
  36. package/vendor/raylib/LICENSE +16 -0
  37. package/vendor/raylib/README.md +141 -0
  38. package/vendor/raylib/ROADMAP.md +76 -0
  39. package/vendor/raylib/SPONSORS.md +68 -0
  40. package/vendor/raylib/cmake/AddIfFlagCompiles.cmake +12 -0
  41. package/vendor/raylib/cmake/BuildOptions.cmake +18 -0
  42. package/vendor/raylib/cmake/CompileDefinitions.cmake +110 -0
  43. package/vendor/raylib/cmake/CompilerFlags.cmake +79 -0
  44. package/vendor/raylib/cmake/EnumOption.cmake +9 -0
  45. package/vendor/raylib/cmake/GlfwImport.cmake +34 -0
  46. package/vendor/raylib/cmake/InstallConfigurations.cmake +29 -0
  47. package/vendor/raylib/cmake/JoinPaths.cmake +26 -0
  48. package/vendor/raylib/cmake/LibraryConfigurations.cmake +108 -0
  49. package/vendor/raylib/cmake/LibraryPathToLinkerFlags.cmake +24 -0
  50. package/vendor/raylib/cmake/PackConfigurations.cmake +13 -0
  51. package/vendor/raylib/cmake/PopulateConfigVariablesLocally.cmake +11 -0
  52. package/vendor/raylib/cmake/raylib-config-version.cmake +21 -0
  53. package/vendor/raylib/cmake/raylib-config.cmake +76 -0
  54. package/vendor/raylib/examples/CMakeLists.txt +139 -0
  55. package/vendor/raylib/examples/Makefile +565 -0
  56. package/vendor/raylib/examples/Makefile.Android +405 -0
  57. package/vendor/raylib/examples/Makefile.Web +1053 -0
  58. package/vendor/raylib/examples/README.md +203 -0
  59. package/vendor/raylib/examples/audio/audio_module_playing.c +146 -0
  60. package/vendor/raylib/examples/audio/audio_module_playing.png +0 -0
  61. package/vendor/raylib/examples/audio/audio_multichannel_sound.c +73 -0
  62. package/vendor/raylib/examples/audio/audio_multichannel_sound.png +0 -0
  63. package/vendor/raylib/examples/audio/audio_music_stream.c +93 -0
  64. package/vendor/raylib/examples/audio/audio_music_stream.png +0 -0
  65. package/vendor/raylib/examples/audio/audio_raw_stream.c +167 -0
  66. package/vendor/raylib/examples/audio/audio_raw_stream.png +0 -0
  67. package/vendor/raylib/examples/audio/audio_sound_loading.c +64 -0
  68. package/vendor/raylib/examples/audio/audio_sound_loading.png +0 -0
  69. package/vendor/raylib/examples/audio/resources/LICENSE.md +10 -0
  70. package/vendor/raylib/examples/audio/resources/coin.wav +0 -0
  71. package/vendor/raylib/examples/audio/resources/country.mp3 +0 -0
  72. package/vendor/raylib/examples/audio/resources/mini1111.xm +0 -0
  73. package/vendor/raylib/examples/audio/resources/sound.wav +0 -0
  74. package/vendor/raylib/examples/audio/resources/spring.wav +0 -0
  75. package/vendor/raylib/examples/audio/resources/target.flac +0 -0
  76. package/vendor/raylib/examples/audio/resources/target.ogg +0 -0
  77. package/vendor/raylib/examples/audio/resources/weird.wav +0 -0
  78. package/vendor/raylib/examples/build.zig +86 -0
  79. package/vendor/raylib/examples/core/core_2d_camera.c +132 -0
  80. package/vendor/raylib/examples/core/core_2d_camera.png +0 -0
  81. package/vendor/raylib/examples/core/core_2d_camera_platformer.c +293 -0
  82. package/vendor/raylib/examples/core/core_2d_camera_platformer.png +0 -0
  83. package/vendor/raylib/examples/core/core_2d_camera_smooth_pixelperfect.png +0 -0
  84. package/vendor/raylib/examples/core/core_3d_camera_first_person.c +97 -0
  85. package/vendor/raylib/examples/core/core_3d_camera_first_person.png +0 -0
  86. package/vendor/raylib/examples/core/core_3d_camera_free.c +83 -0
  87. package/vendor/raylib/examples/core/core_3d_camera_free.png +0 -0
  88. package/vendor/raylib/examples/core/core_3d_camera_mode.c +73 -0
  89. package/vendor/raylib/examples/core/core_3d_camera_mode.png +0 -0
  90. package/vendor/raylib/examples/core/core_3d_picking.c +107 -0
  91. package/vendor/raylib/examples/core/core_3d_picking.png +0 -0
  92. package/vendor/raylib/examples/core/core_basic_screen_manager.c +150 -0
  93. package/vendor/raylib/examples/core/core_basic_screen_manager.png +0 -0
  94. package/vendor/raylib/examples/core/core_basic_window.c +62 -0
  95. package/vendor/raylib/examples/core/core_basic_window.png +0 -0
  96. package/vendor/raylib/examples/core/core_basic_window_web.c +85 -0
  97. package/vendor/raylib/examples/core/core_custom_frame_control.c +125 -0
  98. package/vendor/raylib/examples/core/core_custom_frame_control.png +0 -0
  99. package/vendor/raylib/examples/core/core_custom_logging.c +84 -0
  100. package/vendor/raylib/examples/core/core_custom_logging.png +0 -0
  101. package/vendor/raylib/examples/core/core_drop_files.c +76 -0
  102. package/vendor/raylib/examples/core/core_drop_files.png +0 -0
  103. package/vendor/raylib/examples/core/core_input_gamepad.c +195 -0
  104. package/vendor/raylib/examples/core/core_input_gamepad.png +0 -0
  105. package/vendor/raylib/examples/core/core_input_gestures.c +115 -0
  106. package/vendor/raylib/examples/core/core_input_gestures.png +0 -0
  107. package/vendor/raylib/examples/core/core_input_keys.c +59 -0
  108. package/vendor/raylib/examples/core/core_input_keys.png +0 -0
  109. package/vendor/raylib/examples/core/core_input_mouse.c +65 -0
  110. package/vendor/raylib/examples/core/core_input_mouse.png +0 -0
  111. package/vendor/raylib/examples/core/core_input_mouse_wheel.c +58 -0
  112. package/vendor/raylib/examples/core/core_input_mouse_wheel.png +0 -0
  113. package/vendor/raylib/examples/core/core_input_multitouch.c +70 -0
  114. package/vendor/raylib/examples/core/core_input_multitouch.png +0 -0
  115. package/vendor/raylib/examples/core/core_loading_thread.c +147 -0
  116. package/vendor/raylib/examples/core/core_loading_thread.png +0 -0
  117. package/vendor/raylib/examples/core/core_quat_conversion.c +132 -0
  118. package/vendor/raylib/examples/core/core_quat_conversion.png +0 -0
  119. package/vendor/raylib/examples/core/core_random_values.c +67 -0
  120. package/vendor/raylib/examples/core/core_random_values.png +0 -0
  121. package/vendor/raylib/examples/core/core_scissor_test.c +71 -0
  122. package/vendor/raylib/examples/core/core_scissor_test.png +0 -0
  123. package/vendor/raylib/examples/core/core_smooth_pixelperfect.c +117 -0
  124. package/vendor/raylib/examples/core/core_smooth_pixelperfect.png +0 -0
  125. package/vendor/raylib/examples/core/core_split_screen.c +155 -0
  126. package/vendor/raylib/examples/core/core_split_screen.png +0 -0
  127. package/vendor/raylib/examples/core/core_storage_values.c +87 -0
  128. package/vendor/raylib/examples/core/core_storage_values.png +0 -0
  129. package/vendor/raylib/examples/core/core_vr_simulator.c +143 -0
  130. package/vendor/raylib/examples/core/core_vr_simulator.png +0 -0
  131. package/vendor/raylib/examples/core/core_window_flags.c +191 -0
  132. package/vendor/raylib/examples/core/core_window_flags.png +0 -0
  133. package/vendor/raylib/examples/core/core_window_letterbox.c +112 -0
  134. package/vendor/raylib/examples/core/core_window_letterbox.png +0 -0
  135. package/vendor/raylib/examples/core/core_world_screen.c +78 -0
  136. package/vendor/raylib/examples/core/core_world_screen.png +0 -0
  137. package/vendor/raylib/examples/core/resources/LICENSE.md +4 -0
  138. package/vendor/raylib/examples/core/resources/distortion100.fs +52 -0
  139. package/vendor/raylib/examples/core/resources/distortion330.fs +53 -0
  140. package/vendor/raylib/examples/core/resources/ps3.png +0 -0
  141. package/vendor/raylib/examples/core/resources/xbox.png +0 -0
  142. package/vendor/raylib/examples/examples_template.c +100 -0
  143. package/vendor/raylib/examples/models/models_animation.c +114 -0
  144. package/vendor/raylib/examples/models/models_animation.png +0 -0
  145. package/vendor/raylib/examples/models/models_billboard.c +75 -0
  146. package/vendor/raylib/examples/models/models_billboard.png +0 -0
  147. package/vendor/raylib/examples/models/models_box_collisions.c +121 -0
  148. package/vendor/raylib/examples/models/models_box_collisions.png +0 -0
  149. package/vendor/raylib/examples/models/models_cubicmap.c +87 -0
  150. package/vendor/raylib/examples/models/models_cubicmap.png +0 -0
  151. package/vendor/raylib/examples/models/models_first_person_maze.c +122 -0
  152. package/vendor/raylib/examples/models/models_first_person_maze.png +0 -0
  153. package/vendor/raylib/examples/models/models_geometric_shapes.c +80 -0
  154. package/vendor/raylib/examples/models/models_geometric_shapes.png +0 -0
  155. package/vendor/raylib/examples/models/models_heightmap.c +82 -0
  156. package/vendor/raylib/examples/models/models_heightmap.png +0 -0
  157. package/vendor/raylib/examples/models/models_loading.c +146 -0
  158. package/vendor/raylib/examples/models/models_loading.png +0 -0
  159. package/vendor/raylib/examples/models/models_loading_gltf.c +105 -0
  160. package/vendor/raylib/examples/models/models_loading_gltf.png +0 -0
  161. package/vendor/raylib/examples/models/models_loading_vox.c +130 -0
  162. package/vendor/raylib/examples/models/models_loading_vox.png +0 -0
  163. package/vendor/raylib/examples/models/models_mesh_generation.c +179 -0
  164. package/vendor/raylib/examples/models/models_mesh_generation.png +0 -0
  165. package/vendor/raylib/examples/models/models_mesh_picking.c +223 -0
  166. package/vendor/raylib/examples/models/models_mesh_picking.png +0 -0
  167. package/vendor/raylib/examples/models/models_orthographic_projection.c +99 -0
  168. package/vendor/raylib/examples/models/models_orthographic_projection.png +0 -0
  169. package/vendor/raylib/examples/models/models_rlgl_solar_system.c +172 -0
  170. package/vendor/raylib/examples/models/models_rlgl_solar_system.png +0 -0
  171. package/vendor/raylib/examples/models/models_skybox.c +262 -0
  172. package/vendor/raylib/examples/models/models_skybox.png +0 -0
  173. package/vendor/raylib/examples/models/models_waving_cubes.c +112 -0
  174. package/vendor/raylib/examples/models/models_waving_cubes.png +0 -0
  175. package/vendor/raylib/examples/models/models_yaw_pitch_roll.c +117 -0
  176. package/vendor/raylib/examples/models/models_yaw_pitch_roll.png +0 -0
  177. package/vendor/raylib/examples/models/resources/LICENSE.md +23 -0
  178. package/vendor/raylib/examples/models/resources/billboard.png +0 -0
  179. package/vendor/raylib/examples/models/resources/cubicmap.png +0 -0
  180. package/vendor/raylib/examples/models/resources/cubicmap_atlas.png +0 -0
  181. package/vendor/raylib/examples/models/resources/dresden_square_1k.hdr +0 -0
  182. package/vendor/raylib/examples/models/resources/dresden_square_2k.hdr +0 -0
  183. package/vendor/raylib/examples/models/resources/heightmap.png +0 -0
  184. package/vendor/raylib/examples/models/resources/models/gltf/AnimatedMorphCube.glb +0 -0
  185. package/vendor/raylib/examples/models/resources/models/gltf/AnimatedTriangle.gltf +118 -0
  186. package/vendor/raylib/examples/models/resources/models/gltf/BoxAnimated.glb +0 -0
  187. package/vendor/raylib/examples/models/resources/models/gltf/LICENSE +23 -0
  188. package/vendor/raylib/examples/models/resources/models/gltf/girl.glb +0 -0
  189. package/vendor/raylib/examples/models/resources/models/gltf/raylib_32x32.glb +0 -0
  190. package/vendor/raylib/examples/models/resources/models/gltf/rigged_figure.glb +0 -0
  191. package/vendor/raylib/examples/models/resources/models/gltf/vertex_colored_object.glb +0 -0
  192. package/vendor/raylib/examples/models/resources/models/iqm/guy.blend +0 -0
  193. package/vendor/raylib/examples/models/resources/models/iqm/guy.iqm +0 -0
  194. package/vendor/raylib/examples/models/resources/models/iqm/guyanim.iqm +0 -0
  195. package/vendor/raylib/examples/models/resources/models/iqm/guytex.png +0 -0
  196. package/vendor/raylib/examples/models/resources/models/iqm/vertex_colored_object.iqm +0 -0
  197. package/vendor/raylib/examples/models/resources/models/obj/bridge.obj +1725 -0
  198. package/vendor/raylib/examples/models/resources/models/obj/bridge_diffuse.png +0 -0
  199. package/vendor/raylib/examples/models/resources/models/obj/castle.obj +12919 -0
  200. package/vendor/raylib/examples/models/resources/models/obj/castle_diffuse.png +0 -0
  201. package/vendor/raylib/examples/models/resources/models/obj/cube.obj +68 -0
  202. package/vendor/raylib/examples/models/resources/models/obj/cube_diffuse.png +0 -0
  203. package/vendor/raylib/examples/models/resources/models/obj/house.obj +4564 -0
  204. package/vendor/raylib/examples/models/resources/models/obj/house_diffuse.png +0 -0
  205. package/vendor/raylib/examples/models/resources/models/obj/market.obj +7301 -0
  206. package/vendor/raylib/examples/models/resources/models/obj/market_diffuse.png +0 -0
  207. package/vendor/raylib/examples/models/resources/models/obj/plane.obj +10858 -0
  208. package/vendor/raylib/examples/models/resources/models/obj/plane_diffuse.png +0 -0
  209. package/vendor/raylib/examples/models/resources/models/obj/turret.obj +1888 -0
  210. package/vendor/raylib/examples/models/resources/models/obj/turret_diffuse.png +0 -0
  211. package/vendor/raylib/examples/models/resources/models/obj/well.obj +1030 -0
  212. package/vendor/raylib/examples/models/resources/models/obj/well_diffuse.png +0 -0
  213. package/vendor/raylib/examples/models/resources/models/vox/LICENSE +9 -0
  214. package/vendor/raylib/examples/models/resources/models/vox/chr_knight.vox +0 -0
  215. package/vendor/raylib/examples/models/resources/models/vox/chr_sword.vox +0 -0
  216. package/vendor/raylib/examples/models/resources/models/vox/monu9.vox +0 -0
  217. package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.fs +29 -0
  218. package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.vs +20 -0
  219. package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.fs +31 -0
  220. package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.vs +24 -0
  221. package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.fs +30 -0
  222. package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.vs +20 -0
  223. package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.fs +30 -0
  224. package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.vs +24 -0
  225. package/vendor/raylib/examples/models/resources/skybox.png +0 -0
  226. package/vendor/raylib/examples/models/rlights.h +183 -0
  227. package/vendor/raylib/examples/others/easings.h +263 -0
  228. package/vendor/raylib/examples/others/easings_testbed.c +227 -0
  229. package/vendor/raylib/examples/others/embedded_files_loading.c +103 -0
  230. package/vendor/raylib/examples/others/external/include/GLFW/glfw3.h +5538 -0
  231. package/vendor/raylib/examples/others/external/include/GLFW/glfw3native.h +572 -0
  232. package/vendor/raylib/examples/others/external/include/glad.h +5466 -0
  233. package/vendor/raylib/examples/others/external/lib/libglfw3.a +0 -0
  234. package/vendor/raylib/examples/others/raudio_standalone.c +152 -0
  235. package/vendor/raylib/examples/others/raylib_opengl_interop.c +152 -0
  236. package/vendor/raylib/examples/others/raylib_opengl_interop.png +0 -0
  237. package/vendor/raylib/examples/others/resources/audio/country.mp3 +0 -0
  238. package/vendor/raylib/examples/others/resources/audio/target.ogg +0 -0
  239. package/vendor/raylib/examples/others/resources/audio/weird.wav +0 -0
  240. package/vendor/raylib/examples/others/resources/audio_data.h +4893 -0
  241. package/vendor/raylib/examples/others/resources/image_data.h +9848 -0
  242. package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.fs +16 -0
  243. package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.vs +24 -0
  244. package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.fs +17 -0
  245. package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.vs +24 -0
  246. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol.glsl +41 -0
  247. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_render.glsl +29 -0
  248. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_transfert.glsl +51 -0
  249. package/vendor/raylib/examples/others/rlgl_compute_shader.c +173 -0
  250. package/vendor/raylib/examples/others/rlgl_standalone.c +469 -0
  251. package/vendor/raylib/examples/physics/physics_demo.c +128 -0
  252. package/vendor/raylib/examples/physics/physics_demo.png +0 -0
  253. package/vendor/raylib/examples/physics/physics_friction.c +142 -0
  254. package/vendor/raylib/examples/physics/physics_friction.png +0 -0
  255. package/vendor/raylib/examples/physics/physics_movement.c +128 -0
  256. package/vendor/raylib/examples/physics/physics_movement.png +0 -0
  257. package/vendor/raylib/examples/physics/physics_restitution.c +129 -0
  258. package/vendor/raylib/examples/physics/physics_restitution.png +0 -0
  259. package/vendor/raylib/examples/physics/physics_shatter.c +111 -0
  260. package/vendor/raylib/examples/physics/physics_shatter.png +0 -0
  261. package/vendor/raylib/examples/raylib_compile_execute.bat +32 -0
  262. package/vendor/raylib/examples/raylib_makefile_example.bat +27 -0
  263. package/vendor/raylib/examples/shaders/resources/LICENSE.md +11 -0
  264. package/vendor/raylib/examples/shaders/resources/fudesumi.png +0 -0
  265. package/vendor/raylib/examples/shaders/resources/mask.png +0 -0
  266. package/vendor/raylib/examples/shaders/resources/models/barracks.obj +22251 -0
  267. package/vendor/raylib/examples/shaders/resources/models/barracks_diffuse.png +0 -0
  268. package/vendor/raylib/examples/shaders/resources/models/church.obj +5116 -0
  269. package/vendor/raylib/examples/shaders/resources/models/church_diffuse.png +0 -0
  270. package/vendor/raylib/examples/shaders/resources/models/watermill.obj +5316 -0
  271. package/vendor/raylib/examples/shaders/resources/models/watermill_diffuse.png +0 -0
  272. package/vendor/raylib/examples/shaders/resources/plasma.png +0 -0
  273. package/vendor/raylib/examples/shaders/resources/raysan.png +0 -0
  274. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.fs +23 -0
  275. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.vs +26 -0
  276. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting.vs +59 -0
  277. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting_instanced.vs +36 -0
  278. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/bloom.fs +39 -0
  279. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/blur.fs +34 -0
  280. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/color_mix.fs +26 -0
  281. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_hatching.fs +47 -0
  282. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_stitching.fs +57 -0
  283. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cubes_panning.fs +60 -0
  284. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/depth.fs +26 -0
  285. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/distortion.fs +54 -0
  286. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/dream_vision.fs +37 -0
  287. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/eratosthenes.fs +60 -0
  288. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fisheye.fs +43 -0
  289. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fog.fs +94 -0
  290. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/grayscale.fs +25 -0
  291. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs +83 -0
  292. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs +81 -0
  293. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/mask.fs +24 -0
  294. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/outline.fs +34 -0
  295. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/palette_switch.fs +41 -0
  296. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/pixelizer.fs +32 -0
  297. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/posterization.fs +29 -0
  298. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/predator.fs +31 -0
  299. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/raymarching.fs +431 -0
  300. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/reload.fs +39 -0
  301. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/scanlines.fs +44 -0
  302. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/sobel.fs +40 -0
  303. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/spotlight.fs +77 -0
  304. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs +46 -0
  305. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/wave.fs +36 -0
  306. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.fs +22 -0
  307. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.vs +26 -0
  308. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base_lighting.vs +59 -0
  309. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/bloom.fs +37 -0
  310. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/blur.fs +32 -0
  311. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_hatching.fs +45 -0
  312. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_stitching.fs +55 -0
  313. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/distortion.fs +52 -0
  314. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/dream_vision.fs +35 -0
  315. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fisheye.fs +41 -0
  316. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fog.fs +92 -0
  317. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/grayscale.fs +23 -0
  318. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/palette_switch.fs +27 -0
  319. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/pixelizer.fs +30 -0
  320. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/posterization.fs +27 -0
  321. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/predator.fs +29 -0
  322. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/scanlines.fs +42 -0
  323. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/sobel.fs +38 -0
  324. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/swirl.fs +44 -0
  325. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.fs +25 -0
  326. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.vs +26 -0
  327. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting.vs +32 -0
  328. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting_instanced.vs +36 -0
  329. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/bloom.fs +40 -0
  330. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/blur.fs +35 -0
  331. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/color_mix.fs +27 -0
  332. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_hatching.fs +48 -0
  333. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_stitching.fs +59 -0
  334. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cubes_panning.fs +61 -0
  335. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/depth.fs +27 -0
  336. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/distortion.fs +56 -0
  337. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/dream_vision.fs +34 -0
  338. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/eratosthenes.fs +59 -0
  339. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fisheye.fs +40 -0
  340. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fog.fs +95 -0
  341. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/grayscale.fs +26 -0
  342. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs +81 -0
  343. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs +82 -0
  344. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/mask.fs +22 -0
  345. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/outline.fs +35 -0
  346. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/overdraw.fs +26 -0
  347. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/palette_switch.fs +30 -0
  348. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/pixelizer.fs +33 -0
  349. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/posterization.fs +31 -0
  350. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/predator.fs +32 -0
  351. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/raymarching.fs +430 -0
  352. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/reload.fs +40 -0
  353. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/scanlines.fs +49 -0
  354. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/sobel.fs +41 -0
  355. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/spotlight.fs +65 -0
  356. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/swirl.fs +47 -0
  357. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/wave.fs +37 -0
  358. package/vendor/raylib/examples/shaders/resources/space.png +0 -0
  359. package/vendor/raylib/examples/shaders/resources/texel_checker.png +0 -0
  360. package/vendor/raylib/examples/shaders/rlights.h +183 -0
  361. package/vendor/raylib/examples/shaders/shaders_basic_lighting.c +152 -0
  362. package/vendor/raylib/examples/shaders/shaders_basic_lighting.png +0 -0
  363. package/vendor/raylib/examples/shaders/shaders_custom_uniform.c +127 -0
  364. package/vendor/raylib/examples/shaders/shaders_custom_uniform.png +0 -0
  365. package/vendor/raylib/examples/shaders/shaders_eratosthenes.c +92 -0
  366. package/vendor/raylib/examples/shaders/shaders_eratosthenes.png +0 -0
  367. package/vendor/raylib/examples/shaders/shaders_fog.c +160 -0
  368. package/vendor/raylib/examples/shaders/shaders_fog.png +0 -0
  369. package/vendor/raylib/examples/shaders/shaders_hot_reloading.c +130 -0
  370. package/vendor/raylib/examples/shaders/shaders_hot_reloading.png +0 -0
  371. package/vendor/raylib/examples/shaders/shaders_julia_set.c +191 -0
  372. package/vendor/raylib/examples/shaders/shaders_julia_set.png +0 -0
  373. package/vendor/raylib/examples/shaders/shaders_mesh_instancing.c +224 -0
  374. package/vendor/raylib/examples/shaders/shaders_mesh_instancing.png +0 -0
  375. package/vendor/raylib/examples/shaders/shaders_model_shader.c +103 -0
  376. package/vendor/raylib/examples/shaders/shaders_model_shader.png +0 -0
  377. package/vendor/raylib/examples/shaders/shaders_multi_sample2d.c +105 -0
  378. package/vendor/raylib/examples/shaders/shaders_multi_sample2d.png +0 -0
  379. package/vendor/raylib/examples/shaders/shaders_palette_switch.c +147 -0
  380. package/vendor/raylib/examples/shaders/shaders_palette_switch.png +0 -0
  381. package/vendor/raylib/examples/shaders/shaders_postprocessing.c +170 -0
  382. package/vendor/raylib/examples/shaders/shaders_postprocessing.png +0 -0
  383. package/vendor/raylib/examples/shaders/shaders_raymarching.c +113 -0
  384. package/vendor/raylib/examples/shaders/shaders_raymarching.png +0 -0
  385. package/vendor/raylib/examples/shaders/shaders_shapes_textures.c +116 -0
  386. package/vendor/raylib/examples/shaders/shaders_shapes_textures.png +0 -0
  387. package/vendor/raylib/examples/shaders/shaders_simple_mask.c +144 -0
  388. package/vendor/raylib/examples/shaders/shaders_simple_mask.png +0 -0
  389. package/vendor/raylib/examples/shaders/shaders_spotlight.c +254 -0
  390. package/vendor/raylib/examples/shaders/shaders_spotlight.png +0 -0
  391. package/vendor/raylib/examples/shaders/shaders_texture_drawing.c +80 -0
  392. package/vendor/raylib/examples/shaders/shaders_texture_drawing.png +0 -0
  393. package/vendor/raylib/examples/shaders/shaders_texture_outline.c +97 -0
  394. package/vendor/raylib/examples/shaders/shaders_texture_outline.png +0 -0
  395. package/vendor/raylib/examples/shaders/shaders_texture_waves.c +110 -0
  396. package/vendor/raylib/examples/shaders/shaders_texture_waves.png +0 -0
  397. package/vendor/raylib/examples/shapes/shapes_basic_shapes.c +78 -0
  398. package/vendor/raylib/examples/shapes/shapes_basic_shapes.png +0 -0
  399. package/vendor/raylib/examples/shapes/shapes_bouncing_ball.c +76 -0
  400. package/vendor/raylib/examples/shapes/shapes_bouncing_ball.png +0 -0
  401. package/vendor/raylib/examples/shapes/shapes_collision_area.c +108 -0
  402. package/vendor/raylib/examples/shapes/shapes_collision_area.png +0 -0
  403. package/vendor/raylib/examples/shapes/shapes_colors_palette.c +99 -0
  404. package/vendor/raylib/examples/shapes/shapes_colors_palette.png +0 -0
  405. package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.c +83 -0
  406. package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.png +0 -0
  407. package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.c +89 -0
  408. package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.png +0 -0
  409. package/vendor/raylib/examples/shapes/shapes_draw_ring.c +96 -0
  410. package/vendor/raylib/examples/shapes/shapes_draw_ring.png +0 -0
  411. package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.c +110 -0
  412. package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.png +0 -0
  413. package/vendor/raylib/examples/shapes/shapes_easings_box_anim.c +136 -0
  414. package/vendor/raylib/examples/shapes/shapes_easings_box_anim.png +0 -0
  415. package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.c +118 -0
  416. package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.png +0 -0
  417. package/vendor/raylib/examples/shapes/shapes_following_eyes.c +104 -0
  418. package/vendor/raylib/examples/shapes/shapes_following_eyes.png +0 -0
  419. package/vendor/raylib/examples/shapes/shapes_lines_bezier.c +59 -0
  420. package/vendor/raylib/examples/shapes/shapes_lines_bezier.png +0 -0
  421. package/vendor/raylib/examples/shapes/shapes_logo_raylib.c +56 -0
  422. package/vendor/raylib/examples/shapes/shapes_logo_raylib.png +0 -0
  423. package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.c +160 -0
  424. package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.png +0 -0
  425. package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.c +94 -0
  426. package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.png +0 -0
  427. package/vendor/raylib/examples/text/resources/KAISG.ttf +0 -0
  428. package/vendor/raylib/examples/text/resources/LICENSE.md +20 -0
  429. package/vendor/raylib/examples/text/resources/anonymous_pro_bold.ttf +0 -0
  430. package/vendor/raylib/examples/text/resources/custom_alagard.png +0 -0
  431. package/vendor/raylib/examples/text/resources/custom_jupiter_crash.png +0 -0
  432. package/vendor/raylib/examples/text/resources/custom_mecha.png +0 -0
  433. package/vendor/raylib/examples/text/resources/dejavu.fnt +1115 -0
  434. package/vendor/raylib/examples/text/resources/dejavu.png +0 -0
  435. package/vendor/raylib/examples/text/resources/fonts/alagard.png +0 -0
  436. package/vendor/raylib/examples/text/resources/fonts/alpha_beta.png +0 -0
  437. package/vendor/raylib/examples/text/resources/fonts/jupiter_crash.png +0 -0
  438. package/vendor/raylib/examples/text/resources/fonts/mecha.png +0 -0
  439. package/vendor/raylib/examples/text/resources/fonts/pixantiqua.png +0 -0
  440. package/vendor/raylib/examples/text/resources/fonts/pixelplay.png +0 -0
  441. package/vendor/raylib/examples/text/resources/fonts/romulus.png +0 -0
  442. package/vendor/raylib/examples/text/resources/fonts/setback.png +0 -0
  443. package/vendor/raylib/examples/text/resources/noto_cjk.fnt +580 -0
  444. package/vendor/raylib/examples/text/resources/noto_cjk.png +0 -0
  445. package/vendor/raylib/examples/text/resources/pixantiqua.fnt +188 -0
  446. package/vendor/raylib/examples/text/resources/pixantiqua.png +0 -0
  447. package/vendor/raylib/examples/text/resources/pixantiqua.ttf +0 -0
  448. package/vendor/raylib/examples/text/resources/shaders/glsl100/alpha_discard.fs +20 -0
  449. package/vendor/raylib/examples/text/resources/shaders/glsl100/sdf.fs +25 -0
  450. package/vendor/raylib/examples/text/resources/shaders/glsl330/alpha_discard.fs +19 -0
  451. package/vendor/raylib/examples/text/resources/shaders/glsl330/sdf.fs +26 -0
  452. package/vendor/raylib/examples/text/resources/symbola.fnt +191 -0
  453. package/vendor/raylib/examples/text/resources/symbola.png +0 -0
  454. package/vendor/raylib/examples/text/text_draw_3d.c +739 -0
  455. package/vendor/raylib/examples/text/text_draw_3d.png +0 -0
  456. package/vendor/raylib/examples/text/text_font_filters.c +134 -0
  457. package/vendor/raylib/examples/text/text_font_filters.png +0 -0
  458. package/vendor/raylib/examples/text/text_font_loading.c +91 -0
  459. package/vendor/raylib/examples/text/text_font_loading.png +0 -0
  460. package/vendor/raylib/examples/text/text_font_sdf.c +141 -0
  461. package/vendor/raylib/examples/text/text_font_sdf.png +0 -0
  462. package/vendor/raylib/examples/text/text_font_spritefont.c +85 -0
  463. package/vendor/raylib/examples/text/text_font_spritefont.png +0 -0
  464. package/vendor/raylib/examples/text/text_format_text.c +62 -0
  465. package/vendor/raylib/examples/text/text_format_text.png +0 -0
  466. package/vendor/raylib/examples/text/text_input_box.c +127 -0
  467. package/vendor/raylib/examples/text/text_input_box.png +0 -0
  468. package/vendor/raylib/examples/text/text_raylib_fonts.c +105 -0
  469. package/vendor/raylib/examples/text/text_raylib_fonts.png +0 -0
  470. package/vendor/raylib/examples/text/text_rectangle_bounds.c +264 -0
  471. package/vendor/raylib/examples/text/text_rectangle_bounds.png +0 -0
  472. package/vendor/raylib/examples/text/text_unicode.c +465 -0
  473. package/vendor/raylib/examples/text/text_unicode.png +0 -0
  474. package/vendor/raylib/examples/text/text_writing_anim.c +62 -0
  475. package/vendor/raylib/examples/text/text_writing_anim.png +0 -0
  476. package/vendor/raylib/examples/textures/resources/KAISG.ttf +0 -0
  477. package/vendor/raylib/examples/textures/resources/LICENSE.md +18 -0
  478. package/vendor/raylib/examples/textures/resources/boom.wav +0 -0
  479. package/vendor/raylib/examples/textures/resources/button.png +0 -0
  480. package/vendor/raylib/examples/textures/resources/buttonfx.wav +0 -0
  481. package/vendor/raylib/examples/textures/resources/cat.png +0 -0
  482. package/vendor/raylib/examples/textures/resources/custom_jupiter_crash.png +0 -0
  483. package/vendor/raylib/examples/textures/resources/cyberpunk_street_background.png +0 -0
  484. package/vendor/raylib/examples/textures/resources/cyberpunk_street_foreground.png +0 -0
  485. package/vendor/raylib/examples/textures/resources/cyberpunk_street_midground.png +0 -0
  486. package/vendor/raylib/examples/textures/resources/explosion.png +0 -0
  487. package/vendor/raylib/examples/textures/resources/fudesumi.png +0 -0
  488. package/vendor/raylib/examples/textures/resources/fudesumi.raw +0 -0
  489. package/vendor/raylib/examples/textures/resources/ninepatch_button.png +0 -0
  490. package/vendor/raylib/examples/textures/resources/parrots.png +0 -0
  491. package/vendor/raylib/examples/textures/resources/patterns.png +0 -0
  492. package/vendor/raylib/examples/textures/resources/raylib_logo.png +0 -0
  493. package/vendor/raylib/examples/textures/resources/scarfy.png +0 -0
  494. package/vendor/raylib/examples/textures/resources/spark_flame.png +0 -0
  495. package/vendor/raylib/examples/textures/resources/wabbit_alpha.png +0 -0
  496. package/vendor/raylib/examples/textures/textures_background_scrolling.c +87 -0
  497. package/vendor/raylib/examples/textures/textures_background_scrolling.png +0 -0
  498. package/vendor/raylib/examples/textures/textures_blend_modes.c +93 -0
  499. package/vendor/raylib/examples/textures/textures_blend_modes.png +0 -0
  500. package/vendor/raylib/examples/textures/textures_bunnymark.c +120 -0
  501. package/vendor/raylib/examples/textures/textures_bunnymark.png +0 -0
  502. package/vendor/raylib/examples/textures/textures_draw_tiled.c +165 -0
  503. package/vendor/raylib/examples/textures/textures_draw_tiled.png +0 -0
  504. package/vendor/raylib/examples/textures/textures_image_drawing.c +91 -0
  505. package/vendor/raylib/examples/textures/textures_image_drawing.png +0 -0
  506. package/vendor/raylib/examples/textures/textures_image_generation.c +102 -0
  507. package/vendor/raylib/examples/textures/textures_image_generation.png +0 -0
  508. package/vendor/raylib/examples/textures/textures_image_loading.c +64 -0
  509. package/vendor/raylib/examples/textures/textures_image_loading.png +0 -0
  510. package/vendor/raylib/examples/textures/textures_image_processing.c +169 -0
  511. package/vendor/raylib/examples/textures/textures_image_processing.png +0 -0
  512. package/vendor/raylib/examples/textures/textures_image_text.c +83 -0
  513. package/vendor/raylib/examples/textures/textures_image_text.png +0 -0
  514. package/vendor/raylib/examples/textures/textures_logo_raylib.c +57 -0
  515. package/vendor/raylib/examples/textures/textures_logo_raylib.png +0 -0
  516. package/vendor/raylib/examples/textures/textures_mouse_painting.c +221 -0
  517. package/vendor/raylib/examples/textures/textures_mouse_painting.png +0 -0
  518. package/vendor/raylib/examples/textures/textures_npatch_drawing.c +109 -0
  519. package/vendor/raylib/examples/textures/textures_npatch_drawing.png +0 -0
  520. package/vendor/raylib/examples/textures/textures_particles_blending.c +135 -0
  521. package/vendor/raylib/examples/textures/textures_particles_blending.png +0 -0
  522. package/vendor/raylib/examples/textures/textures_polygon.c +100 -0
  523. package/vendor/raylib/examples/textures/textures_polygon.png +0 -0
  524. package/vendor/raylib/examples/textures/textures_raw_data.c +99 -0
  525. package/vendor/raylib/examples/textures/textures_raw_data.png +0 -0
  526. package/vendor/raylib/examples/textures/textures_rectangle.c +99 -0
  527. package/vendor/raylib/examples/textures/textures_rectangle.png +0 -0
  528. package/vendor/raylib/examples/textures/textures_sprite_button.c +97 -0
  529. package/vendor/raylib/examples/textures/textures_sprite_button.png +0 -0
  530. package/vendor/raylib/examples/textures/textures_sprite_explosion.c +120 -0
  531. package/vendor/raylib/examples/textures/textures_sprite_explosion.png +0 -0
  532. package/vendor/raylib/examples/textures/textures_srcrec_dstrec.c +82 -0
  533. package/vendor/raylib/examples/textures/textures_srcrec_dstrec.png +0 -0
  534. package/vendor/raylib/examples/textures/textures_to_image.c +68 -0
  535. package/vendor/raylib/examples/textures/textures_to_image.png +0 -0
  536. package/vendor/raylib/logo/raylib.ico +0 -0
  537. package/vendor/raylib/logo/raylib_128x128.png +0 -0
  538. package/vendor/raylib/logo/raylib_144x144.png +0 -0
  539. package/vendor/raylib/logo/raylib_16x16.png +0 -0
  540. package/vendor/raylib/logo/raylib_180x180.png +0 -0
  541. package/vendor/raylib/logo/raylib_24x24.png +0 -0
  542. package/vendor/raylib/logo/raylib_256x256.png +0 -0
  543. package/vendor/raylib/logo/raylib_32x32.png +0 -0
  544. package/vendor/raylib/logo/raylib_36x36.png +0 -0
  545. package/vendor/raylib/logo/raylib_48x48.png +0 -0
  546. package/vendor/raylib/logo/raylib_512x512.png +0 -0
  547. package/vendor/raylib/logo/raylib_64x64.png +0 -0
  548. package/vendor/raylib/logo/raylib_72x72.png +0 -0
  549. package/vendor/raylib/logo/raylib_96x96.png +0 -0
  550. package/vendor/raylib/logo/raylib_logo_animation.gif +0 -0
  551. package/vendor/raylib/parser/LICENSE +16 -0
  552. package/vendor/raylib/parser/README.md +63 -0
  553. package/vendor/raylib/parser/raylib_api.json +6668 -0
  554. package/vendor/raylib/parser/raylib_api.txt +3568 -0
  555. package/vendor/raylib/parser/raylib_api.xml +2509 -0
  556. package/vendor/raylib/parser/raylib_parser.c +1003 -0
  557. package/vendor/raylib/projects/4coder/Makefile +401 -0
  558. package/vendor/raylib/projects/4coder/Makefile.Android +300 -0
  559. package/vendor/raylib/projects/4coder/main.c +39 -0
  560. package/vendor/raylib/projects/4coder/project.4coder +54 -0
  561. package/vendor/raylib/projects/Builder/README.md +24 -0
  562. package/vendor/raylib/projects/Builder/examples/README.md +1 -0
  563. package/vendor/raylib/projects/Builder/examples/meson.build +25 -0
  564. package/vendor/raylib/projects/Builder/meson.build +25 -0
  565. package/vendor/raylib/projects/CMake/CMakeLists.txt +44 -0
  566. package/vendor/raylib/projects/CMake/core_basic_window.c +62 -0
  567. package/vendor/raylib/projects/CodeBlocks/README.md +22 -0
  568. package/vendor/raylib/projects/CodeBlocks/compiler_settings.png +0 -0
  569. package/vendor/raylib/projects/CodeBlocks/core_basic_window.c +58 -0
  570. package/vendor/raylib/projects/CodeBlocks/core_basic_window.cbp +137 -0
  571. package/vendor/raylib/projects/Geany/core_basic_window.c +52 -0
  572. package/vendor/raylib/projects/Geany/raylib.c.tags +452 -0
  573. package/vendor/raylib/projects/Geany/raylib_compile_execute.bat +21 -0
  574. package/vendor/raylib/projects/Geany/raylib_compile_sources.bat +42 -0
  575. package/vendor/raylib/projects/Geany/raylib_project.geany +41 -0
  576. package/vendor/raylib/projects/Notepad++/README.md +19 -0
  577. package/vendor/raylib/projects/Notepad++/c_raylib.xml +3104 -0
  578. package/vendor/raylib/projects/Notepad++/npes_saved_mingw.txt +0 -0
  579. package/vendor/raylib/projects/Notepad++/npes_saved_tcc.txt +0 -0
  580. package/vendor/raylib/projects/Notepad++/npes_saved_w64devkit.txt +0 -0
  581. package/vendor/raylib/projects/Notepad++/npes_saved_zig.txt +0 -0
  582. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp.xml +3060 -0
  583. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp_parser.c +150 -0
  584. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h +631 -0
  585. package/vendor/raylib/projects/README.md +18 -0
  586. package/vendor/raylib/projects/SublimeText/README.md +13 -0
  587. package/vendor/raylib/projects/SublimeText/raylib.sublime-build +13 -0
  588. package/vendor/raylib/projects/SublimeText/raylib.sublime-project +8 -0
  589. package/vendor/raylib/projects/VS2019/examples/audio_module_playing.vcxproj +387 -0
  590. package/vendor/raylib/projects/VS2019/examples/audio_multichannel_sound.vcxproj +387 -0
  591. package/vendor/raylib/projects/VS2019/examples/audio_music_stream.vcxproj +387 -0
  592. package/vendor/raylib/projects/VS2019/examples/audio_raw_stream.vcxproj +387 -0
  593. package/vendor/raylib/projects/VS2019/examples/audio_sound_loading.vcxproj +387 -0
  594. package/vendor/raylib/projects/VS2019/examples/core_2d_camera.vcxproj +387 -0
  595. package/vendor/raylib/projects/VS2019/examples/core_2d_camera_platformer.vcxproj +387 -0
  596. package/vendor/raylib/projects/VS2019/examples/core_3d_camera_first_person.vcxproj +387 -0
  597. package/vendor/raylib/projects/VS2019/examples/core_3d_camera_free.vcxproj +387 -0
  598. package/vendor/raylib/projects/VS2019/examples/core_3d_camera_mode.vcxproj +387 -0
  599. package/vendor/raylib/projects/VS2019/examples/core_3d_picking.vcxproj +387 -0
  600. package/vendor/raylib/projects/VS2019/examples/core_basic_window.vcxproj +387 -0
  601. package/vendor/raylib/projects/VS2019/examples/core_custom_logging.vcxproj +387 -0
  602. package/vendor/raylib/projects/VS2019/examples/core_drop_files.vcxproj +387 -0
  603. package/vendor/raylib/projects/VS2019/examples/core_input_gamepad.vcxproj +387 -0
  604. package/vendor/raylib/projects/VS2019/examples/core_input_gestures.vcxproj +387 -0
  605. package/vendor/raylib/projects/VS2019/examples/core_input_keys.vcxproj +387 -0
  606. package/vendor/raylib/projects/VS2019/examples/core_input_mouse.vcxproj +387 -0
  607. package/vendor/raylib/projects/VS2019/examples/core_input_mouse_wheel.vcxproj +387 -0
  608. package/vendor/raylib/projects/VS2019/examples/core_input_multitouch.vcxproj +387 -0
  609. package/vendor/raylib/projects/VS2019/examples/core_loading_thread.vcxproj +387 -0
  610. package/vendor/raylib/projects/VS2019/examples/core_quat_conversion.vcxproj +387 -0
  611. package/vendor/raylib/projects/VS2019/examples/core_random_values.vcxproj +387 -0
  612. package/vendor/raylib/projects/VS2019/examples/core_scissor_test.vcxproj +387 -0
  613. package/vendor/raylib/projects/VS2019/examples/core_split_screen.vcxproj +387 -0
  614. package/vendor/raylib/projects/VS2019/examples/core_storage_values.vcxproj +387 -0
  615. package/vendor/raylib/projects/VS2019/examples/core_vr_simulator.vcxproj +387 -0
  616. package/vendor/raylib/projects/VS2019/examples/core_window_flags.vcxproj +387 -0
  617. package/vendor/raylib/projects/VS2019/examples/core_window_letterbox.vcxproj +387 -0
  618. package/vendor/raylib/projects/VS2019/examples/core_world_screen.vcxproj +387 -0
  619. package/vendor/raylib/projects/VS2019/examples/easings_testbed.vcxproj +387 -0
  620. package/vendor/raylib/projects/VS2019/examples/embedded_files_loading.vcxproj +387 -0
  621. package/vendor/raylib/projects/VS2019/examples/models_animation.vcxproj +387 -0
  622. package/vendor/raylib/projects/VS2019/examples/models_billboard.vcxproj +387 -0
  623. package/vendor/raylib/projects/VS2019/examples/models_box_collisions.vcxproj +387 -0
  624. package/vendor/raylib/projects/VS2019/examples/models_cubicmap.vcxproj +387 -0
  625. package/vendor/raylib/projects/VS2019/examples/models_first_person_maze.vcxproj +387 -0
  626. package/vendor/raylib/projects/VS2019/examples/models_geometric_shapes.vcxproj +387 -0
  627. package/vendor/raylib/projects/VS2019/examples/models_heightmap.vcxproj +387 -0
  628. package/vendor/raylib/projects/VS2019/examples/models_loading.vcxproj +387 -0
  629. package/vendor/raylib/projects/VS2019/examples/models_loading_gltf.vcxproj +387 -0
  630. package/vendor/raylib/projects/VS2019/examples/models_loading_vox.vcxproj +387 -0
  631. package/vendor/raylib/projects/VS2019/examples/models_mesh_generation.vcxproj +387 -0
  632. package/vendor/raylib/projects/VS2019/examples/models_mesh_picking.vcxproj +387 -0
  633. package/vendor/raylib/projects/VS2019/examples/models_orthographic_projection.vcxproj +387 -0
  634. package/vendor/raylib/projects/VS2019/examples/models_rlgl_solar_system.vcxproj +387 -0
  635. package/vendor/raylib/projects/VS2019/examples/models_skybox.vcxproj +387 -0
  636. package/vendor/raylib/projects/VS2019/examples/models_waving_cubes.vcxproj +387 -0
  637. package/vendor/raylib/projects/VS2019/examples/models_yaw_pitch_roll.vcxproj +387 -0
  638. package/vendor/raylib/projects/VS2019/examples/physics_demo.vcxproj +387 -0
  639. package/vendor/raylib/projects/VS2019/examples/physics_friction.vcxproj +387 -0
  640. package/vendor/raylib/projects/VS2019/examples/physics_movement.vcxproj +387 -0
  641. package/vendor/raylib/projects/VS2019/examples/physics_restitution.vcxproj +387 -0
  642. package/vendor/raylib/projects/VS2019/examples/physics_shatter.vcxproj +387 -0
  643. package/vendor/raylib/projects/VS2019/examples/raudio_standalone.vcxproj +387 -0
  644. package/vendor/raylib/projects/VS2019/examples/rlgl_standalone.vcxproj +391 -0
  645. package/vendor/raylib/projects/VS2019/examples/shaders_basic_lighting.vcxproj +387 -0
  646. package/vendor/raylib/projects/VS2019/examples/shaders_custom_uniform.vcxproj +387 -0
  647. package/vendor/raylib/projects/VS2019/examples/shaders_eratosthenes.vcxproj +387 -0
  648. package/vendor/raylib/projects/VS2019/examples/shaders_fog.vcxproj +387 -0
  649. package/vendor/raylib/projects/VS2019/examples/shaders_hot_reloading.vcxproj +387 -0
  650. package/vendor/raylib/projects/VS2019/examples/shaders_julia_set.vcxproj +387 -0
  651. package/vendor/raylib/projects/VS2019/examples/shaders_mesh_instancing.vcxproj +387 -0
  652. package/vendor/raylib/projects/VS2019/examples/shaders_model_shader.vcxproj +387 -0
  653. package/vendor/raylib/projects/VS2019/examples/shaders_multi_sample2d.vcxproj +387 -0
  654. package/vendor/raylib/projects/VS2019/examples/shaders_palette_switch.vcxproj +387 -0
  655. package/vendor/raylib/projects/VS2019/examples/shaders_postprocessing.vcxproj +387 -0
  656. package/vendor/raylib/projects/VS2019/examples/shaders_raymarching.vcxproj +387 -0
  657. package/vendor/raylib/projects/VS2019/examples/shaders_shapes_textures.vcxproj +387 -0
  658. package/vendor/raylib/projects/VS2019/examples/shaders_simple_mask.vcxproj +387 -0
  659. package/vendor/raylib/projects/VS2019/examples/shaders_spotlight.vcxproj +387 -0
  660. package/vendor/raylib/projects/VS2019/examples/shaders_texture_drawing.vcxproj +387 -0
  661. package/vendor/raylib/projects/VS2019/examples/shaders_texture_waves.vcxproj +387 -0
  662. package/vendor/raylib/projects/VS2019/examples/shapes_basic_shapes.vcxproj +387 -0
  663. package/vendor/raylib/projects/VS2019/examples/shapes_bouncing_ball.vcxproj +387 -0
  664. package/vendor/raylib/projects/VS2019/examples/shapes_collision_area.vcxproj +387 -0
  665. package/vendor/raylib/projects/VS2019/examples/shapes_colors_palette.vcxproj +387 -0
  666. package/vendor/raylib/projects/VS2019/examples/shapes_draw_circle_sector.vcxproj +387 -0
  667. package/vendor/raylib/projects/VS2019/examples/shapes_draw_rectangle_rounded.vcxproj +387 -0
  668. package/vendor/raylib/projects/VS2019/examples/shapes_draw_ring.vcxproj +387 -0
  669. package/vendor/raylib/projects/VS2019/examples/shapes_easings_ball_anim.vcxproj +387 -0
  670. package/vendor/raylib/projects/VS2019/examples/shapes_easings_box_anim.vcxproj +387 -0
  671. package/vendor/raylib/projects/VS2019/examples/shapes_easings_rectangle_array.vcxproj +387 -0
  672. package/vendor/raylib/projects/VS2019/examples/shapes_following_eyes.vcxproj +387 -0
  673. package/vendor/raylib/projects/VS2019/examples/shapes_lines_bezier.vcxproj +387 -0
  674. package/vendor/raylib/projects/VS2019/examples/shapes_logo_raylib.vcxproj +387 -0
  675. package/vendor/raylib/projects/VS2019/examples/shapes_logo_raylib_anim.vcxproj +387 -0
  676. package/vendor/raylib/projects/VS2019/examples/shapes_rectangle_scaling.vcxproj +387 -0
  677. package/vendor/raylib/projects/VS2019/examples/text_font_filters.vcxproj +387 -0
  678. package/vendor/raylib/projects/VS2019/examples/text_font_loading.vcxproj +387 -0
  679. package/vendor/raylib/projects/VS2019/examples/text_font_sdf.vcxproj +387 -0
  680. package/vendor/raylib/projects/VS2019/examples/text_font_spritefont.vcxproj +387 -0
  681. package/vendor/raylib/projects/VS2019/examples/text_format_text.vcxproj +387 -0
  682. package/vendor/raylib/projects/VS2019/examples/text_input_box.vcxproj +387 -0
  683. package/vendor/raylib/projects/VS2019/examples/text_raylib_fonts.vcxproj +387 -0
  684. package/vendor/raylib/projects/VS2019/examples/text_rectangle_bounds.vcxproj +387 -0
  685. package/vendor/raylib/projects/VS2019/examples/text_unicode.vcxproj +387 -0
  686. package/vendor/raylib/projects/VS2019/examples/text_writing_anim.vcxproj +387 -0
  687. package/vendor/raylib/projects/VS2019/examples/textures_background_scrolling.vcxproj +387 -0
  688. package/vendor/raylib/projects/VS2019/examples/textures_blend_modes.vcxproj +387 -0
  689. package/vendor/raylib/projects/VS2019/examples/textures_bunnymark.vcxproj +387 -0
  690. package/vendor/raylib/projects/VS2019/examples/textures_draw_tiled.vcxproj +387 -0
  691. package/vendor/raylib/projects/VS2019/examples/textures_image_drawing.vcxproj +387 -0
  692. package/vendor/raylib/projects/VS2019/examples/textures_image_generation.vcxproj +387 -0
  693. package/vendor/raylib/projects/VS2019/examples/textures_image_loading.vcxproj +387 -0
  694. package/vendor/raylib/projects/VS2019/examples/textures_image_processing.vcxproj +387 -0
  695. package/vendor/raylib/projects/VS2019/examples/textures_image_text.vcxproj +387 -0
  696. package/vendor/raylib/projects/VS2019/examples/textures_logo_raylib.vcxproj +387 -0
  697. package/vendor/raylib/projects/VS2019/examples/textures_mouse_painting.vcxproj +387 -0
  698. package/vendor/raylib/projects/VS2019/examples/textures_npatch_drawing.vcxproj +387 -0
  699. package/vendor/raylib/projects/VS2019/examples/textures_particles_blending.vcxproj +387 -0
  700. package/vendor/raylib/projects/VS2019/examples/textures_raw_data.vcxproj +387 -0
  701. package/vendor/raylib/projects/VS2019/examples/textures_rectangle.vcxproj +387 -0
  702. package/vendor/raylib/projects/VS2019/examples/textures_sprite_button.vcxproj +387 -0
  703. package/vendor/raylib/projects/VS2019/examples/textures_sprite_explosion.vcxproj +387 -0
  704. package/vendor/raylib/projects/VS2019/examples/textures_srcrec_dstrec.vcxproj +387 -0
  705. package/vendor/raylib/projects/VS2019/examples/textures_to_image.vcxproj +387 -0
  706. package/vendor/raylib/projects/VS2019/raylib/raylib.rc +0 -0
  707. package/vendor/raylib/projects/VS2019/raylib/raylib.vcxproj +341 -0
  708. package/vendor/raylib/projects/VS2019/raylib/resource.h +14 -0
  709. package/vendor/raylib/projects/VS2019/raylib.sln +2274 -0
  710. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.c +437 -0
  711. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.h +344 -0
  712. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/main.c +64 -0
  713. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/raylib_android.NativeActivity.vcxproj +226 -0
  714. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/raylib_android.NativeActivity.vcxproj.filters +10 -0
  715. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/raylib_android.NativeActivity.vcxproj.user +4 -0
  716. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/AndroidManifest.xml +22 -0
  717. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/build.xml +90 -0
  718. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/project.properties +3 -0
  719. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/raylib_android.Packaging.androidproj +134 -0
  720. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/res/values/strings.xml +4 -0
  721. package/vendor/raylib/projects/VS2019-Android/raylib_android.sln +75 -0
  722. package/vendor/raylib/projects/VSCode/.vscode/c_cpp_properties.json +63 -0
  723. package/vendor/raylib/projects/VSCode/.vscode/launch.json +60 -0
  724. package/vendor/raylib/projects/VSCode/.vscode/settings.json +11 -0
  725. package/vendor/raylib/projects/VSCode/.vscode/tasks.json +71 -0
  726. package/vendor/raylib/projects/VSCode/Makefile +408 -0
  727. package/vendor/raylib/projects/VSCode/Makefile.Android +300 -0
  728. package/vendor/raylib/projects/VSCode/main.c +83 -0
  729. package/vendor/raylib/projects/VSCode/main.code-workspace +16 -0
  730. package/vendor/raylib/projects/scripts/README.md +68 -0
  731. package/vendor/raylib/projects/scripts/build-linux.sh +169 -0
  732. package/vendor/raylib/projects/scripts/build-osx.sh +171 -0
  733. package/vendor/raylib/projects/scripts/build-rpi.sh +169 -0
  734. package/vendor/raylib/projects/scripts/build-windows.bat +219 -0
  735. package/vendor/raylib/projects/scripts/core_basic_window.c +61 -0
  736. package/vendor/raylib/raylib.pc.in +13 -0
  737. package/vendor/raylib/src/CMakeLists.txt +121 -0
  738. package/vendor/raylib/src/Makefile +696 -0
  739. package/vendor/raylib/src/build.zig +60 -0
  740. package/vendor/raylib/src/config.h +230 -0
  741. package/vendor/raylib/src/external/cgltf.h +6501 -0
  742. package/vendor/raylib/src/external/dirent.h +183 -0
  743. package/vendor/raylib/src/external/dr_flac.h +12269 -0
  744. package/vendor/raylib/src/external/dr_mp3.h +4787 -0
  745. package/vendor/raylib/src/external/dr_wav.h +8019 -0
  746. package/vendor/raylib/src/external/glad.h +8640 -0
  747. package/vendor/raylib/src/external/glfw/.mailmap +10 -0
  748. package/vendor/raylib/src/external/glfw/CMake/GenerateMappings.cmake +33 -0
  749. package/vendor/raylib/src/external/glfw/CMake/Info.plist.in +38 -0
  750. package/vendor/raylib/src/external/glfw/CMake/MacOSXBundleInfo.plist.in +38 -0
  751. package/vendor/raylib/src/external/glfw/CMake/cmake_uninstall.cmake.in +29 -0
  752. package/vendor/raylib/src/external/glfw/CMake/glfw3.pc.in +13 -0
  753. package/vendor/raylib/src/external/glfw/CMake/glfw3Config.cmake.in +3 -0
  754. package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32-clang.cmake +13 -0
  755. package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32.cmake +13 -0
  756. package/vendor/raylib/src/external/glfw/CMake/modules/FindEpollShim.cmake +17 -0
  757. package/vendor/raylib/src/external/glfw/CMake/modules/FindOSMesa.cmake +18 -0
  758. package/vendor/raylib/src/external/glfw/CMake/modules/FindWaylandProtocols.cmake +26 -0
  759. package/vendor/raylib/src/external/glfw/CMake/modules/FindXKBCommon.cmake +34 -0
  760. package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32-clang.cmake +13 -0
  761. package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32.cmake +13 -0
  762. package/vendor/raylib/src/external/glfw/CMakeLists.txt +323 -0
  763. package/vendor/raylib/src/external/glfw/LICENSE.md +23 -0
  764. package/vendor/raylib/src/external/glfw/README.md +477 -0
  765. package/vendor/raylib/src/external/glfw/deps/getopt.c +230 -0
  766. package/vendor/raylib/src/external/glfw/deps/getopt.h +57 -0
  767. package/vendor/raylib/src/external/glfw/deps/glad/gl.h +3840 -0
  768. package/vendor/raylib/src/external/glfw/deps/glad/khrplatform.h +282 -0
  769. package/vendor/raylib/src/external/glfw/deps/glad/vk_platform.h +92 -0
  770. package/vendor/raylib/src/external/glfw/deps/glad/vulkan.h +3480 -0
  771. package/vendor/raylib/src/external/glfw/deps/glad_gl.c +1791 -0
  772. package/vendor/raylib/src/external/glfw/deps/glad_vulkan.c +593 -0
  773. package/vendor/raylib/src/external/glfw/deps/mingw/_mingw_dxhelper.h +117 -0
  774. package/vendor/raylib/src/external/glfw/deps/mingw/dinput.h +2467 -0
  775. package/vendor/raylib/src/external/glfw/deps/mingw/xinput.h +239 -0
  776. package/vendor/raylib/src/external/glfw/deps/vs2008/stdint.h +247 -0
  777. package/vendor/raylib/src/external/glfw/include/GLFW/glfw3.h +6075 -0
  778. package/vendor/raylib/src/external/glfw/include/GLFW/glfw3native.h +530 -0
  779. package/vendor/raylib/src/external/glfw/src/CMakeLists.txt +246 -0
  780. package/vendor/raylib/src/external/glfw/src/cocoa_init.m +620 -0
  781. package/vendor/raylib/src/external/glfw/src/cocoa_joystick.h +46 -0
  782. package/vendor/raylib/src/external/glfw/src/cocoa_joystick.m +483 -0
  783. package/vendor/raylib/src/external/glfw/src/cocoa_monitor.m +631 -0
  784. package/vendor/raylib/src/external/glfw/src/cocoa_platform.h +206 -0
  785. package/vendor/raylib/src/external/glfw/src/cocoa_time.c +62 -0
  786. package/vendor/raylib/src/external/glfw/src/cocoa_window.m +1923 -0
  787. package/vendor/raylib/src/external/glfw/src/context.c +756 -0
  788. package/vendor/raylib/src/external/glfw/src/egl_context.c +846 -0
  789. package/vendor/raylib/src/external/glfw/src/egl_context.h +229 -0
  790. package/vendor/raylib/src/external/glfw/src/glfw.rc.in +30 -0
  791. package/vendor/raylib/src/external/glfw/src/glfw_config.h.in +58 -0
  792. package/vendor/raylib/src/external/glfw/src/glx_context.c +699 -0
  793. package/vendor/raylib/src/external/glfw/src/glx_context.h +181 -0
  794. package/vendor/raylib/src/external/glfw/src/init.c +357 -0
  795. package/vendor/raylib/src/external/glfw/src/input.c +1406 -0
  796. package/vendor/raylib/src/external/glfw/src/internal.h +799 -0
  797. package/vendor/raylib/src/external/glfw/src/linux_joystick.c +428 -0
  798. package/vendor/raylib/src/external/glfw/src/linux_joystick.h +59 -0
  799. package/vendor/raylib/src/external/glfw/src/mappings.h +1550 -0
  800. package/vendor/raylib/src/external/glfw/src/mappings.h.in +73 -0
  801. package/vendor/raylib/src/external/glfw/src/monitor.c +542 -0
  802. package/vendor/raylib/src/external/glfw/src/nsgl_context.h +66 -0
  803. package/vendor/raylib/src/external/glfw/src/nsgl_context.m +369 -0
  804. package/vendor/raylib/src/external/glfw/src/null_init.c +57 -0
  805. package/vendor/raylib/src/external/glfw/src/null_joystick.c +53 -0
  806. package/vendor/raylib/src/external/glfw/src/null_joystick.h +31 -0
  807. package/vendor/raylib/src/external/glfw/src/null_monitor.c +159 -0
  808. package/vendor/raylib/src/external/glfw/src/null_platform.h +89 -0
  809. package/vendor/raylib/src/external/glfw/src/null_window.c +670 -0
  810. package/vendor/raylib/src/external/glfw/src/osmesa_context.c +372 -0
  811. package/vendor/raylib/src/external/glfw/src/osmesa_context.h +90 -0
  812. package/vendor/raylib/src/external/glfw/src/posix_thread.c +105 -0
  813. package/vendor/raylib/src/external/glfw/src/posix_thread.h +51 -0
  814. package/vendor/raylib/src/external/glfw/src/posix_time.c +90 -0
  815. package/vendor/raylib/src/external/glfw/src/posix_time.h +44 -0
  816. package/vendor/raylib/src/external/glfw/src/vulkan.c +332 -0
  817. package/vendor/raylib/src/external/glfw/src/wgl_context.c +798 -0
  818. package/vendor/raylib/src/external/glfw/src/wgl_context.h +160 -0
  819. package/vendor/raylib/src/external/glfw/src/win32_init.c +636 -0
  820. package/vendor/raylib/src/external/glfw/src/win32_joystick.c +753 -0
  821. package/vendor/raylib/src/external/glfw/src/win32_joystick.h +53 -0
  822. package/vendor/raylib/src/external/glfw/src/win32_monitor.c +537 -0
  823. package/vendor/raylib/src/external/glfw/src/win32_platform.h +462 -0
  824. package/vendor/raylib/src/external/glfw/src/win32_thread.c +99 -0
  825. package/vendor/raylib/src/external/glfw/src/win32_time.c +76 -0
  826. package/vendor/raylib/src/external/glfw/src/win32_window.c +2405 -0
  827. package/vendor/raylib/src/external/glfw/src/window.c +1114 -0
  828. package/vendor/raylib/src/external/glfw/src/wl_init.c +1310 -0
  829. package/vendor/raylib/src/external/glfw/src/wl_monitor.c +231 -0
  830. package/vendor/raylib/src/external/glfw/src/wl_platform.h +352 -0
  831. package/vendor/raylib/src/external/glfw/src/wl_window.c +1814 -0
  832. package/vendor/raylib/src/external/glfw/src/x11_init.c +1500 -0
  833. package/vendor/raylib/src/external/glfw/src/x11_monitor.c +614 -0
  834. package/vendor/raylib/src/external/glfw/src/x11_platform.h +798 -0
  835. package/vendor/raylib/src/external/glfw/src/x11_window.c +3310 -0
  836. package/vendor/raylib/src/external/glfw/src/xkb_unicode.c +942 -0
  837. package/vendor/raylib/src/external/glfw/src/xkb_unicode.h +28 -0
  838. package/vendor/raylib/src/external/jar_mod.h +1596 -0
  839. package/vendor/raylib/src/external/jar_xm.h +2470 -0
  840. package/vendor/raylib/src/external/miniaudio.h +70273 -0
  841. package/vendor/raylib/src/external/msf_gif.h +717 -0
  842. package/vendor/raylib/src/external/par_shapes.h +2155 -0
  843. package/vendor/raylib/src/external/sdefl.h +696 -0
  844. package/vendor/raylib/src/external/sinfl.h +584 -0
  845. package/vendor/raylib/src/external/stb_image.h +7897 -0
  846. package/vendor/raylib/src/external/stb_image_resize.h +2634 -0
  847. package/vendor/raylib/src/external/stb_image_write.h +1724 -0
  848. package/vendor/raylib/src/external/stb_rect_pack.h +623 -0
  849. package/vendor/raylib/src/external/stb_truetype.h +5077 -0
  850. package/vendor/raylib/src/external/stb_vorbis.h +5475 -0
  851. package/vendor/raylib/src/external/tinyobj_loader_c.h +1589 -0
  852. package/vendor/raylib/src/external/vox_loader.h +710 -0
  853. package/vendor/raylib/src/extras/easings.h +263 -0
  854. package/vendor/raylib/src/extras/physac.h +1977 -0
  855. package/vendor/raylib/src/extras/raygui.h +4342 -0
  856. package/vendor/raylib/src/extras/rmem.h +751 -0
  857. package/vendor/raylib/src/raudio.c +2380 -0
  858. package/vendor/raylib/src/raudio.h +198 -0
  859. package/vendor/raylib/src/raylib.dll.rc +27 -0
  860. package/vendor/raylib/src/raylib.dll.rc.data +0 -0
  861. package/vendor/raylib/src/raylib.h +1536 -0
  862. package/vendor/raylib/src/raylib.ico +0 -0
  863. package/vendor/raylib/src/raylib.rc +27 -0
  864. package/vendor/raylib/src/raylib.rc.data +0 -0
  865. package/vendor/raylib/src/raymath.h +1853 -0
  866. package/vendor/raylib/src/rcamera.h +567 -0
  867. package/vendor/raylib/src/rcore.c +6772 -0
  868. package/vendor/raylib/src/rgestures.h +566 -0
  869. package/vendor/raylib/src/rglfw.c +126 -0
  870. package/vendor/raylib/src/rlgl.h +4677 -0
  871. package/vendor/raylib/src/rmodels.c +5041 -0
  872. package/vendor/raylib/src/rshapes.c +1759 -0
  873. package/vendor/raylib/src/rtext.c +1790 -0
  874. package/vendor/raylib/src/rtextures.c +4761 -0
  875. package/vendor/raylib/src/shell.html +328 -0
  876. package/vendor/raylib/src/utils.c +433 -0
  877. package/vendor/raylib/src/utils.h +81 -0
  878. package/vendor/sqlite3/shell.c +23487 -0
  879. package/vendor/sqlite3/sqlite3.c +239246 -0
  880. package/vendor/sqlite3/sqlite3.h +12802 -0
  881. package/vendor/sqlite3/sqlite3ext.h +689 -0
  882. package/CMakeLists.txt +0 -60
@@ -0,0 +1,1923 @@
1
+ //========================================================================
2
+ // GLFW 3.4 macOS - www.glfw.org
3
+ //------------------------------------------------------------------------
4
+ // Copyright (c) 2009-2019 Camilla Löwy <elmindreda@glfw.org>
5
+ //
6
+ // This software is provided 'as-is', without any express or implied
7
+ // warranty. In no event will the authors be held liable for any damages
8
+ // arising from the use of this software.
9
+ //
10
+ // Permission is granted to anyone to use this software for any purpose,
11
+ // including commercial applications, and to alter it and redistribute it
12
+ // freely, subject to the following restrictions:
13
+ //
14
+ // 1. The origin of this software must not be misrepresented; you must not
15
+ // claim that you wrote the original software. If you use this software
16
+ // in a product, an acknowledgment in the product documentation would
17
+ // be appreciated but is not required.
18
+ //
19
+ // 2. Altered source versions must be plainly marked as such, and must not
20
+ // be misrepresented as being the original software.
21
+ //
22
+ // 3. This notice may not be removed or altered from any source
23
+ // distribution.
24
+ //
25
+ //========================================================================
26
+ // It is fine to use C99 in this file because it will not be built with VS
27
+ //========================================================================
28
+
29
+ #include "internal.h"
30
+
31
+ #include <float.h>
32
+ #include <string.h>
33
+
34
+ // Returns the style mask corresponding to the window settings
35
+ //
36
+ static NSUInteger getStyleMask(_GLFWwindow* window)
37
+ {
38
+ NSUInteger styleMask = NSWindowStyleMaskMiniaturizable;
39
+
40
+ if (window->monitor || !window->decorated)
41
+ styleMask |= NSWindowStyleMaskBorderless;
42
+ else
43
+ {
44
+ styleMask |= NSWindowStyleMaskTitled |
45
+ NSWindowStyleMaskClosable;
46
+
47
+ if (window->resizable)
48
+ styleMask |= NSWindowStyleMaskResizable;
49
+ }
50
+
51
+ return styleMask;
52
+ }
53
+
54
+ // Returns whether the cursor is in the content area of the specified window
55
+ //
56
+ static GLFWbool cursorInContentArea(_GLFWwindow* window)
57
+ {
58
+ const NSPoint pos = [window->ns.object mouseLocationOutsideOfEventStream];
59
+ return [window->ns.view mouse:pos inRect:[window->ns.view frame]];
60
+ }
61
+
62
+ // Hides the cursor if not already hidden
63
+ //
64
+ static void hideCursor(_GLFWwindow* window)
65
+ {
66
+ if (!_glfw.ns.cursorHidden)
67
+ {
68
+ [NSCursor hide];
69
+ _glfw.ns.cursorHidden = GLFW_TRUE;
70
+ }
71
+ }
72
+
73
+ // Shows the cursor if not already shown
74
+ //
75
+ static void showCursor(_GLFWwindow* window)
76
+ {
77
+ if (_glfw.ns.cursorHidden)
78
+ {
79
+ [NSCursor unhide];
80
+ _glfw.ns.cursorHidden = GLFW_FALSE;
81
+ }
82
+ }
83
+
84
+ // Updates the cursor image according to its cursor mode
85
+ //
86
+ static void updateCursorImage(_GLFWwindow* window)
87
+ {
88
+ if (window->cursorMode == GLFW_CURSOR_NORMAL)
89
+ {
90
+ showCursor(window);
91
+
92
+ if (window->cursor)
93
+ [(NSCursor*) window->cursor->ns.object set];
94
+ else
95
+ [[NSCursor arrowCursor] set];
96
+ }
97
+ else
98
+ hideCursor(window);
99
+ }
100
+
101
+ // Apply chosen cursor mode to a focused window
102
+ //
103
+ static void updateCursorMode(_GLFWwindow* window)
104
+ {
105
+ if (window->cursorMode == GLFW_CURSOR_DISABLED)
106
+ {
107
+ _glfw.ns.disabledCursorWindow = window;
108
+ _glfwPlatformGetCursorPos(window,
109
+ &_glfw.ns.restoreCursorPosX,
110
+ &_glfw.ns.restoreCursorPosY);
111
+ _glfwCenterCursorInContentArea(window);
112
+ CGAssociateMouseAndMouseCursorPosition(false);
113
+ }
114
+ else if (_glfw.ns.disabledCursorWindow == window)
115
+ {
116
+ _glfw.ns.disabledCursorWindow = NULL;
117
+ CGAssociateMouseAndMouseCursorPosition(true);
118
+ _glfwPlatformSetCursorPos(window,
119
+ _glfw.ns.restoreCursorPosX,
120
+ _glfw.ns.restoreCursorPosY);
121
+ }
122
+
123
+ if (cursorInContentArea(window))
124
+ updateCursorImage(window);
125
+ }
126
+
127
+ // Make the specified window and its video mode active on its monitor
128
+ //
129
+ static void acquireMonitor(_GLFWwindow* window)
130
+ {
131
+ _glfwSetVideoModeNS(window->monitor, &window->videoMode);
132
+ const CGRect bounds = CGDisplayBounds(window->monitor->ns.displayID);
133
+ const NSRect frame = NSMakeRect(bounds.origin.x,
134
+ _glfwTransformYNS(bounds.origin.y + bounds.size.height - 1),
135
+ bounds.size.width,
136
+ bounds.size.height);
137
+
138
+ [window->ns.object setFrame:frame display:YES];
139
+
140
+ _glfwInputMonitorWindow(window->monitor, window);
141
+ }
142
+
143
+ // Remove the window and restore the original video mode
144
+ //
145
+ static void releaseMonitor(_GLFWwindow* window)
146
+ {
147
+ if (window->monitor->window != window)
148
+ return;
149
+
150
+ _glfwInputMonitorWindow(window->monitor, NULL);
151
+ _glfwRestoreVideoModeNS(window->monitor);
152
+ }
153
+
154
+ // Translates macOS key modifiers into GLFW ones
155
+ //
156
+ static int translateFlags(NSUInteger flags)
157
+ {
158
+ int mods = 0;
159
+
160
+ if (flags & NSEventModifierFlagShift)
161
+ mods |= GLFW_MOD_SHIFT;
162
+ if (flags & NSEventModifierFlagControl)
163
+ mods |= GLFW_MOD_CONTROL;
164
+ if (flags & NSEventModifierFlagOption)
165
+ mods |= GLFW_MOD_ALT;
166
+ if (flags & NSEventModifierFlagCommand)
167
+ mods |= GLFW_MOD_SUPER;
168
+ if (flags & NSEventModifierFlagCapsLock)
169
+ mods |= GLFW_MOD_CAPS_LOCK;
170
+
171
+ return mods;
172
+ }
173
+
174
+ // Translates a macOS keycode to a GLFW keycode
175
+ //
176
+ static int translateKey(unsigned int key)
177
+ {
178
+ if (key >= sizeof(_glfw.ns.keycodes) / sizeof(_glfw.ns.keycodes[0]))
179
+ return GLFW_KEY_UNKNOWN;
180
+
181
+ return _glfw.ns.keycodes[key];
182
+ }
183
+
184
+ // Translate a GLFW keycode to a Cocoa modifier flag
185
+ //
186
+ static NSUInteger translateKeyToModifierFlag(int key)
187
+ {
188
+ switch (key)
189
+ {
190
+ case GLFW_KEY_LEFT_SHIFT:
191
+ case GLFW_KEY_RIGHT_SHIFT:
192
+ return NSEventModifierFlagShift;
193
+ case GLFW_KEY_LEFT_CONTROL:
194
+ case GLFW_KEY_RIGHT_CONTROL:
195
+ return NSEventModifierFlagControl;
196
+ case GLFW_KEY_LEFT_ALT:
197
+ case GLFW_KEY_RIGHT_ALT:
198
+ return NSEventModifierFlagOption;
199
+ case GLFW_KEY_LEFT_SUPER:
200
+ case GLFW_KEY_RIGHT_SUPER:
201
+ return NSEventModifierFlagCommand;
202
+ case GLFW_KEY_CAPS_LOCK:
203
+ return NSEventModifierFlagCapsLock;
204
+ }
205
+
206
+ return 0;
207
+ }
208
+
209
+ // Defines a constant for empty ranges in NSTextInputClient
210
+ //
211
+ static const NSRange kEmptyRange = { NSNotFound, 0 };
212
+
213
+
214
+ //------------------------------------------------------------------------
215
+ // Delegate for window related notifications
216
+ //------------------------------------------------------------------------
217
+
218
+ @interface GLFWWindowDelegate : NSObject
219
+ {
220
+ _GLFWwindow* window;
221
+ }
222
+
223
+ - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow;
224
+
225
+ @end
226
+
227
+ @implementation GLFWWindowDelegate
228
+
229
+ - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow
230
+ {
231
+ self = [super init];
232
+ if (self != nil)
233
+ window = initWindow;
234
+
235
+ return self;
236
+ }
237
+
238
+ - (BOOL)windowShouldClose:(id)sender
239
+ {
240
+ _glfwInputWindowCloseRequest(window);
241
+ return NO;
242
+ }
243
+
244
+ - (void)windowDidResize:(NSNotification *)notification
245
+ {
246
+ if (window->context.client != GLFW_NO_API)
247
+ [window->context.nsgl.object update];
248
+
249
+ if (_glfw.ns.disabledCursorWindow == window)
250
+ _glfwCenterCursorInContentArea(window);
251
+
252
+ const int maximized = [window->ns.object isZoomed];
253
+ if (window->ns.maximized != maximized)
254
+ {
255
+ window->ns.maximized = maximized;
256
+ _glfwInputWindowMaximize(window, maximized);
257
+ }
258
+
259
+ const NSRect contentRect = [window->ns.view frame];
260
+ const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect];
261
+
262
+ if (fbRect.size.width != window->ns.fbWidth ||
263
+ fbRect.size.height != window->ns.fbHeight)
264
+ {
265
+ window->ns.fbWidth = fbRect.size.width;
266
+ window->ns.fbHeight = fbRect.size.height;
267
+ _glfwInputFramebufferSize(window, fbRect.size.width, fbRect.size.height);
268
+ }
269
+
270
+ if (contentRect.size.width != window->ns.width ||
271
+ contentRect.size.height != window->ns.height)
272
+ {
273
+ window->ns.width = contentRect.size.width;
274
+ window->ns.height = contentRect.size.height;
275
+ _glfwInputWindowSize(window, contentRect.size.width, contentRect.size.height);
276
+ }
277
+ }
278
+
279
+ - (void)windowDidMove:(NSNotification *)notification
280
+ {
281
+ if (window->context.client != GLFW_NO_API)
282
+ [window->context.nsgl.object update];
283
+
284
+ if (_glfw.ns.disabledCursorWindow == window)
285
+ _glfwCenterCursorInContentArea(window);
286
+
287
+ int x, y;
288
+ _glfwPlatformGetWindowPos(window, &x, &y);
289
+ _glfwInputWindowPos(window, x, y);
290
+ }
291
+
292
+ - (void)windowDidMiniaturize:(NSNotification *)notification
293
+ {
294
+ if (window->monitor)
295
+ releaseMonitor(window);
296
+
297
+ _glfwInputWindowIconify(window, GLFW_TRUE);
298
+ }
299
+
300
+ - (void)windowDidDeminiaturize:(NSNotification *)notification
301
+ {
302
+ if (window->monitor)
303
+ acquireMonitor(window);
304
+
305
+ _glfwInputWindowIconify(window, GLFW_FALSE);
306
+ }
307
+
308
+ - (void)windowDidBecomeKey:(NSNotification *)notification
309
+ {
310
+ if (_glfw.ns.disabledCursorWindow == window)
311
+ _glfwCenterCursorInContentArea(window);
312
+
313
+ _glfwInputWindowFocus(window, GLFW_TRUE);
314
+ updateCursorMode(window);
315
+ }
316
+
317
+ - (void)windowDidResignKey:(NSNotification *)notification
318
+ {
319
+ if (window->monitor && window->autoIconify)
320
+ _glfwPlatformIconifyWindow(window);
321
+
322
+ _glfwInputWindowFocus(window, GLFW_FALSE);
323
+ }
324
+
325
+ - (void)windowDidChangeOcclusionState:(NSNotification* )notification
326
+ {
327
+ if ([window->ns.object occlusionState] & NSWindowOcclusionStateVisible)
328
+ window->ns.occluded = GLFW_FALSE;
329
+ else
330
+ window->ns.occluded = GLFW_TRUE;
331
+ }
332
+
333
+ @end
334
+
335
+
336
+ //------------------------------------------------------------------------
337
+ // Content view class for the GLFW window
338
+ //------------------------------------------------------------------------
339
+
340
+ @interface GLFWContentView : NSView <NSTextInputClient>
341
+ {
342
+ _GLFWwindow* window;
343
+ NSTrackingArea* trackingArea;
344
+ NSMutableAttributedString* markedText;
345
+ }
346
+
347
+ - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow;
348
+
349
+ @end
350
+
351
+ @implementation GLFWContentView
352
+
353
+ - (instancetype)initWithGlfwWindow:(_GLFWwindow *)initWindow
354
+ {
355
+ self = [super init];
356
+ if (self != nil)
357
+ {
358
+ window = initWindow;
359
+ trackingArea = nil;
360
+ markedText = [[NSMutableAttributedString alloc] init];
361
+
362
+ [self updateTrackingAreas];
363
+ // NOTE: kUTTypeURL corresponds to NSPasteboardTypeURL but is available
364
+ // on 10.7 without having been deprecated yet
365
+ [self registerForDraggedTypes:@[(__bridge NSString*) kUTTypeURL]];
366
+ }
367
+
368
+ return self;
369
+ }
370
+
371
+ - (void)dealloc
372
+ {
373
+ [trackingArea release];
374
+ [markedText release];
375
+ [super dealloc];
376
+ }
377
+
378
+ - (BOOL)isOpaque
379
+ {
380
+ return [window->ns.object isOpaque];
381
+ }
382
+
383
+ - (BOOL)canBecomeKeyView
384
+ {
385
+ return YES;
386
+ }
387
+
388
+ - (BOOL)acceptsFirstResponder
389
+ {
390
+ return YES;
391
+ }
392
+
393
+ - (BOOL)wantsUpdateLayer
394
+ {
395
+ return YES;
396
+ }
397
+
398
+ - (void)updateLayer
399
+ {
400
+ if (window->context.client != GLFW_NO_API)
401
+ [window->context.nsgl.object update];
402
+
403
+ _glfwInputWindowDamage(window);
404
+ }
405
+
406
+ - (void)cursorUpdate:(NSEvent *)event
407
+ {
408
+ updateCursorImage(window);
409
+ }
410
+
411
+ - (BOOL)acceptsFirstMouse:(NSEvent *)event
412
+ {
413
+ return YES;
414
+ }
415
+
416
+ - (void)mouseDown:(NSEvent *)event
417
+ {
418
+ _glfwInputMouseClick(window,
419
+ GLFW_MOUSE_BUTTON_LEFT,
420
+ GLFW_PRESS,
421
+ translateFlags([event modifierFlags]));
422
+ }
423
+
424
+ - (void)mouseDragged:(NSEvent *)event
425
+ {
426
+ [self mouseMoved:event];
427
+ }
428
+
429
+ - (void)mouseUp:(NSEvent *)event
430
+ {
431
+ _glfwInputMouseClick(window,
432
+ GLFW_MOUSE_BUTTON_LEFT,
433
+ GLFW_RELEASE,
434
+ translateFlags([event modifierFlags]));
435
+ }
436
+
437
+ - (void)mouseMoved:(NSEvent *)event
438
+ {
439
+ if (window->cursorMode == GLFW_CURSOR_DISABLED)
440
+ {
441
+ const double dx = [event deltaX] - window->ns.cursorWarpDeltaX;
442
+ const double dy = [event deltaY] - window->ns.cursorWarpDeltaY;
443
+
444
+ _glfwInputCursorPos(window,
445
+ window->virtualCursorPosX + dx,
446
+ window->virtualCursorPosY + dy);
447
+ }
448
+ else
449
+ {
450
+ const NSRect contentRect = [window->ns.view frame];
451
+ // NOTE: The returned location uses base 0,1 not 0,0
452
+ const NSPoint pos = [event locationInWindow];
453
+
454
+ _glfwInputCursorPos(window, pos.x, contentRect.size.height - pos.y);
455
+ }
456
+
457
+ window->ns.cursorWarpDeltaX = 0;
458
+ window->ns.cursorWarpDeltaY = 0;
459
+ }
460
+
461
+ - (void)rightMouseDown:(NSEvent *)event
462
+ {
463
+ _glfwInputMouseClick(window,
464
+ GLFW_MOUSE_BUTTON_RIGHT,
465
+ GLFW_PRESS,
466
+ translateFlags([event modifierFlags]));
467
+ }
468
+
469
+ - (void)rightMouseDragged:(NSEvent *)event
470
+ {
471
+ [self mouseMoved:event];
472
+ }
473
+
474
+ - (void)rightMouseUp:(NSEvent *)event
475
+ {
476
+ _glfwInputMouseClick(window,
477
+ GLFW_MOUSE_BUTTON_RIGHT,
478
+ GLFW_RELEASE,
479
+ translateFlags([event modifierFlags]));
480
+ }
481
+
482
+ - (void)otherMouseDown:(NSEvent *)event
483
+ {
484
+ _glfwInputMouseClick(window,
485
+ (int) [event buttonNumber],
486
+ GLFW_PRESS,
487
+ translateFlags([event modifierFlags]));
488
+ }
489
+
490
+ - (void)otherMouseDragged:(NSEvent *)event
491
+ {
492
+ [self mouseMoved:event];
493
+ }
494
+
495
+ - (void)otherMouseUp:(NSEvent *)event
496
+ {
497
+ _glfwInputMouseClick(window,
498
+ (int) [event buttonNumber],
499
+ GLFW_RELEASE,
500
+ translateFlags([event modifierFlags]));
501
+ }
502
+
503
+ - (void)mouseExited:(NSEvent *)event
504
+ {
505
+ if (window->cursorMode == GLFW_CURSOR_HIDDEN)
506
+ showCursor(window);
507
+
508
+ _glfwInputCursorEnter(window, GLFW_FALSE);
509
+ }
510
+
511
+ - (void)mouseEntered:(NSEvent *)event
512
+ {
513
+ if (window->cursorMode == GLFW_CURSOR_HIDDEN)
514
+ hideCursor(window);
515
+
516
+ _glfwInputCursorEnter(window, GLFW_TRUE);
517
+ }
518
+
519
+ - (void)viewDidChangeBackingProperties
520
+ {
521
+ const NSRect contentRect = [window->ns.view frame];
522
+ const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect];
523
+
524
+ if (fbRect.size.width != window->ns.fbWidth ||
525
+ fbRect.size.height != window->ns.fbHeight)
526
+ {
527
+ window->ns.fbWidth = fbRect.size.width;
528
+ window->ns.fbHeight = fbRect.size.height;
529
+ _glfwInputFramebufferSize(window, fbRect.size.width, fbRect.size.height);
530
+ }
531
+
532
+ const float xscale = fbRect.size.width / contentRect.size.width;
533
+ const float yscale = fbRect.size.height / contentRect.size.height;
534
+
535
+ if (xscale != window->ns.xscale || yscale != window->ns.yscale)
536
+ {
537
+ window->ns.xscale = xscale;
538
+ window->ns.yscale = yscale;
539
+ _glfwInputWindowContentScale(window, xscale, yscale);
540
+
541
+ if (window->ns.retina && window->ns.layer)
542
+ [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]];
543
+ }
544
+ }
545
+
546
+ - (void)drawRect:(NSRect)rect
547
+ {
548
+ _glfwInputWindowDamage(window);
549
+ }
550
+
551
+ - (void)updateTrackingAreas
552
+ {
553
+ if (trackingArea != nil)
554
+ {
555
+ [self removeTrackingArea:trackingArea];
556
+ [trackingArea release];
557
+ }
558
+
559
+ const NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited |
560
+ NSTrackingActiveInKeyWindow |
561
+ NSTrackingEnabledDuringMouseDrag |
562
+ NSTrackingCursorUpdate |
563
+ NSTrackingInVisibleRect |
564
+ NSTrackingAssumeInside;
565
+
566
+ trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
567
+ options:options
568
+ owner:self
569
+ userInfo:nil];
570
+
571
+ [self addTrackingArea:trackingArea];
572
+ [super updateTrackingAreas];
573
+ }
574
+
575
+ - (void)keyDown:(NSEvent *)event
576
+ {
577
+ const int key = translateKey([event keyCode]);
578
+ const int mods = translateFlags([event modifierFlags]);
579
+
580
+ _glfwInputKey(window, key, [event keyCode], GLFW_PRESS, mods);
581
+
582
+ [self interpretKeyEvents:@[event]];
583
+ }
584
+
585
+ - (void)flagsChanged:(NSEvent *)event
586
+ {
587
+ int action;
588
+ const unsigned int modifierFlags =
589
+ [event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask;
590
+ const int key = translateKey([event keyCode]);
591
+ const int mods = translateFlags(modifierFlags);
592
+ const NSUInteger keyFlag = translateKeyToModifierFlag(key);
593
+
594
+ if (keyFlag & modifierFlags)
595
+ {
596
+ if (window->keys[key] == GLFW_PRESS)
597
+ action = GLFW_RELEASE;
598
+ else
599
+ action = GLFW_PRESS;
600
+ }
601
+ else
602
+ action = GLFW_RELEASE;
603
+
604
+ _glfwInputKey(window, key, [event keyCode], action, mods);
605
+ }
606
+
607
+ - (void)keyUp:(NSEvent *)event
608
+ {
609
+ const int key = translateKey([event keyCode]);
610
+ const int mods = translateFlags([event modifierFlags]);
611
+ _glfwInputKey(window, key, [event keyCode], GLFW_RELEASE, mods);
612
+ }
613
+
614
+ - (void)scrollWheel:(NSEvent *)event
615
+ {
616
+ double deltaX = [event scrollingDeltaX];
617
+ double deltaY = [event scrollingDeltaY];
618
+
619
+ if ([event hasPreciseScrollingDeltas])
620
+ {
621
+ deltaX *= 0.1;
622
+ deltaY *= 0.1;
623
+ }
624
+
625
+ if (fabs(deltaX) > 0.0 || fabs(deltaY) > 0.0)
626
+ _glfwInputScroll(window, deltaX, deltaY);
627
+ }
628
+
629
+ - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
630
+ {
631
+ // HACK: We don't know what to say here because we don't know what the
632
+ // application wants to do with the paths
633
+ return NSDragOperationGeneric;
634
+ }
635
+
636
+ - (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
637
+ {
638
+ const NSRect contentRect = [window->ns.view frame];
639
+ // NOTE: The returned location uses base 0,1 not 0,0
640
+ const NSPoint pos = [sender draggingLocation];
641
+ _glfwInputCursorPos(window, pos.x, contentRect.size.height - pos.y);
642
+
643
+ NSPasteboard* pasteboard = [sender draggingPasteboard];
644
+ NSDictionary* options = @{NSPasteboardURLReadingFileURLsOnlyKey:@YES};
645
+ NSArray* urls = [pasteboard readObjectsForClasses:@[[NSURL class]]
646
+ options:options];
647
+ const NSUInteger count = [urls count];
648
+ if (count)
649
+ {
650
+ char** paths = calloc(count, sizeof(char*));
651
+
652
+ for (NSUInteger i = 0; i < count; i++)
653
+ paths[i] = _glfw_strdup([urls[i] fileSystemRepresentation]);
654
+
655
+ _glfwInputDrop(window, (int) count, (const char**) paths);
656
+
657
+ for (NSUInteger i = 0; i < count; i++)
658
+ free(paths[i]);
659
+ free(paths);
660
+ }
661
+
662
+ return YES;
663
+ }
664
+
665
+ - (BOOL)hasMarkedText
666
+ {
667
+ return [markedText length] > 0;
668
+ }
669
+
670
+ - (NSRange)markedRange
671
+ {
672
+ if ([markedText length] > 0)
673
+ return NSMakeRange(0, [markedText length] - 1);
674
+ else
675
+ return kEmptyRange;
676
+ }
677
+
678
+ - (NSRange)selectedRange
679
+ {
680
+ return kEmptyRange;
681
+ }
682
+
683
+ - (void)setMarkedText:(id)string
684
+ selectedRange:(NSRange)selectedRange
685
+ replacementRange:(NSRange)replacementRange
686
+ {
687
+ [markedText release];
688
+ if ([string isKindOfClass:[NSAttributedString class]])
689
+ markedText = [[NSMutableAttributedString alloc] initWithAttributedString:string];
690
+ else
691
+ markedText = [[NSMutableAttributedString alloc] initWithString:string];
692
+ }
693
+
694
+ - (void)unmarkText
695
+ {
696
+ [[markedText mutableString] setString:@""];
697
+ }
698
+
699
+ - (NSArray*)validAttributesForMarkedText
700
+ {
701
+ return [NSArray array];
702
+ }
703
+
704
+ - (NSAttributedString*)attributedSubstringForProposedRange:(NSRange)range
705
+ actualRange:(NSRangePointer)actualRange
706
+ {
707
+ return nil;
708
+ }
709
+
710
+ - (NSUInteger)characterIndexForPoint:(NSPoint)point
711
+ {
712
+ return 0;
713
+ }
714
+
715
+ - (NSRect)firstRectForCharacterRange:(NSRange)range
716
+ actualRange:(NSRangePointer)actualRange
717
+ {
718
+ const NSRect frame = [window->ns.view frame];
719
+ return NSMakeRect(frame.origin.x, frame.origin.y, 0.0, 0.0);
720
+ }
721
+
722
+ - (void)insertText:(id)string replacementRange:(NSRange)replacementRange
723
+ {
724
+ NSString* characters;
725
+ NSEvent* event = [NSApp currentEvent];
726
+ const int mods = translateFlags([event modifierFlags]);
727
+ const int plain = !(mods & GLFW_MOD_SUPER);
728
+
729
+ if ([string isKindOfClass:[NSAttributedString class]])
730
+ characters = [string string];
731
+ else
732
+ characters = (NSString*) string;
733
+
734
+ NSRange range = NSMakeRange(0, [characters length]);
735
+ while (range.length)
736
+ {
737
+ uint32_t codepoint = 0;
738
+
739
+ if ([characters getBytes:&codepoint
740
+ maxLength:sizeof(codepoint)
741
+ usedLength:NULL
742
+ encoding:NSUTF32StringEncoding
743
+ options:0
744
+ range:range
745
+ remainingRange:&range])
746
+ {
747
+ if (codepoint >= 0xf700 && codepoint <= 0xf7ff)
748
+ continue;
749
+
750
+ _glfwInputChar(window, codepoint, mods, plain);
751
+ }
752
+ }
753
+ }
754
+
755
+ - (void)doCommandBySelector:(SEL)selector
756
+ {
757
+ }
758
+
759
+ @end
760
+
761
+
762
+ //------------------------------------------------------------------------
763
+ // GLFW window class
764
+ //------------------------------------------------------------------------
765
+
766
+ @interface GLFWWindow : NSWindow {}
767
+ @end
768
+
769
+ @implementation GLFWWindow
770
+
771
+ - (BOOL)canBecomeKeyWindow
772
+ {
773
+ // Required for NSWindowStyleMaskBorderless windows
774
+ return YES;
775
+ }
776
+
777
+ - (BOOL)canBecomeMainWindow
778
+ {
779
+ return YES;
780
+ }
781
+
782
+ @end
783
+
784
+
785
+ // Create the Cocoa window
786
+ //
787
+ static GLFWbool createNativeWindow(_GLFWwindow* window,
788
+ const _GLFWwndconfig* wndconfig,
789
+ const _GLFWfbconfig* fbconfig)
790
+ {
791
+ window->ns.delegate = [[GLFWWindowDelegate alloc] initWithGlfwWindow:window];
792
+ if (window->ns.delegate == nil)
793
+ {
794
+ _glfwInputError(GLFW_PLATFORM_ERROR,
795
+ "Cocoa: Failed to create window delegate");
796
+ return GLFW_FALSE;
797
+ }
798
+
799
+ NSRect contentRect;
800
+
801
+ if (window->monitor)
802
+ {
803
+ GLFWvidmode mode;
804
+ int xpos, ypos;
805
+
806
+ _glfwPlatformGetVideoMode(window->monitor, &mode);
807
+ _glfwPlatformGetMonitorPos(window->monitor, &xpos, &ypos);
808
+
809
+ contentRect = NSMakeRect(xpos, ypos, mode.width, mode.height);
810
+ }
811
+ else
812
+ contentRect = NSMakeRect(0, 0, wndconfig->width, wndconfig->height);
813
+
814
+ window->ns.object = [[GLFWWindow alloc]
815
+ initWithContentRect:contentRect
816
+ styleMask:getStyleMask(window)
817
+ backing:NSBackingStoreBuffered
818
+ defer:NO];
819
+
820
+ if (window->ns.object == nil)
821
+ {
822
+ _glfwInputError(GLFW_PLATFORM_ERROR, "Cocoa: Failed to create window");
823
+ return GLFW_FALSE;
824
+ }
825
+
826
+ if (window->monitor)
827
+ [window->ns.object setLevel:NSMainMenuWindowLevel + 1];
828
+ else
829
+ {
830
+ [(NSWindow*) window->ns.object center];
831
+ _glfw.ns.cascadePoint =
832
+ NSPointToCGPoint([window->ns.object cascadeTopLeftFromPoint:
833
+ NSPointFromCGPoint(_glfw.ns.cascadePoint)]);
834
+
835
+ if (wndconfig->resizable)
836
+ {
837
+ const NSWindowCollectionBehavior behavior =
838
+ NSWindowCollectionBehaviorFullScreenPrimary |
839
+ NSWindowCollectionBehaviorManaged;
840
+ [window->ns.object setCollectionBehavior:behavior];
841
+ }
842
+
843
+ if (wndconfig->floating)
844
+ [window->ns.object setLevel:NSFloatingWindowLevel];
845
+
846
+ if (wndconfig->maximized)
847
+ [window->ns.object zoom:nil];
848
+ }
849
+
850
+ if (strlen(wndconfig->ns.frameName))
851
+ [window->ns.object setFrameAutosaveName:@(wndconfig->ns.frameName)];
852
+
853
+ window->ns.view = [[GLFWContentView alloc] initWithGlfwWindow:window];
854
+ window->ns.retina = wndconfig->ns.retina;
855
+
856
+ if (fbconfig->transparent)
857
+ {
858
+ [window->ns.object setOpaque:NO];
859
+ [window->ns.object setHasShadow:NO];
860
+ [window->ns.object setBackgroundColor:[NSColor clearColor]];
861
+ }
862
+
863
+ [window->ns.object setContentView:window->ns.view];
864
+ [window->ns.object makeFirstResponder:window->ns.view];
865
+ [window->ns.object setTitle:@(wndconfig->title)];
866
+ [window->ns.object setDelegate:window->ns.delegate];
867
+ [window->ns.object setAcceptsMouseMovedEvents:YES];
868
+ [window->ns.object setRestorable:NO];
869
+
870
+ #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101200
871
+ if ([window->ns.object respondsToSelector:@selector(setTabbingMode:)])
872
+ [window->ns.object setTabbingMode:NSWindowTabbingModeDisallowed];
873
+ #endif
874
+
875
+ _glfwPlatformGetWindowSize(window, &window->ns.width, &window->ns.height);
876
+ _glfwPlatformGetFramebufferSize(window, &window->ns.fbWidth, &window->ns.fbHeight);
877
+
878
+ return GLFW_TRUE;
879
+ }
880
+
881
+
882
+ //////////////////////////////////////////////////////////////////////////
883
+ ////// GLFW internal API //////
884
+ //////////////////////////////////////////////////////////////////////////
885
+
886
+ // Transforms a y-coordinate between the CG display and NS screen spaces
887
+ //
888
+ float _glfwTransformYNS(float y)
889
+ {
890
+ return CGDisplayBounds(CGMainDisplayID()).size.height - y - 1;
891
+ }
892
+
893
+
894
+ //////////////////////////////////////////////////////////////////////////
895
+ ////// GLFW platform API //////
896
+ //////////////////////////////////////////////////////////////////////////
897
+
898
+ int _glfwPlatformCreateWindow(_GLFWwindow* window,
899
+ const _GLFWwndconfig* wndconfig,
900
+ const _GLFWctxconfig* ctxconfig,
901
+ const _GLFWfbconfig* fbconfig)
902
+ {
903
+ @autoreleasepool {
904
+
905
+ if (!createNativeWindow(window, wndconfig, fbconfig))
906
+ return GLFW_FALSE;
907
+
908
+ if (ctxconfig->client != GLFW_NO_API)
909
+ {
910
+ if (ctxconfig->source == GLFW_NATIVE_CONTEXT_API)
911
+ {
912
+ if (!_glfwInitNSGL())
913
+ return GLFW_FALSE;
914
+ if (!_glfwCreateContextNSGL(window, ctxconfig, fbconfig))
915
+ return GLFW_FALSE;
916
+ }
917
+ else if (ctxconfig->source == GLFW_EGL_CONTEXT_API)
918
+ {
919
+ // EGL implementation on macOS use CALayer* EGLNativeWindowType so we
920
+ // need to get the layer for EGL window surface creation.
921
+ [window->ns.view setWantsLayer:YES];
922
+ window->ns.layer = [window->ns.view layer];
923
+
924
+ if (!_glfwInitEGL())
925
+ return GLFW_FALSE;
926
+ if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig))
927
+ return GLFW_FALSE;
928
+ }
929
+ else if (ctxconfig->source == GLFW_OSMESA_CONTEXT_API)
930
+ {
931
+ if (!_glfwInitOSMesa())
932
+ return GLFW_FALSE;
933
+ if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig))
934
+ return GLFW_FALSE;
935
+ }
936
+ }
937
+
938
+ if (window->monitor)
939
+ {
940
+ _glfwPlatformShowWindow(window);
941
+ _glfwPlatformFocusWindow(window);
942
+ acquireMonitor(window);
943
+ }
944
+
945
+ return GLFW_TRUE;
946
+
947
+ } // autoreleasepool
948
+ }
949
+
950
+ void _glfwPlatformDestroyWindow(_GLFWwindow* window)
951
+ {
952
+ @autoreleasepool {
953
+
954
+ if (_glfw.ns.disabledCursorWindow == window)
955
+ _glfw.ns.disabledCursorWindow = NULL;
956
+
957
+ [window->ns.object orderOut:nil];
958
+
959
+ if (window->monitor)
960
+ releaseMonitor(window);
961
+
962
+ if (window->context.destroy)
963
+ window->context.destroy(window);
964
+
965
+ [window->ns.object setDelegate:nil];
966
+ [window->ns.delegate release];
967
+ window->ns.delegate = nil;
968
+
969
+ [window->ns.view release];
970
+ window->ns.view = nil;
971
+
972
+ [window->ns.object close];
973
+ window->ns.object = nil;
974
+
975
+ // HACK: Allow Cocoa to catch up before returning
976
+ _glfwPlatformPollEvents();
977
+
978
+ } // autoreleasepool
979
+ }
980
+
981
+ void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title)
982
+ {
983
+ @autoreleasepool {
984
+ NSString* string = @(title);
985
+ [window->ns.object setTitle:string];
986
+ // HACK: Set the miniwindow title explicitly as setTitle: doesn't update it
987
+ // if the window lacks NSWindowStyleMaskTitled
988
+ [window->ns.object setMiniwindowTitle:string];
989
+ } // autoreleasepool
990
+ }
991
+
992
+ void _glfwPlatformSetWindowIcon(_GLFWwindow* window,
993
+ int count, const GLFWimage* images)
994
+ {
995
+ _glfwInputError(GLFW_FEATURE_UNAVAILABLE,
996
+ "Cocoa: Regular windows do not have icons on macOS");
997
+ }
998
+
999
+ void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos)
1000
+ {
1001
+ @autoreleasepool {
1002
+
1003
+ const NSRect contentRect =
1004
+ [window->ns.object contentRectForFrameRect:[window->ns.object frame]];
1005
+
1006
+ if (xpos)
1007
+ *xpos = contentRect.origin.x;
1008
+ if (ypos)
1009
+ *ypos = _glfwTransformYNS(contentRect.origin.y + contentRect.size.height - 1);
1010
+
1011
+ } // autoreleasepool
1012
+ }
1013
+
1014
+ void _glfwPlatformSetWindowPos(_GLFWwindow* window, int x, int y)
1015
+ {
1016
+ @autoreleasepool {
1017
+
1018
+ const NSRect contentRect = [window->ns.view frame];
1019
+ const NSRect dummyRect = NSMakeRect(x, _glfwTransformYNS(y + contentRect.size.height - 1), 0, 0);
1020
+ const NSRect frameRect = [window->ns.object frameRectForContentRect:dummyRect];
1021
+ [window->ns.object setFrameOrigin:frameRect.origin];
1022
+
1023
+ } // autoreleasepool
1024
+ }
1025
+
1026
+ void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height)
1027
+ {
1028
+ @autoreleasepool {
1029
+
1030
+ const NSRect contentRect = [window->ns.view frame];
1031
+
1032
+ if (width)
1033
+ *width = contentRect.size.width;
1034
+ if (height)
1035
+ *height = contentRect.size.height;
1036
+
1037
+ } // autoreleasepool
1038
+ }
1039
+
1040
+ void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height)
1041
+ {
1042
+ @autoreleasepool {
1043
+
1044
+ if (window->monitor)
1045
+ {
1046
+ if (window->monitor->window == window)
1047
+ acquireMonitor(window);
1048
+ }
1049
+ else
1050
+ {
1051
+ NSRect contentRect =
1052
+ [window->ns.object contentRectForFrameRect:[window->ns.object frame]];
1053
+ contentRect.origin.y += contentRect.size.height - height;
1054
+ contentRect.size = NSMakeSize(width, height);
1055
+ [window->ns.object setFrame:[window->ns.object frameRectForContentRect:contentRect]
1056
+ display:YES];
1057
+ }
1058
+
1059
+ } // autoreleasepool
1060
+ }
1061
+
1062
+ void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window,
1063
+ int minwidth, int minheight,
1064
+ int maxwidth, int maxheight)
1065
+ {
1066
+ @autoreleasepool {
1067
+
1068
+ if (minwidth == GLFW_DONT_CARE || minheight == GLFW_DONT_CARE)
1069
+ [window->ns.object setContentMinSize:NSMakeSize(0, 0)];
1070
+ else
1071
+ [window->ns.object setContentMinSize:NSMakeSize(minwidth, minheight)];
1072
+
1073
+ if (maxwidth == GLFW_DONT_CARE || maxheight == GLFW_DONT_CARE)
1074
+ [window->ns.object setContentMaxSize:NSMakeSize(DBL_MAX, DBL_MAX)];
1075
+ else
1076
+ [window->ns.object setContentMaxSize:NSMakeSize(maxwidth, maxheight)];
1077
+
1078
+ } // autoreleasepool
1079
+ }
1080
+
1081
+ void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer, int denom)
1082
+ {
1083
+ @autoreleasepool {
1084
+ if (numer == GLFW_DONT_CARE || denom == GLFW_DONT_CARE)
1085
+ [window->ns.object setResizeIncrements:NSMakeSize(1.0, 1.0)];
1086
+ else
1087
+ [window->ns.object setContentAspectRatio:NSMakeSize(numer, denom)];
1088
+ } // autoreleasepool
1089
+ }
1090
+
1091
+ void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height)
1092
+ {
1093
+ @autoreleasepool {
1094
+
1095
+ const NSRect contentRect = [window->ns.view frame];
1096
+ const NSRect fbRect = [window->ns.view convertRectToBacking:contentRect];
1097
+
1098
+ if (width)
1099
+ *width = (int) fbRect.size.width;
1100
+ if (height)
1101
+ *height = (int) fbRect.size.height;
1102
+
1103
+ } // autoreleasepool
1104
+ }
1105
+
1106
+ void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window,
1107
+ int* left, int* top,
1108
+ int* right, int* bottom)
1109
+ {
1110
+ @autoreleasepool {
1111
+
1112
+ const NSRect contentRect = [window->ns.view frame];
1113
+ const NSRect frameRect = [window->ns.object frameRectForContentRect:contentRect];
1114
+
1115
+ if (left)
1116
+ *left = contentRect.origin.x - frameRect.origin.x;
1117
+ if (top)
1118
+ *top = frameRect.origin.y + frameRect.size.height -
1119
+ contentRect.origin.y - contentRect.size.height;
1120
+ if (right)
1121
+ *right = frameRect.origin.x + frameRect.size.width -
1122
+ contentRect.origin.x - contentRect.size.width;
1123
+ if (bottom)
1124
+ *bottom = contentRect.origin.y - frameRect.origin.y;
1125
+
1126
+ } // autoreleasepool
1127
+ }
1128
+
1129
+ void _glfwPlatformGetWindowContentScale(_GLFWwindow* window,
1130
+ float* xscale, float* yscale)
1131
+ {
1132
+ @autoreleasepool {
1133
+
1134
+ const NSRect points = [window->ns.view frame];
1135
+ const NSRect pixels = [window->ns.view convertRectToBacking:points];
1136
+
1137
+ if (xscale)
1138
+ *xscale = (float) (pixels.size.width / points.size.width);
1139
+ if (yscale)
1140
+ *yscale = (float) (pixels.size.height / points.size.height);
1141
+
1142
+ } // autoreleasepool
1143
+ }
1144
+
1145
+ void _glfwPlatformIconifyWindow(_GLFWwindow* window)
1146
+ {
1147
+ @autoreleasepool {
1148
+ [window->ns.object miniaturize:nil];
1149
+ } // autoreleasepool
1150
+ }
1151
+
1152
+ void _glfwPlatformRestoreWindow(_GLFWwindow* window)
1153
+ {
1154
+ @autoreleasepool {
1155
+ if ([window->ns.object isMiniaturized])
1156
+ [window->ns.object deminiaturize:nil];
1157
+ else if ([window->ns.object isZoomed])
1158
+ [window->ns.object zoom:nil];
1159
+ } // autoreleasepool
1160
+ }
1161
+
1162
+ void _glfwPlatformMaximizeWindow(_GLFWwindow* window)
1163
+ {
1164
+ @autoreleasepool {
1165
+ if (![window->ns.object isZoomed])
1166
+ [window->ns.object zoom:nil];
1167
+ } // autoreleasepool
1168
+ }
1169
+
1170
+ void _glfwPlatformShowWindow(_GLFWwindow* window)
1171
+ {
1172
+ @autoreleasepool {
1173
+ [window->ns.object orderFront:nil];
1174
+ } // autoreleasepool
1175
+ }
1176
+
1177
+ void _glfwPlatformHideWindow(_GLFWwindow* window)
1178
+ {
1179
+ @autoreleasepool {
1180
+ [window->ns.object orderOut:nil];
1181
+ } // autoreleasepool
1182
+ }
1183
+
1184
+ void _glfwPlatformRequestWindowAttention(_GLFWwindow* window)
1185
+ {
1186
+ @autoreleasepool {
1187
+ [NSApp requestUserAttention:NSInformationalRequest];
1188
+ } // autoreleasepool
1189
+ }
1190
+
1191
+ void _glfwPlatformFocusWindow(_GLFWwindow* window)
1192
+ {
1193
+ @autoreleasepool {
1194
+ // Make us the active application
1195
+ // HACK: This is here to prevent applications using only hidden windows from
1196
+ // being activated, but should probably not be done every time any
1197
+ // window is shown
1198
+ [NSApp activateIgnoringOtherApps:YES];
1199
+ [window->ns.object makeKeyAndOrderFront:nil];
1200
+ } // autoreleasepool
1201
+ }
1202
+
1203
+ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window,
1204
+ _GLFWmonitor* monitor,
1205
+ int xpos, int ypos,
1206
+ int width, int height,
1207
+ int refreshRate)
1208
+ {
1209
+ @autoreleasepool {
1210
+
1211
+ if (window->monitor == monitor)
1212
+ {
1213
+ if (monitor)
1214
+ {
1215
+ if (monitor->window == window)
1216
+ acquireMonitor(window);
1217
+ }
1218
+ else
1219
+ {
1220
+ const NSRect contentRect =
1221
+ NSMakeRect(xpos, _glfwTransformYNS(ypos + height - 1), width, height);
1222
+ const NSRect frameRect =
1223
+ [window->ns.object frameRectForContentRect:contentRect
1224
+ styleMask:getStyleMask(window)];
1225
+
1226
+ [window->ns.object setFrame:frameRect display:YES];
1227
+ }
1228
+
1229
+ return;
1230
+ }
1231
+
1232
+ if (window->monitor)
1233
+ releaseMonitor(window);
1234
+
1235
+ _glfwInputWindowMonitor(window, monitor);
1236
+
1237
+ // HACK: Allow the state cached in Cocoa to catch up to reality
1238
+ // TODO: Solve this in a less terrible way
1239
+ _glfwPlatformPollEvents();
1240
+
1241
+ const NSUInteger styleMask = getStyleMask(window);
1242
+ [window->ns.object setStyleMask:styleMask];
1243
+ // HACK: Changing the style mask can cause the first responder to be cleared
1244
+ [window->ns.object makeFirstResponder:window->ns.view];
1245
+
1246
+ if (window->monitor)
1247
+ {
1248
+ [window->ns.object setLevel:NSMainMenuWindowLevel + 1];
1249
+ [window->ns.object setHasShadow:NO];
1250
+
1251
+ acquireMonitor(window);
1252
+ }
1253
+ else
1254
+ {
1255
+ NSRect contentRect = NSMakeRect(xpos, _glfwTransformYNS(ypos + height - 1),
1256
+ width, height);
1257
+ NSRect frameRect = [window->ns.object frameRectForContentRect:contentRect
1258
+ styleMask:styleMask];
1259
+ [window->ns.object setFrame:frameRect display:YES];
1260
+
1261
+ if (window->numer != GLFW_DONT_CARE &&
1262
+ window->denom != GLFW_DONT_CARE)
1263
+ {
1264
+ [window->ns.object setContentAspectRatio:NSMakeSize(window->numer,
1265
+ window->denom)];
1266
+ }
1267
+
1268
+ if (window->minwidth != GLFW_DONT_CARE &&
1269
+ window->minheight != GLFW_DONT_CARE)
1270
+ {
1271
+ [window->ns.object setContentMinSize:NSMakeSize(window->minwidth,
1272
+ window->minheight)];
1273
+ }
1274
+
1275
+ if (window->maxwidth != GLFW_DONT_CARE &&
1276
+ window->maxheight != GLFW_DONT_CARE)
1277
+ {
1278
+ [window->ns.object setContentMaxSize:NSMakeSize(window->maxwidth,
1279
+ window->maxheight)];
1280
+ }
1281
+
1282
+ if (window->floating)
1283
+ [window->ns.object setLevel:NSFloatingWindowLevel];
1284
+ else
1285
+ [window->ns.object setLevel:NSNormalWindowLevel];
1286
+
1287
+ [window->ns.object setHasShadow:YES];
1288
+ // HACK: Clearing NSWindowStyleMaskTitled resets and disables the window
1289
+ // title property but the miniwindow title property is unaffected
1290
+ [window->ns.object setTitle:[window->ns.object miniwindowTitle]];
1291
+ }
1292
+
1293
+ } // autoreleasepool
1294
+ }
1295
+
1296
+ int _glfwPlatformWindowFocused(_GLFWwindow* window)
1297
+ {
1298
+ @autoreleasepool {
1299
+ return [window->ns.object isKeyWindow];
1300
+ } // autoreleasepool
1301
+ }
1302
+
1303
+ int _glfwPlatformWindowIconified(_GLFWwindow* window)
1304
+ {
1305
+ @autoreleasepool {
1306
+ return [window->ns.object isMiniaturized];
1307
+ } // autoreleasepool
1308
+ }
1309
+
1310
+ int _glfwPlatformWindowVisible(_GLFWwindow* window)
1311
+ {
1312
+ @autoreleasepool {
1313
+ return [window->ns.object isVisible];
1314
+ } // autoreleasepool
1315
+ }
1316
+
1317
+ int _glfwPlatformWindowMaximized(_GLFWwindow* window)
1318
+ {
1319
+ @autoreleasepool {
1320
+ return [window->ns.object isZoomed];
1321
+ } // autoreleasepool
1322
+ }
1323
+
1324
+ int _glfwPlatformWindowHovered(_GLFWwindow* window)
1325
+ {
1326
+ @autoreleasepool {
1327
+
1328
+ const NSPoint point = [NSEvent mouseLocation];
1329
+
1330
+ if ([NSWindow windowNumberAtPoint:point belowWindowWithWindowNumber:0] !=
1331
+ [window->ns.object windowNumber])
1332
+ {
1333
+ return GLFW_FALSE;
1334
+ }
1335
+
1336
+ return NSMouseInRect(point,
1337
+ [window->ns.object convertRectToScreen:[window->ns.view frame]], NO);
1338
+
1339
+ } // autoreleasepool
1340
+ }
1341
+
1342
+ int _glfwPlatformFramebufferTransparent(_GLFWwindow* window)
1343
+ {
1344
+ @autoreleasepool {
1345
+ return ![window->ns.object isOpaque] && ![window->ns.view isOpaque];
1346
+ } // autoreleasepool
1347
+ }
1348
+
1349
+ void _glfwPlatformSetWindowResizable(_GLFWwindow* window, GLFWbool enabled)
1350
+ {
1351
+ @autoreleasepool {
1352
+ [window->ns.object setStyleMask:getStyleMask(window)];
1353
+ } // autoreleasepool
1354
+ }
1355
+
1356
+ void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, GLFWbool enabled)
1357
+ {
1358
+ @autoreleasepool {
1359
+ [window->ns.object setStyleMask:getStyleMask(window)];
1360
+ [window->ns.object makeFirstResponder:window->ns.view];
1361
+ } // autoreleasepool
1362
+ }
1363
+
1364
+ void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled)
1365
+ {
1366
+ @autoreleasepool {
1367
+ if (enabled)
1368
+ [window->ns.object setLevel:NSFloatingWindowLevel];
1369
+ else
1370
+ [window->ns.object setLevel:NSNormalWindowLevel];
1371
+ } // autoreleasepool
1372
+ }
1373
+
1374
+ void _glfwPlatformSetWindowMousePassthrough(_GLFWwindow* window, GLFWbool enabled)
1375
+ {
1376
+ @autoreleasepool {
1377
+ [window->ns.object setIgnoresMouseEvents:enabled];
1378
+ }
1379
+ }
1380
+
1381
+ float _glfwPlatformGetWindowOpacity(_GLFWwindow* window)
1382
+ {
1383
+ @autoreleasepool {
1384
+ return (float) [window->ns.object alphaValue];
1385
+ } // autoreleasepool
1386
+ }
1387
+
1388
+ void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity)
1389
+ {
1390
+ @autoreleasepool {
1391
+ [window->ns.object setAlphaValue:opacity];
1392
+ } // autoreleasepool
1393
+ }
1394
+
1395
+ void _glfwPlatformSetRawMouseMotion(_GLFWwindow *window, GLFWbool enabled)
1396
+ {
1397
+ _glfwInputError(GLFW_FEATURE_UNIMPLEMENTED,
1398
+ "Cocoa: Raw mouse motion not yet implemented");
1399
+ }
1400
+
1401
+ GLFWbool _glfwPlatformRawMouseMotionSupported(void)
1402
+ {
1403
+ return GLFW_FALSE;
1404
+ }
1405
+
1406
+ void _glfwPlatformPollEvents(void)
1407
+ {
1408
+ @autoreleasepool {
1409
+
1410
+ for (;;)
1411
+ {
1412
+ NSEvent* event = [NSApp nextEventMatchingMask:NSEventMaskAny
1413
+ untilDate:[NSDate distantPast]
1414
+ inMode:NSDefaultRunLoopMode
1415
+ dequeue:YES];
1416
+ if (event == nil)
1417
+ break;
1418
+
1419
+ [NSApp sendEvent:event];
1420
+ }
1421
+
1422
+ } // autoreleasepool
1423
+ }
1424
+
1425
+ void _glfwPlatformWaitEvents(void)
1426
+ {
1427
+ @autoreleasepool {
1428
+
1429
+ // I wanted to pass NO to dequeue:, and rely on PollEvents to
1430
+ // dequeue and send. For reasons not at all clear to me, passing
1431
+ // NO to dequeue: causes this method never to return.
1432
+ NSEvent *event = [NSApp nextEventMatchingMask:NSEventMaskAny
1433
+ untilDate:[NSDate distantFuture]
1434
+ inMode:NSDefaultRunLoopMode
1435
+ dequeue:YES];
1436
+ [NSApp sendEvent:event];
1437
+
1438
+ _glfwPlatformPollEvents();
1439
+
1440
+ } // autoreleasepool
1441
+ }
1442
+
1443
+ void _glfwPlatformWaitEventsTimeout(double timeout)
1444
+ {
1445
+ @autoreleasepool {
1446
+
1447
+ NSDate* date = [NSDate dateWithTimeIntervalSinceNow:timeout];
1448
+ NSEvent* event = [NSApp nextEventMatchingMask:NSEventMaskAny
1449
+ untilDate:date
1450
+ inMode:NSDefaultRunLoopMode
1451
+ dequeue:YES];
1452
+ if (event)
1453
+ [NSApp sendEvent:event];
1454
+
1455
+ _glfwPlatformPollEvents();
1456
+
1457
+ } // autoreleasepool
1458
+ }
1459
+
1460
+ void _glfwPlatformPostEmptyEvent(void)
1461
+ {
1462
+ @autoreleasepool {
1463
+
1464
+ NSEvent* event = [NSEvent otherEventWithType:NSEventTypeApplicationDefined
1465
+ location:NSMakePoint(0, 0)
1466
+ modifierFlags:0
1467
+ timestamp:0
1468
+ windowNumber:0
1469
+ context:nil
1470
+ subtype:0
1471
+ data1:0
1472
+ data2:0];
1473
+ [NSApp postEvent:event atStart:YES];
1474
+
1475
+ } // autoreleasepool
1476
+ }
1477
+
1478
+ void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos)
1479
+ {
1480
+ @autoreleasepool {
1481
+
1482
+ const NSRect contentRect = [window->ns.view frame];
1483
+ // NOTE: The returned location uses base 0,1 not 0,0
1484
+ const NSPoint pos = [window->ns.object mouseLocationOutsideOfEventStream];
1485
+
1486
+ if (xpos)
1487
+ *xpos = pos.x;
1488
+ if (ypos)
1489
+ *ypos = contentRect.size.height - pos.y;
1490
+
1491
+ } // autoreleasepool
1492
+ }
1493
+
1494
+ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y)
1495
+ {
1496
+ @autoreleasepool {
1497
+
1498
+ updateCursorImage(window);
1499
+
1500
+ const NSRect contentRect = [window->ns.view frame];
1501
+ // NOTE: The returned location uses base 0,1 not 0,0
1502
+ const NSPoint pos = [window->ns.object mouseLocationOutsideOfEventStream];
1503
+
1504
+ window->ns.cursorWarpDeltaX += x - pos.x;
1505
+ window->ns.cursorWarpDeltaY += y - contentRect.size.height + pos.y;
1506
+
1507
+ if (window->monitor)
1508
+ {
1509
+ CGDisplayMoveCursorToPoint(window->monitor->ns.displayID,
1510
+ CGPointMake(x, y));
1511
+ }
1512
+ else
1513
+ {
1514
+ const NSRect localRect = NSMakeRect(x, contentRect.size.height - y - 1, 0, 0);
1515
+ const NSRect globalRect = [window->ns.object convertRectToScreen:localRect];
1516
+ const NSPoint globalPoint = globalRect.origin;
1517
+
1518
+ CGWarpMouseCursorPosition(CGPointMake(globalPoint.x,
1519
+ _glfwTransformYNS(globalPoint.y)));
1520
+ }
1521
+
1522
+ } // autoreleasepool
1523
+ }
1524
+
1525
+ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
1526
+ {
1527
+ @autoreleasepool {
1528
+ if (_glfwPlatformWindowFocused(window))
1529
+ updateCursorMode(window);
1530
+ } // autoreleasepool
1531
+ }
1532
+
1533
+ const char* _glfwPlatformGetScancodeName(int scancode)
1534
+ {
1535
+ @autoreleasepool {
1536
+
1537
+ if (scancode < 0 || scancode > 0xff ||
1538
+ _glfw.ns.keycodes[scancode] == GLFW_KEY_UNKNOWN)
1539
+ {
1540
+ _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode");
1541
+ return NULL;
1542
+ }
1543
+
1544
+ const int key = _glfw.ns.keycodes[scancode];
1545
+
1546
+ UInt32 deadKeyState = 0;
1547
+ UniChar characters[4];
1548
+ UniCharCount characterCount = 0;
1549
+
1550
+ if (UCKeyTranslate([(NSData*) _glfw.ns.unicodeData bytes],
1551
+ scancode,
1552
+ kUCKeyActionDisplay,
1553
+ 0,
1554
+ LMGetKbdType(),
1555
+ kUCKeyTranslateNoDeadKeysBit,
1556
+ &deadKeyState,
1557
+ sizeof(characters) / sizeof(characters[0]),
1558
+ &characterCount,
1559
+ characters) != noErr)
1560
+ {
1561
+ return NULL;
1562
+ }
1563
+
1564
+ if (!characterCount)
1565
+ return NULL;
1566
+
1567
+ CFStringRef string = CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault,
1568
+ characters,
1569
+ characterCount,
1570
+ kCFAllocatorNull);
1571
+ CFStringGetCString(string,
1572
+ _glfw.ns.keynames[key],
1573
+ sizeof(_glfw.ns.keynames[key]),
1574
+ kCFStringEncodingUTF8);
1575
+ CFRelease(string);
1576
+
1577
+ return _glfw.ns.keynames[key];
1578
+
1579
+ } // autoreleasepool
1580
+ }
1581
+
1582
+ int _glfwPlatformGetKeyScancode(int key)
1583
+ {
1584
+ return _glfw.ns.scancodes[key];
1585
+ }
1586
+
1587
+ int _glfwPlatformCreateCursor(_GLFWcursor* cursor,
1588
+ const GLFWimage* image,
1589
+ int xhot, int yhot)
1590
+ {
1591
+ @autoreleasepool {
1592
+
1593
+ NSImage* native;
1594
+ NSBitmapImageRep* rep;
1595
+
1596
+ rep = [[NSBitmapImageRep alloc]
1597
+ initWithBitmapDataPlanes:NULL
1598
+ pixelsWide:image->width
1599
+ pixelsHigh:image->height
1600
+ bitsPerSample:8
1601
+ samplesPerPixel:4
1602
+ hasAlpha:YES
1603
+ isPlanar:NO
1604
+ colorSpaceName:NSCalibratedRGBColorSpace
1605
+ bitmapFormat:NSBitmapFormatAlphaNonpremultiplied
1606
+ bytesPerRow:image->width * 4
1607
+ bitsPerPixel:32];
1608
+
1609
+ if (rep == nil)
1610
+ return GLFW_FALSE;
1611
+
1612
+ memcpy([rep bitmapData], image->pixels, image->width * image->height * 4);
1613
+
1614
+ native = [[NSImage alloc] initWithSize:NSMakeSize(image->width, image->height)];
1615
+ [native addRepresentation:rep];
1616
+
1617
+ cursor->ns.object = [[NSCursor alloc] initWithImage:native
1618
+ hotSpot:NSMakePoint(xhot, yhot)];
1619
+
1620
+ [native release];
1621
+ [rep release];
1622
+
1623
+ if (cursor->ns.object == nil)
1624
+ return GLFW_FALSE;
1625
+
1626
+ return GLFW_TRUE;
1627
+
1628
+ } // autoreleasepool
1629
+ }
1630
+
1631
+ int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, int shape)
1632
+ {
1633
+ @autoreleasepool {
1634
+
1635
+ SEL cursorSelector = NULL;
1636
+
1637
+ // HACK: Try to use a private message
1638
+ switch (shape)
1639
+ {
1640
+ case GLFW_RESIZE_EW_CURSOR:
1641
+ cursorSelector = NSSelectorFromString(@"_windowResizeEastWestCursor");
1642
+ break;
1643
+ case GLFW_RESIZE_NS_CURSOR:
1644
+ cursorSelector = NSSelectorFromString(@"_windowResizeNorthSouthCursor");
1645
+ break;
1646
+ case GLFW_RESIZE_NWSE_CURSOR:
1647
+ cursorSelector = NSSelectorFromString(@"_windowResizeNorthWestSouthEastCursor");
1648
+ break;
1649
+ case GLFW_RESIZE_NESW_CURSOR:
1650
+ cursorSelector = NSSelectorFromString(@"_windowResizeNorthEastSouthWestCursor");
1651
+ break;
1652
+ }
1653
+
1654
+ if (cursorSelector && [NSCursor respondsToSelector:cursorSelector])
1655
+ {
1656
+ id object = [NSCursor performSelector:cursorSelector];
1657
+ if ([object isKindOfClass:[NSCursor class]])
1658
+ cursor->ns.object = object;
1659
+ }
1660
+
1661
+ if (!cursor->ns.object)
1662
+ {
1663
+ switch (shape)
1664
+ {
1665
+ case GLFW_ARROW_CURSOR:
1666
+ cursor->ns.object = [NSCursor arrowCursor];
1667
+ break;
1668
+ case GLFW_IBEAM_CURSOR:
1669
+ cursor->ns.object = [NSCursor IBeamCursor];
1670
+ break;
1671
+ case GLFW_CROSSHAIR_CURSOR:
1672
+ cursor->ns.object = [NSCursor crosshairCursor];
1673
+ break;
1674
+ case GLFW_POINTING_HAND_CURSOR:
1675
+ cursor->ns.object = [NSCursor pointingHandCursor];
1676
+ break;
1677
+ case GLFW_RESIZE_EW_CURSOR:
1678
+ cursor->ns.object = [NSCursor resizeLeftRightCursor];
1679
+ break;
1680
+ case GLFW_RESIZE_NS_CURSOR:
1681
+ cursor->ns.object = [NSCursor resizeUpDownCursor];
1682
+ break;
1683
+ case GLFW_RESIZE_ALL_CURSOR:
1684
+ cursor->ns.object = [NSCursor closedHandCursor];
1685
+ break;
1686
+ case GLFW_NOT_ALLOWED_CURSOR:
1687
+ cursor->ns.object = [NSCursor operationNotAllowedCursor];
1688
+ break;
1689
+ }
1690
+ }
1691
+
1692
+ if (!cursor->ns.object)
1693
+ {
1694
+ _glfwInputError(GLFW_CURSOR_UNAVAILABLE,
1695
+ "Cocoa: Standard cursor shape unavailable");
1696
+ return GLFW_FALSE;
1697
+ }
1698
+
1699
+ [cursor->ns.object retain];
1700
+ return GLFW_TRUE;
1701
+
1702
+ } // autoreleasepool
1703
+ }
1704
+
1705
+ void _glfwPlatformDestroyCursor(_GLFWcursor* cursor)
1706
+ {
1707
+ @autoreleasepool {
1708
+ if (cursor->ns.object)
1709
+ [(NSCursor*) cursor->ns.object release];
1710
+ } // autoreleasepool
1711
+ }
1712
+
1713
+ void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor)
1714
+ {
1715
+ @autoreleasepool {
1716
+ if (cursorInContentArea(window))
1717
+ updateCursorImage(window);
1718
+ } // autoreleasepool
1719
+ }
1720
+
1721
+ void _glfwPlatformSetClipboardString(const char* string)
1722
+ {
1723
+ @autoreleasepool {
1724
+ NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
1725
+ [pasteboard declareTypes:@[NSPasteboardTypeString] owner:nil];
1726
+ [pasteboard setString:@(string) forType:NSPasteboardTypeString];
1727
+ } // autoreleasepool
1728
+ }
1729
+
1730
+ const char* _glfwPlatformGetClipboardString(void)
1731
+ {
1732
+ @autoreleasepool {
1733
+
1734
+ NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
1735
+
1736
+ if (![[pasteboard types] containsObject:NSPasteboardTypeString])
1737
+ {
1738
+ _glfwInputError(GLFW_FORMAT_UNAVAILABLE,
1739
+ "Cocoa: Failed to retrieve string from pasteboard");
1740
+ return NULL;
1741
+ }
1742
+
1743
+ NSString* object = [pasteboard stringForType:NSPasteboardTypeString];
1744
+ if (!object)
1745
+ {
1746
+ _glfwInputError(GLFW_PLATFORM_ERROR,
1747
+ "Cocoa: Failed to retrieve object from pasteboard");
1748
+ return NULL;
1749
+ }
1750
+
1751
+ free(_glfw.ns.clipboardString);
1752
+ _glfw.ns.clipboardString = _glfw_strdup([object UTF8String]);
1753
+
1754
+ return _glfw.ns.clipboardString;
1755
+
1756
+ } // autoreleasepool
1757
+ }
1758
+
1759
+ EGLenum _glfwPlatformGetEGLPlatform(EGLint** attribs)
1760
+ {
1761
+ if (_glfw.egl.ANGLE_platform_angle)
1762
+ {
1763
+ int type = 0;
1764
+
1765
+ if (_glfw.egl.ANGLE_platform_angle_opengl)
1766
+ {
1767
+ if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_OPENGL)
1768
+ type = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE;
1769
+ }
1770
+
1771
+ if (_glfw.egl.ANGLE_platform_angle_metal)
1772
+ {
1773
+ if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_METAL)
1774
+ type = EGL_PLATFORM_ANGLE_TYPE_METAL_ANGLE;
1775
+ }
1776
+
1777
+ if (type)
1778
+ {
1779
+ *attribs = calloc(3, sizeof(EGLint));
1780
+ (*attribs)[0] = EGL_PLATFORM_ANGLE_TYPE_ANGLE;
1781
+ (*attribs)[1] = type;
1782
+ (*attribs)[2] = EGL_NONE;
1783
+ return EGL_PLATFORM_ANGLE_ANGLE;
1784
+ }
1785
+ }
1786
+
1787
+ return 0;
1788
+ }
1789
+
1790
+ EGLNativeDisplayType _glfwPlatformGetEGLNativeDisplay(void)
1791
+ {
1792
+ return EGL_DEFAULT_DISPLAY;
1793
+ }
1794
+
1795
+ EGLNativeWindowType _glfwPlatformGetEGLNativeWindow(_GLFWwindow* window)
1796
+ {
1797
+ return window->ns.layer;
1798
+ }
1799
+
1800
+ void _glfwPlatformGetRequiredInstanceExtensions(char** extensions)
1801
+ {
1802
+ if (_glfw.vk.KHR_surface && _glfw.vk.EXT_metal_surface)
1803
+ {
1804
+ extensions[0] = "VK_KHR_surface";
1805
+ extensions[1] = "VK_EXT_metal_surface";
1806
+ }
1807
+ else if (_glfw.vk.KHR_surface && _glfw.vk.MVK_macos_surface)
1808
+ {
1809
+ extensions[0] = "VK_KHR_surface";
1810
+ extensions[1] = "VK_MVK_macos_surface";
1811
+ }
1812
+ }
1813
+
1814
+ int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance,
1815
+ VkPhysicalDevice device,
1816
+ uint32_t queuefamily)
1817
+ {
1818
+ return GLFW_TRUE;
1819
+ }
1820
+
1821
+ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance,
1822
+ _GLFWwindow* window,
1823
+ const VkAllocationCallbacks* allocator,
1824
+ VkSurfaceKHR* surface)
1825
+ {
1826
+ @autoreleasepool {
1827
+
1828
+ #if MAC_OS_X_VERSION_MAX_ALLOWED >= 101100
1829
+ // HACK: Dynamically load Core Animation to avoid adding an extra
1830
+ // dependency for the majority who don't use MoltenVK
1831
+ NSBundle* bundle = [NSBundle bundleWithPath:@"/System/Library/Frameworks/QuartzCore.framework"];
1832
+ if (!bundle)
1833
+ {
1834
+ _glfwInputError(GLFW_PLATFORM_ERROR,
1835
+ "Cocoa: Failed to find QuartzCore.framework");
1836
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
1837
+ }
1838
+
1839
+ // NOTE: Create the layer here as makeBackingLayer should not return nil
1840
+ window->ns.layer = [[bundle classNamed:@"CAMetalLayer"] layer];
1841
+ if (!window->ns.layer)
1842
+ {
1843
+ _glfwInputError(GLFW_PLATFORM_ERROR,
1844
+ "Cocoa: Failed to create layer for view");
1845
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
1846
+ }
1847
+
1848
+ if (window->ns.retina)
1849
+ [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]];
1850
+
1851
+ [window->ns.view setLayer:window->ns.layer];
1852
+ [window->ns.view setWantsLayer:YES];
1853
+
1854
+ VkResult err;
1855
+
1856
+ if (_glfw.vk.EXT_metal_surface)
1857
+ {
1858
+ VkMetalSurfaceCreateInfoEXT sci;
1859
+
1860
+ PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
1861
+ vkCreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT)
1862
+ vkGetInstanceProcAddr(instance, "vkCreateMetalSurfaceEXT");
1863
+ if (!vkCreateMetalSurfaceEXT)
1864
+ {
1865
+ _glfwInputError(GLFW_API_UNAVAILABLE,
1866
+ "Cocoa: Vulkan instance missing VK_EXT_metal_surface extension");
1867
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
1868
+ }
1869
+
1870
+ memset(&sci, 0, sizeof(sci));
1871
+ sci.sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT;
1872
+ sci.pLayer = window->ns.layer;
1873
+
1874
+ err = vkCreateMetalSurfaceEXT(instance, &sci, allocator, surface);
1875
+ }
1876
+ else
1877
+ {
1878
+ VkMacOSSurfaceCreateInfoMVK sci;
1879
+
1880
+ PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;
1881
+ vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)
1882
+ vkGetInstanceProcAddr(instance, "vkCreateMacOSSurfaceMVK");
1883
+ if (!vkCreateMacOSSurfaceMVK)
1884
+ {
1885
+ _glfwInputError(GLFW_API_UNAVAILABLE,
1886
+ "Cocoa: Vulkan instance missing VK_MVK_macos_surface extension");
1887
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
1888
+ }
1889
+
1890
+ memset(&sci, 0, sizeof(sci));
1891
+ sci.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
1892
+ sci.pView = window->ns.view;
1893
+
1894
+ err = vkCreateMacOSSurfaceMVK(instance, &sci, allocator, surface);
1895
+ }
1896
+
1897
+ if (err)
1898
+ {
1899
+ _glfwInputError(GLFW_PLATFORM_ERROR,
1900
+ "Cocoa: Failed to create Vulkan surface: %s",
1901
+ _glfwGetVulkanResultString(err));
1902
+ }
1903
+
1904
+ return err;
1905
+ #else
1906
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
1907
+ #endif
1908
+
1909
+ } // autoreleasepool
1910
+ }
1911
+
1912
+
1913
+ //////////////////////////////////////////////////////////////////////////
1914
+ ////// GLFW native API //////
1915
+ //////////////////////////////////////////////////////////////////////////
1916
+
1917
+ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* handle)
1918
+ {
1919
+ _GLFWwindow* window = (_GLFWwindow*) handle;
1920
+ _GLFW_REQUIRE_INIT_OR_RETURN(nil);
1921
+ return window->ns.object;
1922
+ }
1923
+