koffi 0.9.4 → 0.9.7

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 (823) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +50 -8
  3. package/package.json +24 -6
  4. package/src/call.hh +2 -1
  5. package/src/call_arm32.cc +498 -0
  6. package/src/call_arm32_fwd.S +108 -0
  7. package/src/call_arm64.cc +57 -57
  8. package/src/call_arm64_fwd.S +24 -29
  9. package/src/call_x64_sysv.cc +29 -43
  10. package/src/call_x64_win.cc +37 -40
  11. package/src/call_x86.cc +46 -59
  12. package/src/ffi.cc +29 -27
  13. package/src/ffi.hh +19 -12
  14. package/src/util.cc +58 -24
  15. package/src/util.hh +103 -19
  16. package/test/qemu/.gitkeep +0 -0
  17. package/test/registry/machines.json +112 -0
  18. package/test/registry/sha256sum.txt +21 -0
  19. package/test/test.js +493 -0
  20. package/vendor/dragonbox/CMakeLists.txt +122 -122
  21. package/vendor/dragonbox/LICENSE-Apache2-LLVM +218 -218
  22. package/vendor/dragonbox/LICENSE-Boost +23 -23
  23. package/vendor/dragonbox/README.md +277 -277
  24. package/vendor/dragonbox/cmake/dragonboxConfig.cmake +1 -1
  25. package/vendor/dragonbox/include/dragonbox/dragonbox.h +6 -2
  26. package/vendor/dragonbox/include/dragonbox/dragonbox_to_chars.h +108 -108
  27. package/vendor/dragonbox/other_files/Dragonbox.pdf +0 -0
  28. package/vendor/dragonbox/other_files/unknown_win64_vc2019.html +539 -539
  29. package/vendor/dragonbox/source/dragonbox_to_chars.cpp +303 -303
  30. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/CMakeLists.txt +23 -23
  31. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.cpp +238 -238
  32. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.h +95 -95
  33. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/grisu_exact.h +2666 -2666
  34. package/vendor/dragonbox/subproject/3rdparty/ryu/CMakeLists.txt +16 -16
  35. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/common.h +114 -114
  36. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s.c +509 -509
  37. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_full_table.h +367 -367
  38. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_intrinsics.h +357 -357
  39. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/digit_table.h +35 -35
  40. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s.c +345 -345
  41. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_full_table.h +55 -55
  42. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_intrinsics.h +128 -128
  43. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/ryu.h +46 -46
  44. package/vendor/dragonbox/subproject/3rdparty/schubfach/CMakeLists.txt +21 -21
  45. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.cc +699 -699
  46. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.h +31 -31
  47. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.cc +1354 -1354
  48. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.h +31 -31
  49. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/example_shaded_plots.m +68 -68
  50. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/license.txt +25 -25
  51. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution.m +92 -92
  52. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution_prctile.m +121 -121
  53. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_histogram_shaded.m +99 -99
  54. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_shaded.m +93 -93
  55. package/vendor/dragonbox/subproject/benchmark/CMakeLists.txt +64 -64
  56. package/vendor/dragonbox/subproject/benchmark/include/benchmark.h +40 -40
  57. package/vendor/dragonbox/subproject/benchmark/matlab/plot_benchmarks.m +21 -21
  58. package/vendor/dragonbox/subproject/benchmark/matlab/plot_digit_benchmark.m +78 -78
  59. package/vendor/dragonbox/subproject/benchmark/matlab/plot_uniform_benchmark.m +95 -95
  60. package/vendor/dragonbox/subproject/benchmark/source/benchmark.cpp +237 -237
  61. package/vendor/dragonbox/subproject/benchmark/source/dragonbox.cpp +30 -30
  62. package/vendor/dragonbox/subproject/benchmark/source/grisu_exact.cpp +36 -36
  63. package/vendor/dragonbox/subproject/benchmark/source/ryu.cpp +27 -27
  64. package/vendor/dragonbox/subproject/benchmark/source/schubfach.cpp +31 -31
  65. package/vendor/dragonbox/subproject/common/CMakeLists.txt +41 -41
  66. package/vendor/dragonbox/subproject/common/include/best_rational_approx.h +96 -96
  67. package/vendor/dragonbox/subproject/common/include/big_uint.h +217 -217
  68. package/vendor/dragonbox/subproject/common/include/continued_fractions.h +173 -173
  69. package/vendor/dragonbox/subproject/common/include/good_rational_approx.h +266 -266
  70. package/vendor/dragonbox/subproject/common/include/random_float.h +182 -182
  71. package/vendor/dragonbox/subproject/common/include/rational_continued_fractions.h +56 -56
  72. package/vendor/dragonbox/subproject/common/source/big_uint.cpp +601 -601
  73. package/vendor/dragonbox/subproject/meta/CMakeLists.txt +40 -40
  74. package/vendor/dragonbox/subproject/meta/results/binary32_generated_cache.txt +81 -81
  75. package/vendor/dragonbox/subproject/meta/results/binary64_compressed_cache_error_table.txt +9 -9
  76. package/vendor/dragonbox/subproject/meta/results/binary64_generated_cache.txt +622 -622
  77. package/vendor/dragonbox/subproject/meta/source/generate_cache.cpp +126 -126
  78. package/vendor/dragonbox/subproject/meta/source/live_test.cpp +81 -81
  79. package/vendor/dragonbox/subproject/meta/source/perf_test.cpp +104 -104
  80. package/vendor/dragonbox/subproject/meta/source/sandbox.cpp +20 -20
  81. package/vendor/dragonbox/subproject/test/CMakeLists.txt +69 -69
  82. package/vendor/dragonbox/subproject/test/results/plot_required_bits.m +17 -17
  83. package/vendor/dragonbox/subproject/test/source/test_all_shorter_interval_cases.cpp +88 -88
  84. package/vendor/dragonbox/subproject/test/source/uniform_random_test.cpp +95 -95
  85. package/vendor/dragonbox/subproject/test/source/verify_cache_precision.cpp +337 -337
  86. package/vendor/dragonbox/subproject/test/source/verify_compressed_cache.cpp +154 -154
  87. package/vendor/dragonbox/subproject/test/source/verify_fast_multiplication.cpp +168 -168
  88. package/vendor/dragonbox/subproject/test/source/verify_log_computation.cpp +251 -251
  89. package/vendor/dragonbox/subproject/test/source/verify_magic_division.cpp +113 -113
  90. package/vendor/libcc/libcc.cc +36 -18
  91. package/vendor/libcc/libcc.hh +23 -1
  92. package/vendor/raylib/BINDINGS.md +123 -0
  93. package/vendor/raylib/CHANGELOG +1495 -0
  94. package/vendor/raylib/CMakeLists.txt +33 -0
  95. package/vendor/raylib/CMakeOptions.txt +87 -0
  96. package/vendor/raylib/CONTRIBUTING.md +76 -0
  97. package/vendor/raylib/CONTRIBUTORS.md +63 -0
  98. package/vendor/raylib/CONVENTIONS.md +95 -0
  99. package/vendor/raylib/HISTORY.md +364 -0
  100. package/vendor/raylib/LICENSE +16 -0
  101. package/vendor/raylib/README.md +141 -0
  102. package/vendor/raylib/ROADMAP.md +76 -0
  103. package/vendor/raylib/SPONSORS.md +68 -0
  104. package/vendor/raylib/cmake/AddIfFlagCompiles.cmake +12 -0
  105. package/vendor/raylib/cmake/BuildOptions.cmake +18 -0
  106. package/vendor/raylib/cmake/CompileDefinitions.cmake +110 -0
  107. package/vendor/raylib/cmake/CompilerFlags.cmake +79 -0
  108. package/vendor/raylib/cmake/EnumOption.cmake +9 -0
  109. package/vendor/raylib/cmake/GlfwImport.cmake +34 -0
  110. package/vendor/raylib/cmake/InstallConfigurations.cmake +29 -0
  111. package/vendor/raylib/cmake/JoinPaths.cmake +26 -0
  112. package/vendor/raylib/cmake/LibraryConfigurations.cmake +108 -0
  113. package/vendor/raylib/cmake/LibraryPathToLinkerFlags.cmake +24 -0
  114. package/vendor/raylib/cmake/PackConfigurations.cmake +13 -0
  115. package/vendor/raylib/cmake/PopulateConfigVariablesLocally.cmake +11 -0
  116. package/vendor/raylib/cmake/raylib-config-version.cmake +21 -0
  117. package/vendor/raylib/cmake/raylib-config.cmake +76 -0
  118. package/vendor/raylib/examples/CMakeLists.txt +139 -0
  119. package/vendor/raylib/examples/Makefile +565 -0
  120. package/vendor/raylib/examples/Makefile.Android +405 -0
  121. package/vendor/raylib/examples/Makefile.Web +1053 -0
  122. package/vendor/raylib/examples/README.md +203 -0
  123. package/vendor/raylib/examples/audio/audio_module_playing.c +146 -0
  124. package/vendor/raylib/examples/audio/audio_module_playing.png +0 -0
  125. package/vendor/raylib/examples/audio/audio_multichannel_sound.c +73 -0
  126. package/vendor/raylib/examples/audio/audio_multichannel_sound.png +0 -0
  127. package/vendor/raylib/examples/audio/audio_music_stream.c +93 -0
  128. package/vendor/raylib/examples/audio/audio_music_stream.png +0 -0
  129. package/vendor/raylib/examples/audio/audio_raw_stream.c +167 -0
  130. package/vendor/raylib/examples/audio/audio_raw_stream.png +0 -0
  131. package/vendor/raylib/examples/audio/audio_sound_loading.c +64 -0
  132. package/vendor/raylib/examples/audio/audio_sound_loading.png +0 -0
  133. package/vendor/raylib/examples/audio/resources/LICENSE.md +10 -0
  134. package/vendor/raylib/examples/audio/resources/coin.wav +0 -0
  135. package/vendor/raylib/examples/audio/resources/country.mp3 +0 -0
  136. package/vendor/raylib/examples/audio/resources/mini1111.xm +0 -0
  137. package/vendor/raylib/examples/audio/resources/sound.wav +0 -0
  138. package/vendor/raylib/examples/audio/resources/spring.wav +0 -0
  139. package/vendor/raylib/examples/audio/resources/target.flac +0 -0
  140. package/vendor/raylib/examples/audio/resources/target.ogg +0 -0
  141. package/vendor/raylib/examples/audio/resources/weird.wav +0 -0
  142. package/vendor/raylib/examples/build.zig +86 -0
  143. package/vendor/raylib/examples/core/core_2d_camera.c +132 -0
  144. package/vendor/raylib/examples/core/core_2d_camera.png +0 -0
  145. package/vendor/raylib/examples/core/core_2d_camera_platformer.c +293 -0
  146. package/vendor/raylib/examples/core/core_2d_camera_platformer.png +0 -0
  147. package/vendor/raylib/examples/core/core_2d_camera_smooth_pixelperfect.png +0 -0
  148. package/vendor/raylib/examples/core/core_3d_camera_first_person.c +97 -0
  149. package/vendor/raylib/examples/core/core_3d_camera_first_person.png +0 -0
  150. package/vendor/raylib/examples/core/core_3d_camera_free.c +83 -0
  151. package/vendor/raylib/examples/core/core_3d_camera_free.png +0 -0
  152. package/vendor/raylib/examples/core/core_3d_camera_mode.c +73 -0
  153. package/vendor/raylib/examples/core/core_3d_camera_mode.png +0 -0
  154. package/vendor/raylib/examples/core/core_3d_picking.c +107 -0
  155. package/vendor/raylib/examples/core/core_3d_picking.png +0 -0
  156. package/vendor/raylib/examples/core/core_basic_screen_manager.c +150 -0
  157. package/vendor/raylib/examples/core/core_basic_screen_manager.png +0 -0
  158. package/vendor/raylib/examples/core/core_basic_window.c +62 -0
  159. package/vendor/raylib/examples/core/core_basic_window.png +0 -0
  160. package/vendor/raylib/examples/core/core_basic_window_web.c +85 -0
  161. package/vendor/raylib/examples/core/core_custom_frame_control.c +125 -0
  162. package/vendor/raylib/examples/core/core_custom_frame_control.png +0 -0
  163. package/vendor/raylib/examples/core/core_custom_logging.c +84 -0
  164. package/vendor/raylib/examples/core/core_custom_logging.png +0 -0
  165. package/vendor/raylib/examples/core/core_drop_files.c +76 -0
  166. package/vendor/raylib/examples/core/core_drop_files.png +0 -0
  167. package/vendor/raylib/examples/core/core_input_gamepad.c +195 -0
  168. package/vendor/raylib/examples/core/core_input_gamepad.png +0 -0
  169. package/vendor/raylib/examples/core/core_input_gestures.c +115 -0
  170. package/vendor/raylib/examples/core/core_input_gestures.png +0 -0
  171. package/vendor/raylib/examples/core/core_input_keys.c +59 -0
  172. package/vendor/raylib/examples/core/core_input_keys.png +0 -0
  173. package/vendor/raylib/examples/core/core_input_mouse.c +65 -0
  174. package/vendor/raylib/examples/core/core_input_mouse.png +0 -0
  175. package/vendor/raylib/examples/core/core_input_mouse_wheel.c +58 -0
  176. package/vendor/raylib/examples/core/core_input_mouse_wheel.png +0 -0
  177. package/vendor/raylib/examples/core/core_input_multitouch.c +70 -0
  178. package/vendor/raylib/examples/core/core_input_multitouch.png +0 -0
  179. package/vendor/raylib/examples/core/core_loading_thread.c +147 -0
  180. package/vendor/raylib/examples/core/core_loading_thread.png +0 -0
  181. package/vendor/raylib/examples/core/core_quat_conversion.c +132 -0
  182. package/vendor/raylib/examples/core/core_quat_conversion.png +0 -0
  183. package/vendor/raylib/examples/core/core_random_values.c +67 -0
  184. package/vendor/raylib/examples/core/core_random_values.png +0 -0
  185. package/vendor/raylib/examples/core/core_scissor_test.c +71 -0
  186. package/vendor/raylib/examples/core/core_scissor_test.png +0 -0
  187. package/vendor/raylib/examples/core/core_smooth_pixelperfect.c +117 -0
  188. package/vendor/raylib/examples/core/core_smooth_pixelperfect.png +0 -0
  189. package/vendor/raylib/examples/core/core_split_screen.c +155 -0
  190. package/vendor/raylib/examples/core/core_split_screen.png +0 -0
  191. package/vendor/raylib/examples/core/core_storage_values.c +87 -0
  192. package/vendor/raylib/examples/core/core_storage_values.png +0 -0
  193. package/vendor/raylib/examples/core/core_vr_simulator.c +143 -0
  194. package/vendor/raylib/examples/core/core_vr_simulator.png +0 -0
  195. package/vendor/raylib/examples/core/core_window_flags.c +191 -0
  196. package/vendor/raylib/examples/core/core_window_flags.png +0 -0
  197. package/vendor/raylib/examples/core/core_window_letterbox.c +112 -0
  198. package/vendor/raylib/examples/core/core_window_letterbox.png +0 -0
  199. package/vendor/raylib/examples/core/core_world_screen.c +78 -0
  200. package/vendor/raylib/examples/core/core_world_screen.png +0 -0
  201. package/vendor/raylib/examples/core/resources/LICENSE.md +4 -0
  202. package/vendor/raylib/examples/core/resources/distortion100.fs +52 -0
  203. package/vendor/raylib/examples/core/resources/distortion330.fs +53 -0
  204. package/vendor/raylib/examples/core/resources/ps3.png +0 -0
  205. package/vendor/raylib/examples/core/resources/xbox.png +0 -0
  206. package/vendor/raylib/examples/examples_template.c +100 -0
  207. package/vendor/raylib/examples/models/models_animation.c +114 -0
  208. package/vendor/raylib/examples/models/models_animation.png +0 -0
  209. package/vendor/raylib/examples/models/models_billboard.c +75 -0
  210. package/vendor/raylib/examples/models/models_billboard.png +0 -0
  211. package/vendor/raylib/examples/models/models_box_collisions.c +121 -0
  212. package/vendor/raylib/examples/models/models_box_collisions.png +0 -0
  213. package/vendor/raylib/examples/models/models_cubicmap.c +87 -0
  214. package/vendor/raylib/examples/models/models_cubicmap.png +0 -0
  215. package/vendor/raylib/examples/models/models_first_person_maze.c +122 -0
  216. package/vendor/raylib/examples/models/models_first_person_maze.png +0 -0
  217. package/vendor/raylib/examples/models/models_geometric_shapes.c +80 -0
  218. package/vendor/raylib/examples/models/models_geometric_shapes.png +0 -0
  219. package/vendor/raylib/examples/models/models_heightmap.c +82 -0
  220. package/vendor/raylib/examples/models/models_heightmap.png +0 -0
  221. package/vendor/raylib/examples/models/models_loading.c +146 -0
  222. package/vendor/raylib/examples/models/models_loading.png +0 -0
  223. package/vendor/raylib/examples/models/models_loading_gltf.c +105 -0
  224. package/vendor/raylib/examples/models/models_loading_gltf.png +0 -0
  225. package/vendor/raylib/examples/models/models_loading_vox.c +130 -0
  226. package/vendor/raylib/examples/models/models_loading_vox.png +0 -0
  227. package/vendor/raylib/examples/models/models_mesh_generation.c +179 -0
  228. package/vendor/raylib/examples/models/models_mesh_generation.png +0 -0
  229. package/vendor/raylib/examples/models/models_mesh_picking.c +223 -0
  230. package/vendor/raylib/examples/models/models_mesh_picking.png +0 -0
  231. package/vendor/raylib/examples/models/models_orthographic_projection.c +99 -0
  232. package/vendor/raylib/examples/models/models_orthographic_projection.png +0 -0
  233. package/vendor/raylib/examples/models/models_rlgl_solar_system.c +172 -0
  234. package/vendor/raylib/examples/models/models_rlgl_solar_system.png +0 -0
  235. package/vendor/raylib/examples/models/models_skybox.c +262 -0
  236. package/vendor/raylib/examples/models/models_skybox.png +0 -0
  237. package/vendor/raylib/examples/models/models_waving_cubes.c +112 -0
  238. package/vendor/raylib/examples/models/models_waving_cubes.png +0 -0
  239. package/vendor/raylib/examples/models/models_yaw_pitch_roll.c +117 -0
  240. package/vendor/raylib/examples/models/models_yaw_pitch_roll.png +0 -0
  241. package/vendor/raylib/examples/models/resources/LICENSE.md +23 -0
  242. package/vendor/raylib/examples/models/resources/billboard.png +0 -0
  243. package/vendor/raylib/examples/models/resources/cubicmap.png +0 -0
  244. package/vendor/raylib/examples/models/resources/cubicmap_atlas.png +0 -0
  245. package/vendor/raylib/examples/models/resources/dresden_square_1k.hdr +0 -0
  246. package/vendor/raylib/examples/models/resources/dresden_square_2k.hdr +0 -0
  247. package/vendor/raylib/examples/models/resources/heightmap.png +0 -0
  248. package/vendor/raylib/examples/models/resources/models/gltf/AnimatedMorphCube.glb +0 -0
  249. package/vendor/raylib/examples/models/resources/models/gltf/AnimatedTriangle.gltf +118 -0
  250. package/vendor/raylib/examples/models/resources/models/gltf/BoxAnimated.glb +0 -0
  251. package/vendor/raylib/examples/models/resources/models/gltf/LICENSE +23 -0
  252. package/vendor/raylib/examples/models/resources/models/gltf/girl.glb +0 -0
  253. package/vendor/raylib/examples/models/resources/models/gltf/raylib_32x32.glb +0 -0
  254. package/vendor/raylib/examples/models/resources/models/gltf/rigged_figure.glb +0 -0
  255. package/vendor/raylib/examples/models/resources/models/gltf/vertex_colored_object.glb +0 -0
  256. package/vendor/raylib/examples/models/resources/models/iqm/guy.blend +0 -0
  257. package/vendor/raylib/examples/models/resources/models/iqm/guy.iqm +0 -0
  258. package/vendor/raylib/examples/models/resources/models/iqm/guyanim.iqm +0 -0
  259. package/vendor/raylib/examples/models/resources/models/iqm/guytex.png +0 -0
  260. package/vendor/raylib/examples/models/resources/models/iqm/vertex_colored_object.iqm +0 -0
  261. package/vendor/raylib/examples/models/resources/models/obj/bridge.obj +1725 -0
  262. package/vendor/raylib/examples/models/resources/models/obj/bridge_diffuse.png +0 -0
  263. package/vendor/raylib/examples/models/resources/models/obj/castle.obj +12919 -0
  264. package/vendor/raylib/examples/models/resources/models/obj/castle_diffuse.png +0 -0
  265. package/vendor/raylib/examples/models/resources/models/obj/cube.obj +68 -0
  266. package/vendor/raylib/examples/models/resources/models/obj/cube_diffuse.png +0 -0
  267. package/vendor/raylib/examples/models/resources/models/obj/house.obj +4564 -0
  268. package/vendor/raylib/examples/models/resources/models/obj/house_diffuse.png +0 -0
  269. package/vendor/raylib/examples/models/resources/models/obj/market.obj +7301 -0
  270. package/vendor/raylib/examples/models/resources/models/obj/market_diffuse.png +0 -0
  271. package/vendor/raylib/examples/models/resources/models/obj/plane.obj +10858 -0
  272. package/vendor/raylib/examples/models/resources/models/obj/plane_diffuse.png +0 -0
  273. package/vendor/raylib/examples/models/resources/models/obj/turret.obj +1888 -0
  274. package/vendor/raylib/examples/models/resources/models/obj/turret_diffuse.png +0 -0
  275. package/vendor/raylib/examples/models/resources/models/obj/well.obj +1030 -0
  276. package/vendor/raylib/examples/models/resources/models/obj/well_diffuse.png +0 -0
  277. package/vendor/raylib/examples/models/resources/models/vox/LICENSE +9 -0
  278. package/vendor/raylib/examples/models/resources/models/vox/chr_knight.vox +0 -0
  279. package/vendor/raylib/examples/models/resources/models/vox/chr_sword.vox +0 -0
  280. package/vendor/raylib/examples/models/resources/models/vox/monu9.vox +0 -0
  281. package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.fs +29 -0
  282. package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.vs +20 -0
  283. package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.fs +31 -0
  284. package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.vs +24 -0
  285. package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.fs +30 -0
  286. package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.vs +20 -0
  287. package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.fs +30 -0
  288. package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.vs +24 -0
  289. package/vendor/raylib/examples/models/resources/skybox.png +0 -0
  290. package/vendor/raylib/examples/models/rlights.h +183 -0
  291. package/vendor/raylib/examples/others/easings.h +263 -0
  292. package/vendor/raylib/examples/others/easings_testbed.c +227 -0
  293. package/vendor/raylib/examples/others/embedded_files_loading.c +103 -0
  294. package/vendor/raylib/examples/others/external/include/GLFW/glfw3.h +5538 -0
  295. package/vendor/raylib/examples/others/external/include/GLFW/glfw3native.h +572 -0
  296. package/vendor/raylib/examples/others/external/include/glad.h +5466 -0
  297. package/vendor/raylib/examples/others/external/lib/libglfw3.a +0 -0
  298. package/vendor/raylib/examples/others/raudio_standalone.c +152 -0
  299. package/vendor/raylib/examples/others/raylib_opengl_interop.c +152 -0
  300. package/vendor/raylib/examples/others/raylib_opengl_interop.png +0 -0
  301. package/vendor/raylib/examples/others/resources/audio/country.mp3 +0 -0
  302. package/vendor/raylib/examples/others/resources/audio/target.ogg +0 -0
  303. package/vendor/raylib/examples/others/resources/audio/weird.wav +0 -0
  304. package/vendor/raylib/examples/others/resources/audio_data.h +4893 -0
  305. package/vendor/raylib/examples/others/resources/image_data.h +9848 -0
  306. package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.fs +16 -0
  307. package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.vs +24 -0
  308. package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.fs +17 -0
  309. package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.vs +24 -0
  310. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol.glsl +41 -0
  311. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_render.glsl +29 -0
  312. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_transfert.glsl +51 -0
  313. package/vendor/raylib/examples/others/rlgl_compute_shader.c +173 -0
  314. package/vendor/raylib/examples/others/rlgl_standalone.c +469 -0
  315. package/vendor/raylib/examples/physics/physics_demo.c +128 -0
  316. package/vendor/raylib/examples/physics/physics_demo.png +0 -0
  317. package/vendor/raylib/examples/physics/physics_friction.c +142 -0
  318. package/vendor/raylib/examples/physics/physics_friction.png +0 -0
  319. package/vendor/raylib/examples/physics/physics_movement.c +128 -0
  320. package/vendor/raylib/examples/physics/physics_movement.png +0 -0
  321. package/vendor/raylib/examples/physics/physics_restitution.c +129 -0
  322. package/vendor/raylib/examples/physics/physics_restitution.png +0 -0
  323. package/vendor/raylib/examples/physics/physics_shatter.c +111 -0
  324. package/vendor/raylib/examples/physics/physics_shatter.png +0 -0
  325. package/vendor/raylib/examples/raylib_compile_execute.bat +32 -0
  326. package/vendor/raylib/examples/raylib_makefile_example.bat +27 -0
  327. package/vendor/raylib/examples/shaders/resources/LICENSE.md +11 -0
  328. package/vendor/raylib/examples/shaders/resources/fudesumi.png +0 -0
  329. package/vendor/raylib/examples/shaders/resources/mask.png +0 -0
  330. package/vendor/raylib/examples/shaders/resources/models/barracks.obj +22251 -0
  331. package/vendor/raylib/examples/shaders/resources/models/barracks_diffuse.png +0 -0
  332. package/vendor/raylib/examples/shaders/resources/models/church.obj +5116 -0
  333. package/vendor/raylib/examples/shaders/resources/models/church_diffuse.png +0 -0
  334. package/vendor/raylib/examples/shaders/resources/models/watermill.obj +5316 -0
  335. package/vendor/raylib/examples/shaders/resources/models/watermill_diffuse.png +0 -0
  336. package/vendor/raylib/examples/shaders/resources/plasma.png +0 -0
  337. package/vendor/raylib/examples/shaders/resources/raysan.png +0 -0
  338. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.fs +23 -0
  339. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.vs +26 -0
  340. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting.vs +59 -0
  341. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting_instanced.vs +36 -0
  342. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/bloom.fs +39 -0
  343. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/blur.fs +34 -0
  344. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/color_mix.fs +26 -0
  345. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_hatching.fs +47 -0
  346. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_stitching.fs +57 -0
  347. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cubes_panning.fs +60 -0
  348. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/depth.fs +26 -0
  349. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/distortion.fs +54 -0
  350. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/dream_vision.fs +37 -0
  351. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/eratosthenes.fs +60 -0
  352. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fisheye.fs +43 -0
  353. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fog.fs +94 -0
  354. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/grayscale.fs +25 -0
  355. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs +83 -0
  356. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs +81 -0
  357. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/mask.fs +24 -0
  358. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/outline.fs +34 -0
  359. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/palette_switch.fs +41 -0
  360. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/pixelizer.fs +32 -0
  361. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/posterization.fs +29 -0
  362. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/predator.fs +31 -0
  363. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/raymarching.fs +431 -0
  364. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/reload.fs +39 -0
  365. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/scanlines.fs +44 -0
  366. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/sobel.fs +40 -0
  367. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/spotlight.fs +77 -0
  368. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs +46 -0
  369. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/wave.fs +36 -0
  370. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.fs +22 -0
  371. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.vs +26 -0
  372. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base_lighting.vs +59 -0
  373. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/bloom.fs +37 -0
  374. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/blur.fs +32 -0
  375. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_hatching.fs +45 -0
  376. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_stitching.fs +55 -0
  377. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/distortion.fs +52 -0
  378. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/dream_vision.fs +35 -0
  379. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fisheye.fs +41 -0
  380. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fog.fs +92 -0
  381. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/grayscale.fs +23 -0
  382. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/palette_switch.fs +27 -0
  383. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/pixelizer.fs +30 -0
  384. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/posterization.fs +27 -0
  385. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/predator.fs +29 -0
  386. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/scanlines.fs +42 -0
  387. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/sobel.fs +38 -0
  388. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/swirl.fs +44 -0
  389. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.fs +25 -0
  390. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.vs +26 -0
  391. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting.vs +32 -0
  392. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting_instanced.vs +36 -0
  393. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/bloom.fs +40 -0
  394. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/blur.fs +35 -0
  395. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/color_mix.fs +27 -0
  396. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_hatching.fs +48 -0
  397. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_stitching.fs +59 -0
  398. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cubes_panning.fs +61 -0
  399. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/depth.fs +27 -0
  400. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/distortion.fs +56 -0
  401. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/dream_vision.fs +34 -0
  402. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/eratosthenes.fs +59 -0
  403. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fisheye.fs +40 -0
  404. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fog.fs +95 -0
  405. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/grayscale.fs +26 -0
  406. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs +81 -0
  407. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs +82 -0
  408. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/mask.fs +22 -0
  409. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/outline.fs +35 -0
  410. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/overdraw.fs +26 -0
  411. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/palette_switch.fs +30 -0
  412. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/pixelizer.fs +33 -0
  413. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/posterization.fs +31 -0
  414. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/predator.fs +32 -0
  415. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/raymarching.fs +430 -0
  416. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/reload.fs +40 -0
  417. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/scanlines.fs +49 -0
  418. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/sobel.fs +41 -0
  419. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/spotlight.fs +65 -0
  420. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/swirl.fs +47 -0
  421. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/wave.fs +37 -0
  422. package/vendor/raylib/examples/shaders/resources/space.png +0 -0
  423. package/vendor/raylib/examples/shaders/resources/texel_checker.png +0 -0
  424. package/vendor/raylib/examples/shaders/rlights.h +183 -0
  425. package/vendor/raylib/examples/shaders/shaders_basic_lighting.c +152 -0
  426. package/vendor/raylib/examples/shaders/shaders_basic_lighting.png +0 -0
  427. package/vendor/raylib/examples/shaders/shaders_custom_uniform.c +127 -0
  428. package/vendor/raylib/examples/shaders/shaders_custom_uniform.png +0 -0
  429. package/vendor/raylib/examples/shaders/shaders_eratosthenes.c +92 -0
  430. package/vendor/raylib/examples/shaders/shaders_eratosthenes.png +0 -0
  431. package/vendor/raylib/examples/shaders/shaders_fog.c +160 -0
  432. package/vendor/raylib/examples/shaders/shaders_fog.png +0 -0
  433. package/vendor/raylib/examples/shaders/shaders_hot_reloading.c +130 -0
  434. package/vendor/raylib/examples/shaders/shaders_hot_reloading.png +0 -0
  435. package/vendor/raylib/examples/shaders/shaders_julia_set.c +191 -0
  436. package/vendor/raylib/examples/shaders/shaders_julia_set.png +0 -0
  437. package/vendor/raylib/examples/shaders/shaders_mesh_instancing.c +224 -0
  438. package/vendor/raylib/examples/shaders/shaders_mesh_instancing.png +0 -0
  439. package/vendor/raylib/examples/shaders/shaders_model_shader.c +103 -0
  440. package/vendor/raylib/examples/shaders/shaders_model_shader.png +0 -0
  441. package/vendor/raylib/examples/shaders/shaders_multi_sample2d.c +105 -0
  442. package/vendor/raylib/examples/shaders/shaders_multi_sample2d.png +0 -0
  443. package/vendor/raylib/examples/shaders/shaders_palette_switch.c +147 -0
  444. package/vendor/raylib/examples/shaders/shaders_palette_switch.png +0 -0
  445. package/vendor/raylib/examples/shaders/shaders_postprocessing.c +170 -0
  446. package/vendor/raylib/examples/shaders/shaders_postprocessing.png +0 -0
  447. package/vendor/raylib/examples/shaders/shaders_raymarching.c +113 -0
  448. package/vendor/raylib/examples/shaders/shaders_raymarching.png +0 -0
  449. package/vendor/raylib/examples/shaders/shaders_shapes_textures.c +116 -0
  450. package/vendor/raylib/examples/shaders/shaders_shapes_textures.png +0 -0
  451. package/vendor/raylib/examples/shaders/shaders_simple_mask.c +144 -0
  452. package/vendor/raylib/examples/shaders/shaders_simple_mask.png +0 -0
  453. package/vendor/raylib/examples/shaders/shaders_spotlight.c +254 -0
  454. package/vendor/raylib/examples/shaders/shaders_spotlight.png +0 -0
  455. package/vendor/raylib/examples/shaders/shaders_texture_drawing.c +80 -0
  456. package/vendor/raylib/examples/shaders/shaders_texture_drawing.png +0 -0
  457. package/vendor/raylib/examples/shaders/shaders_texture_outline.c +97 -0
  458. package/vendor/raylib/examples/shaders/shaders_texture_outline.png +0 -0
  459. package/vendor/raylib/examples/shaders/shaders_texture_waves.c +110 -0
  460. package/vendor/raylib/examples/shaders/shaders_texture_waves.png +0 -0
  461. package/vendor/raylib/examples/shapes/shapes_basic_shapes.c +78 -0
  462. package/vendor/raylib/examples/shapes/shapes_basic_shapes.png +0 -0
  463. package/vendor/raylib/examples/shapes/shapes_bouncing_ball.c +76 -0
  464. package/vendor/raylib/examples/shapes/shapes_bouncing_ball.png +0 -0
  465. package/vendor/raylib/examples/shapes/shapes_collision_area.c +108 -0
  466. package/vendor/raylib/examples/shapes/shapes_collision_area.png +0 -0
  467. package/vendor/raylib/examples/shapes/shapes_colors_palette.c +99 -0
  468. package/vendor/raylib/examples/shapes/shapes_colors_palette.png +0 -0
  469. package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.c +83 -0
  470. package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.png +0 -0
  471. package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.c +89 -0
  472. package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.png +0 -0
  473. package/vendor/raylib/examples/shapes/shapes_draw_ring.c +96 -0
  474. package/vendor/raylib/examples/shapes/shapes_draw_ring.png +0 -0
  475. package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.c +110 -0
  476. package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.png +0 -0
  477. package/vendor/raylib/examples/shapes/shapes_easings_box_anim.c +136 -0
  478. package/vendor/raylib/examples/shapes/shapes_easings_box_anim.png +0 -0
  479. package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.c +118 -0
  480. package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.png +0 -0
  481. package/vendor/raylib/examples/shapes/shapes_following_eyes.c +104 -0
  482. package/vendor/raylib/examples/shapes/shapes_following_eyes.png +0 -0
  483. package/vendor/raylib/examples/shapes/shapes_lines_bezier.c +59 -0
  484. package/vendor/raylib/examples/shapes/shapes_lines_bezier.png +0 -0
  485. package/vendor/raylib/examples/shapes/shapes_logo_raylib.c +56 -0
  486. package/vendor/raylib/examples/shapes/shapes_logo_raylib.png +0 -0
  487. package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.c +160 -0
  488. package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.png +0 -0
  489. package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.c +94 -0
  490. package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.png +0 -0
  491. package/vendor/raylib/examples/text/resources/KAISG.ttf +0 -0
  492. package/vendor/raylib/examples/text/resources/LICENSE.md +20 -0
  493. package/vendor/raylib/examples/text/resources/anonymous_pro_bold.ttf +0 -0
  494. package/vendor/raylib/examples/text/resources/custom_alagard.png +0 -0
  495. package/vendor/raylib/examples/text/resources/custom_jupiter_crash.png +0 -0
  496. package/vendor/raylib/examples/text/resources/custom_mecha.png +0 -0
  497. package/vendor/raylib/examples/text/resources/dejavu.fnt +1115 -0
  498. package/vendor/raylib/examples/text/resources/dejavu.png +0 -0
  499. package/vendor/raylib/examples/text/resources/fonts/alagard.png +0 -0
  500. package/vendor/raylib/examples/text/resources/fonts/alpha_beta.png +0 -0
  501. package/vendor/raylib/examples/text/resources/fonts/jupiter_crash.png +0 -0
  502. package/vendor/raylib/examples/text/resources/fonts/mecha.png +0 -0
  503. package/vendor/raylib/examples/text/resources/fonts/pixantiqua.png +0 -0
  504. package/vendor/raylib/examples/text/resources/fonts/pixelplay.png +0 -0
  505. package/vendor/raylib/examples/text/resources/fonts/romulus.png +0 -0
  506. package/vendor/raylib/examples/text/resources/fonts/setback.png +0 -0
  507. package/vendor/raylib/examples/text/resources/noto_cjk.fnt +580 -0
  508. package/vendor/raylib/examples/text/resources/noto_cjk.png +0 -0
  509. package/vendor/raylib/examples/text/resources/pixantiqua.fnt +188 -0
  510. package/vendor/raylib/examples/text/resources/pixantiqua.png +0 -0
  511. package/vendor/raylib/examples/text/resources/pixantiqua.ttf +0 -0
  512. package/vendor/raylib/examples/text/resources/shaders/glsl100/alpha_discard.fs +20 -0
  513. package/vendor/raylib/examples/text/resources/shaders/glsl100/sdf.fs +25 -0
  514. package/vendor/raylib/examples/text/resources/shaders/glsl330/alpha_discard.fs +19 -0
  515. package/vendor/raylib/examples/text/resources/shaders/glsl330/sdf.fs +26 -0
  516. package/vendor/raylib/examples/text/resources/symbola.fnt +191 -0
  517. package/vendor/raylib/examples/text/resources/symbola.png +0 -0
  518. package/vendor/raylib/examples/text/text_draw_3d.c +739 -0
  519. package/vendor/raylib/examples/text/text_draw_3d.png +0 -0
  520. package/vendor/raylib/examples/text/text_font_filters.c +134 -0
  521. package/vendor/raylib/examples/text/text_font_filters.png +0 -0
  522. package/vendor/raylib/examples/text/text_font_loading.c +91 -0
  523. package/vendor/raylib/examples/text/text_font_loading.png +0 -0
  524. package/vendor/raylib/examples/text/text_font_sdf.c +141 -0
  525. package/vendor/raylib/examples/text/text_font_sdf.png +0 -0
  526. package/vendor/raylib/examples/text/text_font_spritefont.c +85 -0
  527. package/vendor/raylib/examples/text/text_font_spritefont.png +0 -0
  528. package/vendor/raylib/examples/text/text_format_text.c +62 -0
  529. package/vendor/raylib/examples/text/text_format_text.png +0 -0
  530. package/vendor/raylib/examples/text/text_input_box.c +127 -0
  531. package/vendor/raylib/examples/text/text_input_box.png +0 -0
  532. package/vendor/raylib/examples/text/text_raylib_fonts.c +105 -0
  533. package/vendor/raylib/examples/text/text_raylib_fonts.png +0 -0
  534. package/vendor/raylib/examples/text/text_rectangle_bounds.c +264 -0
  535. package/vendor/raylib/examples/text/text_rectangle_bounds.png +0 -0
  536. package/vendor/raylib/examples/text/text_unicode.c +465 -0
  537. package/vendor/raylib/examples/text/text_unicode.png +0 -0
  538. package/vendor/raylib/examples/text/text_writing_anim.c +62 -0
  539. package/vendor/raylib/examples/text/text_writing_anim.png +0 -0
  540. package/vendor/raylib/examples/textures/resources/KAISG.ttf +0 -0
  541. package/vendor/raylib/examples/textures/resources/LICENSE.md +18 -0
  542. package/vendor/raylib/examples/textures/resources/boom.wav +0 -0
  543. package/vendor/raylib/examples/textures/resources/button.png +0 -0
  544. package/vendor/raylib/examples/textures/resources/buttonfx.wav +0 -0
  545. package/vendor/raylib/examples/textures/resources/cat.png +0 -0
  546. package/vendor/raylib/examples/textures/resources/custom_jupiter_crash.png +0 -0
  547. package/vendor/raylib/examples/textures/resources/cyberpunk_street_background.png +0 -0
  548. package/vendor/raylib/examples/textures/resources/cyberpunk_street_foreground.png +0 -0
  549. package/vendor/raylib/examples/textures/resources/cyberpunk_street_midground.png +0 -0
  550. package/vendor/raylib/examples/textures/resources/explosion.png +0 -0
  551. package/vendor/raylib/examples/textures/resources/fudesumi.png +0 -0
  552. package/vendor/raylib/examples/textures/resources/fudesumi.raw +0 -0
  553. package/vendor/raylib/examples/textures/resources/ninepatch_button.png +0 -0
  554. package/vendor/raylib/examples/textures/resources/parrots.png +0 -0
  555. package/vendor/raylib/examples/textures/resources/patterns.png +0 -0
  556. package/vendor/raylib/examples/textures/resources/raylib_logo.png +0 -0
  557. package/vendor/raylib/examples/textures/resources/scarfy.png +0 -0
  558. package/vendor/raylib/examples/textures/resources/spark_flame.png +0 -0
  559. package/vendor/raylib/examples/textures/resources/wabbit_alpha.png +0 -0
  560. package/vendor/raylib/examples/textures/textures_background_scrolling.c +87 -0
  561. package/vendor/raylib/examples/textures/textures_background_scrolling.png +0 -0
  562. package/vendor/raylib/examples/textures/textures_blend_modes.c +93 -0
  563. package/vendor/raylib/examples/textures/textures_blend_modes.png +0 -0
  564. package/vendor/raylib/examples/textures/textures_bunnymark.c +120 -0
  565. package/vendor/raylib/examples/textures/textures_bunnymark.png +0 -0
  566. package/vendor/raylib/examples/textures/textures_draw_tiled.c +165 -0
  567. package/vendor/raylib/examples/textures/textures_draw_tiled.png +0 -0
  568. package/vendor/raylib/examples/textures/textures_image_drawing.c +91 -0
  569. package/vendor/raylib/examples/textures/textures_image_drawing.png +0 -0
  570. package/vendor/raylib/examples/textures/textures_image_generation.c +102 -0
  571. package/vendor/raylib/examples/textures/textures_image_generation.png +0 -0
  572. package/vendor/raylib/examples/textures/textures_image_loading.c +64 -0
  573. package/vendor/raylib/examples/textures/textures_image_loading.png +0 -0
  574. package/vendor/raylib/examples/textures/textures_image_processing.c +169 -0
  575. package/vendor/raylib/examples/textures/textures_image_processing.png +0 -0
  576. package/vendor/raylib/examples/textures/textures_image_text.c +83 -0
  577. package/vendor/raylib/examples/textures/textures_image_text.png +0 -0
  578. package/vendor/raylib/examples/textures/textures_logo_raylib.c +57 -0
  579. package/vendor/raylib/examples/textures/textures_logo_raylib.png +0 -0
  580. package/vendor/raylib/examples/textures/textures_mouse_painting.c +221 -0
  581. package/vendor/raylib/examples/textures/textures_mouse_painting.png +0 -0
  582. package/vendor/raylib/examples/textures/textures_npatch_drawing.c +109 -0
  583. package/vendor/raylib/examples/textures/textures_npatch_drawing.png +0 -0
  584. package/vendor/raylib/examples/textures/textures_particles_blending.c +135 -0
  585. package/vendor/raylib/examples/textures/textures_particles_blending.png +0 -0
  586. package/vendor/raylib/examples/textures/textures_polygon.c +100 -0
  587. package/vendor/raylib/examples/textures/textures_polygon.png +0 -0
  588. package/vendor/raylib/examples/textures/textures_raw_data.c +99 -0
  589. package/vendor/raylib/examples/textures/textures_raw_data.png +0 -0
  590. package/vendor/raylib/examples/textures/textures_rectangle.c +99 -0
  591. package/vendor/raylib/examples/textures/textures_rectangle.png +0 -0
  592. package/vendor/raylib/examples/textures/textures_sprite_button.c +97 -0
  593. package/vendor/raylib/examples/textures/textures_sprite_button.png +0 -0
  594. package/vendor/raylib/examples/textures/textures_sprite_explosion.c +120 -0
  595. package/vendor/raylib/examples/textures/textures_sprite_explosion.png +0 -0
  596. package/vendor/raylib/examples/textures/textures_srcrec_dstrec.c +82 -0
  597. package/vendor/raylib/examples/textures/textures_srcrec_dstrec.png +0 -0
  598. package/vendor/raylib/examples/textures/textures_to_image.c +68 -0
  599. package/vendor/raylib/examples/textures/textures_to_image.png +0 -0
  600. package/vendor/raylib/logo/raylib.ico +0 -0
  601. package/vendor/raylib/logo/raylib_128x128.png +0 -0
  602. package/vendor/raylib/logo/raylib_144x144.png +0 -0
  603. package/vendor/raylib/logo/raylib_16x16.png +0 -0
  604. package/vendor/raylib/logo/raylib_180x180.png +0 -0
  605. package/vendor/raylib/logo/raylib_24x24.png +0 -0
  606. package/vendor/raylib/logo/raylib_256x256.png +0 -0
  607. package/vendor/raylib/logo/raylib_32x32.png +0 -0
  608. package/vendor/raylib/logo/raylib_36x36.png +0 -0
  609. package/vendor/raylib/logo/raylib_48x48.png +0 -0
  610. package/vendor/raylib/logo/raylib_512x512.png +0 -0
  611. package/vendor/raylib/logo/raylib_64x64.png +0 -0
  612. package/vendor/raylib/logo/raylib_72x72.png +0 -0
  613. package/vendor/raylib/logo/raylib_96x96.png +0 -0
  614. package/vendor/raylib/logo/raylib_logo_animation.gif +0 -0
  615. package/vendor/raylib/parser/LICENSE +16 -0
  616. package/vendor/raylib/parser/README.md +63 -0
  617. package/vendor/raylib/parser/raylib_api.json +6668 -0
  618. package/vendor/raylib/parser/raylib_api.txt +3568 -0
  619. package/vendor/raylib/parser/raylib_api.xml +2509 -0
  620. package/vendor/raylib/parser/raylib_parser.c +1003 -0
  621. package/vendor/raylib/projects/4coder/Makefile +401 -0
  622. package/vendor/raylib/projects/4coder/Makefile.Android +300 -0
  623. package/vendor/raylib/projects/4coder/main.c +39 -0
  624. package/vendor/raylib/projects/4coder/project.4coder +54 -0
  625. package/vendor/raylib/projects/Builder/README.md +24 -0
  626. package/vendor/raylib/projects/Builder/examples/README.md +1 -0
  627. package/vendor/raylib/projects/Builder/examples/meson.build +25 -0
  628. package/vendor/raylib/projects/Builder/meson.build +25 -0
  629. package/vendor/raylib/projects/CMake/CMakeLists.txt +44 -0
  630. package/vendor/raylib/projects/CMake/core_basic_window.c +62 -0
  631. package/vendor/raylib/projects/CodeBlocks/README.md +22 -0
  632. package/vendor/raylib/projects/CodeBlocks/compiler_settings.png +0 -0
  633. package/vendor/raylib/projects/CodeBlocks/core_basic_window.c +58 -0
  634. package/vendor/raylib/projects/CodeBlocks/core_basic_window.cbp +137 -0
  635. package/vendor/raylib/projects/Geany/core_basic_window.c +52 -0
  636. package/vendor/raylib/projects/Geany/raylib.c.tags +452 -0
  637. package/vendor/raylib/projects/Geany/raylib_compile_execute.bat +21 -0
  638. package/vendor/raylib/projects/Geany/raylib_compile_sources.bat +42 -0
  639. package/vendor/raylib/projects/Geany/raylib_project.geany +41 -0
  640. package/vendor/raylib/projects/Notepad++/README.md +19 -0
  641. package/vendor/raylib/projects/Notepad++/c_raylib.xml +3104 -0
  642. package/vendor/raylib/projects/Notepad++/npes_saved_mingw.txt +0 -0
  643. package/vendor/raylib/projects/Notepad++/npes_saved_tcc.txt +0 -0
  644. package/vendor/raylib/projects/Notepad++/npes_saved_w64devkit.txt +0 -0
  645. package/vendor/raylib/projects/Notepad++/npes_saved_zig.txt +0 -0
  646. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp.xml +3060 -0
  647. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp_parser.c +150 -0
  648. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h +631 -0
  649. package/vendor/raylib/projects/README.md +18 -0
  650. package/vendor/raylib/projects/SublimeText/README.md +13 -0
  651. package/vendor/raylib/projects/SublimeText/raylib.sublime-build +13 -0
  652. package/vendor/raylib/projects/SublimeText/raylib.sublime-project +8 -0
  653. package/vendor/raylib/projects/VS2019/raylib/raylib.rc +0 -0
  654. package/vendor/raylib/projects/VS2019/raylib/resource.h +14 -0
  655. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.c +437 -0
  656. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.h +344 -0
  657. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/main.c +64 -0
  658. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/AndroidManifest.xml +22 -0
  659. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/build.xml +90 -0
  660. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/project.properties +3 -0
  661. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/raylib_android.Packaging.androidproj +134 -0
  662. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/res/values/strings.xml +4 -0
  663. package/vendor/raylib/projects/VSCode/.vscode/c_cpp_properties.json +63 -0
  664. package/vendor/raylib/projects/VSCode/.vscode/launch.json +60 -0
  665. package/vendor/raylib/projects/VSCode/.vscode/settings.json +11 -0
  666. package/vendor/raylib/projects/VSCode/.vscode/tasks.json +71 -0
  667. package/vendor/raylib/projects/VSCode/Makefile +408 -0
  668. package/vendor/raylib/projects/VSCode/Makefile.Android +300 -0
  669. package/vendor/raylib/projects/VSCode/main.c +83 -0
  670. package/vendor/raylib/projects/VSCode/main.code-workspace +16 -0
  671. package/vendor/raylib/projects/scripts/README.md +68 -0
  672. package/vendor/raylib/projects/scripts/build-linux.sh +169 -0
  673. package/vendor/raylib/projects/scripts/build-osx.sh +171 -0
  674. package/vendor/raylib/projects/scripts/build-rpi.sh +169 -0
  675. package/vendor/raylib/projects/scripts/build-windows.bat +219 -0
  676. package/vendor/raylib/projects/scripts/core_basic_window.c +61 -0
  677. package/vendor/raylib/raylib.pc.in +13 -0
  678. package/vendor/raylib/src/CMakeLists.txt +121 -0
  679. package/vendor/raylib/src/Makefile +696 -0
  680. package/vendor/raylib/src/build.zig +60 -0
  681. package/vendor/raylib/src/config.h +230 -0
  682. package/vendor/raylib/src/external/cgltf.h +6501 -0
  683. package/vendor/raylib/src/external/dirent.h +183 -0
  684. package/vendor/raylib/src/external/dr_flac.h +12269 -0
  685. package/vendor/raylib/src/external/dr_mp3.h +4787 -0
  686. package/vendor/raylib/src/external/dr_wav.h +8019 -0
  687. package/vendor/raylib/src/external/glad.h +8640 -0
  688. package/vendor/raylib/src/external/glfw/.mailmap +10 -0
  689. package/vendor/raylib/src/external/glfw/CMake/GenerateMappings.cmake +33 -0
  690. package/vendor/raylib/src/external/glfw/CMake/Info.plist.in +38 -0
  691. package/vendor/raylib/src/external/glfw/CMake/MacOSXBundleInfo.plist.in +38 -0
  692. package/vendor/raylib/src/external/glfw/CMake/cmake_uninstall.cmake.in +29 -0
  693. package/vendor/raylib/src/external/glfw/CMake/glfw3.pc.in +13 -0
  694. package/vendor/raylib/src/external/glfw/CMake/glfw3Config.cmake.in +3 -0
  695. package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32-clang.cmake +13 -0
  696. package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32.cmake +13 -0
  697. package/vendor/raylib/src/external/glfw/CMake/modules/FindEpollShim.cmake +17 -0
  698. package/vendor/raylib/src/external/glfw/CMake/modules/FindOSMesa.cmake +18 -0
  699. package/vendor/raylib/src/external/glfw/CMake/modules/FindWaylandProtocols.cmake +26 -0
  700. package/vendor/raylib/src/external/glfw/CMake/modules/FindXKBCommon.cmake +34 -0
  701. package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32-clang.cmake +13 -0
  702. package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32.cmake +13 -0
  703. package/vendor/raylib/src/external/glfw/CMakeLists.txt +323 -0
  704. package/vendor/raylib/src/external/glfw/LICENSE.md +23 -0
  705. package/vendor/raylib/src/external/glfw/README.md +477 -0
  706. package/vendor/raylib/src/external/glfw/deps/getopt.c +230 -0
  707. package/vendor/raylib/src/external/glfw/deps/getopt.h +57 -0
  708. package/vendor/raylib/src/external/glfw/deps/glad/gl.h +3840 -0
  709. package/vendor/raylib/src/external/glfw/deps/glad/khrplatform.h +282 -0
  710. package/vendor/raylib/src/external/glfw/deps/glad/vk_platform.h +92 -0
  711. package/vendor/raylib/src/external/glfw/deps/glad/vulkan.h +3480 -0
  712. package/vendor/raylib/src/external/glfw/deps/glad_gl.c +1791 -0
  713. package/vendor/raylib/src/external/glfw/deps/glad_vulkan.c +593 -0
  714. package/vendor/raylib/src/external/glfw/deps/mingw/_mingw_dxhelper.h +117 -0
  715. package/vendor/raylib/src/external/glfw/deps/mingw/dinput.h +2467 -0
  716. package/vendor/raylib/src/external/glfw/deps/mingw/xinput.h +239 -0
  717. package/vendor/raylib/src/external/glfw/deps/vs2008/stdint.h +247 -0
  718. package/vendor/raylib/src/external/glfw/include/GLFW/glfw3.h +6075 -0
  719. package/vendor/raylib/src/external/glfw/include/GLFW/glfw3native.h +530 -0
  720. package/vendor/raylib/src/external/glfw/src/CMakeLists.txt +246 -0
  721. package/vendor/raylib/src/external/glfw/src/cocoa_init.m +620 -0
  722. package/vendor/raylib/src/external/glfw/src/cocoa_joystick.h +46 -0
  723. package/vendor/raylib/src/external/glfw/src/cocoa_joystick.m +483 -0
  724. package/vendor/raylib/src/external/glfw/src/cocoa_monitor.m +631 -0
  725. package/vendor/raylib/src/external/glfw/src/cocoa_platform.h +206 -0
  726. package/vendor/raylib/src/external/glfw/src/cocoa_time.c +62 -0
  727. package/vendor/raylib/src/external/glfw/src/cocoa_window.m +1923 -0
  728. package/vendor/raylib/src/external/glfw/src/context.c +756 -0
  729. package/vendor/raylib/src/external/glfw/src/egl_context.c +846 -0
  730. package/vendor/raylib/src/external/glfw/src/egl_context.h +229 -0
  731. package/vendor/raylib/src/external/glfw/src/glfw.rc.in +30 -0
  732. package/vendor/raylib/src/external/glfw/src/glfw_config.h.in +58 -0
  733. package/vendor/raylib/src/external/glfw/src/glx_context.c +699 -0
  734. package/vendor/raylib/src/external/glfw/src/glx_context.h +181 -0
  735. package/vendor/raylib/src/external/glfw/src/init.c +357 -0
  736. package/vendor/raylib/src/external/glfw/src/input.c +1406 -0
  737. package/vendor/raylib/src/external/glfw/src/internal.h +799 -0
  738. package/vendor/raylib/src/external/glfw/src/linux_joystick.c +428 -0
  739. package/vendor/raylib/src/external/glfw/src/linux_joystick.h +59 -0
  740. package/vendor/raylib/src/external/glfw/src/mappings.h +1550 -0
  741. package/vendor/raylib/src/external/glfw/src/mappings.h.in +73 -0
  742. package/vendor/raylib/src/external/glfw/src/monitor.c +542 -0
  743. package/vendor/raylib/src/external/glfw/src/nsgl_context.h +66 -0
  744. package/vendor/raylib/src/external/glfw/src/nsgl_context.m +369 -0
  745. package/vendor/raylib/src/external/glfw/src/null_init.c +57 -0
  746. package/vendor/raylib/src/external/glfw/src/null_joystick.c +53 -0
  747. package/vendor/raylib/src/external/glfw/src/null_joystick.h +31 -0
  748. package/vendor/raylib/src/external/glfw/src/null_monitor.c +159 -0
  749. package/vendor/raylib/src/external/glfw/src/null_platform.h +89 -0
  750. package/vendor/raylib/src/external/glfw/src/null_window.c +670 -0
  751. package/vendor/raylib/src/external/glfw/src/osmesa_context.c +372 -0
  752. package/vendor/raylib/src/external/glfw/src/osmesa_context.h +90 -0
  753. package/vendor/raylib/src/external/glfw/src/posix_thread.c +105 -0
  754. package/vendor/raylib/src/external/glfw/src/posix_thread.h +51 -0
  755. package/vendor/raylib/src/external/glfw/src/posix_time.c +90 -0
  756. package/vendor/raylib/src/external/glfw/src/posix_time.h +44 -0
  757. package/vendor/raylib/src/external/glfw/src/vulkan.c +332 -0
  758. package/vendor/raylib/src/external/glfw/src/wgl_context.c +798 -0
  759. package/vendor/raylib/src/external/glfw/src/wgl_context.h +160 -0
  760. package/vendor/raylib/src/external/glfw/src/win32_init.c +636 -0
  761. package/vendor/raylib/src/external/glfw/src/win32_joystick.c +753 -0
  762. package/vendor/raylib/src/external/glfw/src/win32_joystick.h +53 -0
  763. package/vendor/raylib/src/external/glfw/src/win32_monitor.c +537 -0
  764. package/vendor/raylib/src/external/glfw/src/win32_platform.h +462 -0
  765. package/vendor/raylib/src/external/glfw/src/win32_thread.c +99 -0
  766. package/vendor/raylib/src/external/glfw/src/win32_time.c +76 -0
  767. package/vendor/raylib/src/external/glfw/src/win32_window.c +2405 -0
  768. package/vendor/raylib/src/external/glfw/src/window.c +1114 -0
  769. package/vendor/raylib/src/external/glfw/src/wl_init.c +1310 -0
  770. package/vendor/raylib/src/external/glfw/src/wl_monitor.c +231 -0
  771. package/vendor/raylib/src/external/glfw/src/wl_platform.h +352 -0
  772. package/vendor/raylib/src/external/glfw/src/wl_window.c +1814 -0
  773. package/vendor/raylib/src/external/glfw/src/x11_init.c +1500 -0
  774. package/vendor/raylib/src/external/glfw/src/x11_monitor.c +614 -0
  775. package/vendor/raylib/src/external/glfw/src/x11_platform.h +798 -0
  776. package/vendor/raylib/src/external/glfw/src/x11_window.c +3310 -0
  777. package/vendor/raylib/src/external/glfw/src/xkb_unicode.c +942 -0
  778. package/vendor/raylib/src/external/glfw/src/xkb_unicode.h +28 -0
  779. package/vendor/raylib/src/external/jar_mod.h +1596 -0
  780. package/vendor/raylib/src/external/jar_xm.h +2470 -0
  781. package/vendor/raylib/src/external/miniaudio.h +70273 -0
  782. package/vendor/raylib/src/external/msf_gif.h +717 -0
  783. package/vendor/raylib/src/external/par_shapes.h +2155 -0
  784. package/vendor/raylib/src/external/sdefl.h +696 -0
  785. package/vendor/raylib/src/external/sinfl.h +584 -0
  786. package/vendor/raylib/src/external/stb_image.h +7897 -0
  787. package/vendor/raylib/src/external/stb_image_resize.h +2634 -0
  788. package/vendor/raylib/src/external/stb_image_write.h +1724 -0
  789. package/vendor/raylib/src/external/stb_rect_pack.h +623 -0
  790. package/vendor/raylib/src/external/stb_truetype.h +5077 -0
  791. package/vendor/raylib/src/external/stb_vorbis.h +5475 -0
  792. package/vendor/raylib/src/external/tinyobj_loader_c.h +1589 -0
  793. package/vendor/raylib/src/external/vox_loader.h +710 -0
  794. package/vendor/raylib/src/extras/easings.h +263 -0
  795. package/vendor/raylib/src/extras/physac.h +1977 -0
  796. package/vendor/raylib/src/extras/raygui.h +4342 -0
  797. package/vendor/raylib/src/extras/rmem.h +751 -0
  798. package/vendor/raylib/src/raudio.c +2380 -0
  799. package/vendor/raylib/src/raudio.h +198 -0
  800. package/vendor/raylib/src/raylib.dll.rc +27 -0
  801. package/vendor/raylib/src/raylib.dll.rc.data +0 -0
  802. package/vendor/raylib/src/raylib.h +1536 -0
  803. package/vendor/raylib/src/raylib.ico +0 -0
  804. package/vendor/raylib/src/raylib.rc +27 -0
  805. package/vendor/raylib/src/raylib.rc.data +0 -0
  806. package/vendor/raylib/src/raymath.h +1853 -0
  807. package/vendor/raylib/src/rcamera.h +567 -0
  808. package/vendor/raylib/src/rcore.c +6772 -0
  809. package/vendor/raylib/src/rgestures.h +566 -0
  810. package/vendor/raylib/src/rglfw.c +126 -0
  811. package/vendor/raylib/src/rlgl.h +4677 -0
  812. package/vendor/raylib/src/rmodels.c +5041 -0
  813. package/vendor/raylib/src/rshapes.c +1759 -0
  814. package/vendor/raylib/src/rtext.c +1790 -0
  815. package/vendor/raylib/src/rtextures.c +4761 -0
  816. package/vendor/raylib/src/shell.html +328 -0
  817. package/vendor/raylib/src/utils.c +433 -0
  818. package/vendor/raylib/src/utils.h +81 -0
  819. package/vendor/sqlite3/shell.c +23487 -0
  820. package/vendor/sqlite3/sqlite3.c +239246 -0
  821. package/vendor/sqlite3/sqlite3.h +12802 -0
  822. package/vendor/sqlite3/sqlite3ext.h +689 -0
  823. package/CMakeLists.txt +0 -60
@@ -0,0 +1,1853 @@
1
+ /**********************************************************************************************
2
+ *
3
+ * raymath v1.5 - Math functions to work with Vector2, Vector3, Matrix and Quaternions
4
+ *
5
+ * CONFIGURATION:
6
+ *
7
+ * #define RAYMATH_IMPLEMENTATION
8
+ * Generates the implementation of the library into the included file.
9
+ * If not defined, the library is in header only mode and can be included in other headers
10
+ * or source files without problems. But only ONE file should hold the implementation.
11
+ *
12
+ * #define RAYMATH_STATIC_INLINE
13
+ * Define static inline functions code, so #include header suffices for use.
14
+ * This may use up lots of memory.
15
+ *
16
+ * CONVENTIONS:
17
+ *
18
+ * - Functions are always self-contained, no function use another raymath function inside,
19
+ * required code is directly re-implemented inside
20
+ * - Functions input parameters are always received by value (2 unavoidable exceptions)
21
+ * - Functions use always a "result" anmed variable for return
22
+ * - Functions are always defined inline
23
+ * - Angles are always in radians (DEG2RAD/RAD2DEG macros provided for convenience)
24
+ *
25
+ *
26
+ * LICENSE: zlib/libpng
27
+ *
28
+ * Copyright (c) 2015-2021 Ramon Santamaria (@raysan5)
29
+ *
30
+ * This software is provided "as-is", without any express or implied warranty. In no event
31
+ * will the authors be held liable for any damages arising from the use of this software.
32
+ *
33
+ * Permission is granted to anyone to use this software for any purpose, including commercial
34
+ * applications, and to alter it and redistribute it freely, subject to the following restrictions:
35
+ *
36
+ * 1. The origin of this software must not be misrepresented; you must not claim that you
37
+ * wrote the original software. If you use this software in a product, an acknowledgment
38
+ * in the product documentation would be appreciated but is not required.
39
+ *
40
+ * 2. Altered source versions must be plainly marked as such, and must not be misrepresented
41
+ * as being the original software.
42
+ *
43
+ * 3. This notice may not be removed or altered from any source distribution.
44
+ *
45
+ **********************************************************************************************/
46
+
47
+ #ifndef RAYMATH_H
48
+ #define RAYMATH_H
49
+
50
+ #if defined(RAYMATH_IMPLEMENTATION) && defined(RAYMATH_STATIC_INLINE)
51
+ #error "Specifying both RAYMATH_IMPLEMENTATION and RAYMATH_STATIC_INLINE is contradictory"
52
+ #endif
53
+
54
+ // Function specifiers definition
55
+ #if defined(RAYMATH_IMPLEMENTATION)
56
+ #if defined(_WIN32) && defined(BUILD_LIBTYPE_SHARED)
57
+ #define RMAPI __declspec(dllexport) extern inline // We are building raylib as a Win32 shared library (.dll).
58
+ #elif defined(_WIN32) && defined(USE_LIBTYPE_SHARED)
59
+ #define RMAPI __declspec(dllimport) // We are using raylib as a Win32 shared library (.dll)
60
+ #else
61
+ #define RMAPI extern inline // Provide external definition
62
+ #endif
63
+ #elif defined(RAYMATH_STATIC_INLINE)
64
+ #define RMAPI static inline // Functions may be inlined, no external out-of-line definition
65
+ #else
66
+ #if defined(__TINYC__)
67
+ #define RMAPI static inline // plain inline not supported by tinycc (See issue #435)
68
+ #else
69
+ #define RMAPI inline // Functions may be inlined or external definition used
70
+ #endif
71
+ #endif
72
+
73
+ //----------------------------------------------------------------------------------
74
+ // Defines and Macros
75
+ //----------------------------------------------------------------------------------
76
+ #ifndef PI
77
+ #define PI 3.14159265358979323846f
78
+ #endif
79
+
80
+ #ifndef DEG2RAD
81
+ #define DEG2RAD (PI/180.0f)
82
+ #endif
83
+
84
+ #ifndef RAD2DEG
85
+ #define RAD2DEG (180.0f/PI)
86
+ #endif
87
+
88
+ // Get float vector for Matrix
89
+ #ifndef MatrixToFloat
90
+ #define MatrixToFloat(mat) (MatrixToFloatV(mat).v)
91
+ #endif
92
+
93
+ // Get float vector for Vector3
94
+ #ifndef Vector3ToFloat
95
+ #define Vector3ToFloat(vec) (Vector3ToFloatV(vec).v)
96
+ #endif
97
+
98
+ //----------------------------------------------------------------------------------
99
+ // Types and Structures Definition
100
+ //----------------------------------------------------------------------------------
101
+ #if !defined(RL_VECTOR2_TYPE)
102
+ // Vector2 type
103
+ typedef struct Vector2 {
104
+ float x;
105
+ float y;
106
+ } Vector2;
107
+ #define RL_VECTOR2_TYPE
108
+ #endif
109
+
110
+ #if !defined(RL_VECTOR3_TYPE)
111
+ // Vector3 type
112
+ typedef struct Vector3 {
113
+ float x;
114
+ float y;
115
+ float z;
116
+ } Vector3;
117
+ #define RL_VECTOR3_TYPE
118
+ #endif
119
+
120
+ #if !defined(RL_VECTOR4_TYPE)
121
+ // Vector4 type
122
+ typedef struct Vector4 {
123
+ float x;
124
+ float y;
125
+ float z;
126
+ float w;
127
+ } Vector4;
128
+ #define RL_VECTOR4_TYPE
129
+ #endif
130
+
131
+ #if !defined(RL_QUATERNION_TYPE)
132
+ // Quaternion type
133
+ typedef Vector4 Quaternion;
134
+ #define RL_QUATERNION_TYPE
135
+ #endif
136
+
137
+ #if !defined(RL_MATRIX_TYPE)
138
+ // Matrix type (OpenGL style 4x4 - right handed, column major)
139
+ typedef struct Matrix {
140
+ float m0, m4, m8, m12; // Matrix first row (4 components)
141
+ float m1, m5, m9, m13; // Matrix second row (4 components)
142
+ float m2, m6, m10, m14; // Matrix third row (4 components)
143
+ float m3, m7, m11, m15; // Matrix fourth row (4 components)
144
+ } Matrix;
145
+ #define RL_MATRIX_TYPE
146
+ #endif
147
+
148
+ // NOTE: Helper types to be used instead of array return types for *ToFloat functions
149
+ typedef struct float3 {
150
+ float v[3];
151
+ } float3;
152
+
153
+ typedef struct float16 {
154
+ float v[16];
155
+ } float16;
156
+
157
+ #include <math.h> // Required for: sinf(), cosf(), tan(), atan2f(), sqrtf(), fminf(), fmaxf(), fabs()
158
+
159
+ //----------------------------------------------------------------------------------
160
+ // Module Functions Definition - Utils math
161
+ //----------------------------------------------------------------------------------
162
+
163
+ // Clamp float value
164
+ RMAPI float Clamp(float value, float min, float max)
165
+ {
166
+ float result = (value < min)? min : value;
167
+
168
+ if (result > max) result = max;
169
+
170
+ return result;
171
+ }
172
+
173
+ // Calculate linear interpolation between two floats
174
+ RMAPI float Lerp(float start, float end, float amount)
175
+ {
176
+ float result = start + amount*(end - start);
177
+
178
+ return result;
179
+ }
180
+
181
+ // Normalize input value within input range
182
+ RMAPI float Normalize(float value, float start, float end)
183
+ {
184
+ float result = (value - start)/(end - start);
185
+
186
+ return result;
187
+ }
188
+
189
+ // Remap input value within input range to output range
190
+ RMAPI float Remap(float value, float inputStart, float inputEnd, float outputStart, float outputEnd)
191
+ {
192
+ float result =(value - inputStart)/(inputEnd - inputStart)*(outputEnd - outputStart) + outputStart;
193
+
194
+ return result;
195
+ }
196
+
197
+ //----------------------------------------------------------------------------------
198
+ // Module Functions Definition - Vector2 math
199
+ //----------------------------------------------------------------------------------
200
+
201
+ // Vector with components value 0.0f
202
+ RMAPI Vector2 Vector2Zero(void)
203
+ {
204
+ Vector2 result = { 0.0f, 0.0f };
205
+
206
+ return result;
207
+ }
208
+
209
+ // Vector with components value 1.0f
210
+ RMAPI Vector2 Vector2One(void)
211
+ {
212
+ Vector2 result = { 1.0f, 1.0f };
213
+
214
+ return result;
215
+ }
216
+
217
+ // Add two vectors (v1 + v2)
218
+ RMAPI Vector2 Vector2Add(Vector2 v1, Vector2 v2)
219
+ {
220
+ Vector2 result = { v1.x + v2.x, v1.y + v2.y };
221
+
222
+ return result;
223
+ }
224
+
225
+ // Add vector and float value
226
+ RMAPI Vector2 Vector2AddValue(Vector2 v, float add)
227
+ {
228
+ Vector2 result = { v.x + add, v.y + add };
229
+
230
+ return result;
231
+ }
232
+
233
+ // Subtract two vectors (v1 - v2)
234
+ RMAPI Vector2 Vector2Subtract(Vector2 v1, Vector2 v2)
235
+ {
236
+ Vector2 result = { v1.x - v2.x, v1.y - v2.y };
237
+
238
+ return result;
239
+ }
240
+
241
+ // Subtract vector by float value
242
+ RMAPI Vector2 Vector2SubtractValue(Vector2 v, float sub)
243
+ {
244
+ Vector2 result = { v.x - sub, v.y - sub };
245
+
246
+ return result;
247
+ }
248
+
249
+ // Calculate vector length
250
+ RMAPI float Vector2Length(Vector2 v)
251
+ {
252
+ float result = sqrtf((v.x*v.x) + (v.y*v.y));
253
+
254
+ return result;
255
+ }
256
+
257
+ // Calculate vector square length
258
+ RMAPI float Vector2LengthSqr(Vector2 v)
259
+ {
260
+ float result = (v.x*v.x) + (v.y*v.y);
261
+
262
+ return result;
263
+ }
264
+
265
+ // Calculate two vectors dot product
266
+ RMAPI float Vector2DotProduct(Vector2 v1, Vector2 v2)
267
+ {
268
+ float result = (v1.x*v2.x + v1.y*v2.y);
269
+
270
+ return result;
271
+ }
272
+
273
+ // Calculate distance between two vectors
274
+ RMAPI float Vector2Distance(Vector2 v1, Vector2 v2)
275
+ {
276
+ float result = sqrtf((v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y));
277
+
278
+ return result;
279
+ }
280
+
281
+ // Calculate angle from two vectors in X-axis
282
+ RMAPI float Vector2Angle(Vector2 v1, Vector2 v2)
283
+ {
284
+ float result = atan2f(v2.y - v1.y, v2.x - v1.x)*(180.0f/PI);
285
+
286
+ if (result < 0) result += 360.0f;
287
+
288
+ return result;
289
+ }
290
+
291
+ // Scale vector (multiply by value)
292
+ RMAPI Vector2 Vector2Scale(Vector2 v, float scale)
293
+ {
294
+ Vector2 result = { v.x*scale, v.y*scale };
295
+
296
+ return result;
297
+ }
298
+
299
+ // Multiply vector by vector
300
+ RMAPI Vector2 Vector2Multiply(Vector2 v1, Vector2 v2)
301
+ {
302
+ Vector2 result = { v1.x*v2.x, v1.y*v2.y };
303
+
304
+ return result;
305
+ }
306
+
307
+ // Negate vector
308
+ RMAPI Vector2 Vector2Negate(Vector2 v)
309
+ {
310
+ Vector2 result = { -v.x, -v.y };
311
+
312
+ return result;
313
+ }
314
+
315
+ // Divide vector by vector
316
+ RMAPI Vector2 Vector2Divide(Vector2 v1, Vector2 v2)
317
+ {
318
+ Vector2 result = { v1.x/v2.x, v1.y/v2.y };
319
+
320
+ return result;
321
+ }
322
+
323
+ // Normalize provided vector
324
+ RMAPI Vector2 Vector2Normalize(Vector2 v)
325
+ {
326
+ Vector2 result = { 0 };
327
+ float length = sqrtf((v.x*v.x) + (v.y*v.y));
328
+
329
+ if (length > 0)
330
+ {
331
+ result.x = v.x*1.0f/length;
332
+ result.y = v.y*1.0f/length;
333
+ }
334
+
335
+ return result;
336
+ }
337
+
338
+ // Calculate linear interpolation between two vectors
339
+ RMAPI Vector2 Vector2Lerp(Vector2 v1, Vector2 v2, float amount)
340
+ {
341
+ Vector2 result = { 0 };
342
+
343
+ result.x = v1.x + amount*(v2.x - v1.x);
344
+ result.y = v1.y + amount*(v2.y - v1.y);
345
+
346
+ return result;
347
+ }
348
+
349
+ // Calculate reflected vector to normal
350
+ RMAPI Vector2 Vector2Reflect(Vector2 v, Vector2 normal)
351
+ {
352
+ Vector2 result = { 0 };
353
+
354
+ float dotProduct = (v.x*normal.x + v.y*normal.y); // Dot product
355
+
356
+ result.x = v.x - (2.0f*normal.x)*dotProduct;
357
+ result.y = v.y - (2.0f*normal.y)*dotProduct;
358
+
359
+ return result;
360
+ }
361
+
362
+ // Rotate vector by angle
363
+ RMAPI Vector2 Vector2Rotate(Vector2 v, float angle)
364
+ {
365
+ Vector2 result = { 0 };
366
+
367
+ result.x = v.x*cosf(angle) - v.y*sinf(angle);
368
+ result.y = v.x*sinf(angle) + v.y*cosf(angle);
369
+
370
+ return result;
371
+ }
372
+
373
+ // Move Vector towards target
374
+ RMAPI Vector2 Vector2MoveTowards(Vector2 v, Vector2 target, float maxDistance)
375
+ {
376
+ Vector2 result = { 0 };
377
+
378
+ float dx = target.x - v.x;
379
+ float dy = target.y - v.y;
380
+ float value = (dx*dx) + (dy*dy);
381
+
382
+ if ((value == 0) || ((maxDistance >= 0) && (value <= maxDistance*maxDistance))) return target;
383
+
384
+ float dist = sqrtf(value);
385
+
386
+ result.x = v.x + dx/dist*maxDistance;
387
+ result.y = v.y + dy/dist*maxDistance;
388
+
389
+ return result;
390
+ }
391
+
392
+ //----------------------------------------------------------------------------------
393
+ // Module Functions Definition - Vector3 math
394
+ //----------------------------------------------------------------------------------
395
+
396
+ // Vector with components value 0.0f
397
+ RMAPI Vector3 Vector3Zero(void)
398
+ {
399
+ Vector3 result = { 0.0f, 0.0f, 0.0f };
400
+
401
+ return result;
402
+ }
403
+
404
+ // Vector with components value 1.0f
405
+ RMAPI Vector3 Vector3One(void)
406
+ {
407
+ Vector3 result = { 1.0f, 1.0f, 1.0f };
408
+
409
+ return result;
410
+ }
411
+
412
+ // Add two vectors
413
+ RMAPI Vector3 Vector3Add(Vector3 v1, Vector3 v2)
414
+ {
415
+ Vector3 result = { v1.x + v2.x, v1.y + v2.y, v1.z + v2.z };
416
+
417
+ return result;
418
+ }
419
+
420
+ // Add vector and float value
421
+ RMAPI Vector3 Vector3AddValue(Vector3 v, float add)
422
+ {
423
+ Vector3 result = { v.x + add, v.y + add, v.z + add };
424
+
425
+ return result;
426
+ }
427
+
428
+ // Subtract two vectors
429
+ RMAPI Vector3 Vector3Subtract(Vector3 v1, Vector3 v2)
430
+ {
431
+ Vector3 result = { v1.x - v2.x, v1.y - v2.y, v1.z - v2.z };
432
+
433
+ return result;
434
+ }
435
+
436
+ // Subtract vector by float value
437
+ RMAPI Vector3 Vector3SubtractValue(Vector3 v, float sub)
438
+ {
439
+ Vector3 result = { v.x - sub, v.y - sub, v.z - sub };
440
+
441
+ return result;
442
+ }
443
+
444
+ // Multiply vector by scalar
445
+ RMAPI Vector3 Vector3Scale(Vector3 v, float scalar)
446
+ {
447
+ Vector3 result = { v.x*scalar, v.y*scalar, v.z*scalar };
448
+
449
+ return result;
450
+ }
451
+
452
+ // Multiply vector by vector
453
+ RMAPI Vector3 Vector3Multiply(Vector3 v1, Vector3 v2)
454
+ {
455
+ Vector3 result = { v1.x*v2.x, v1.y*v2.y, v1.z*v2.z };
456
+
457
+ return result;
458
+ }
459
+
460
+ // Calculate two vectors cross product
461
+ RMAPI Vector3 Vector3CrossProduct(Vector3 v1, Vector3 v2)
462
+ {
463
+ Vector3 result = { v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x };
464
+
465
+ return result;
466
+ }
467
+
468
+ // Calculate one vector perpendicular vector
469
+ RMAPI Vector3 Vector3Perpendicular(Vector3 v)
470
+ {
471
+ Vector3 result = { 0 };
472
+
473
+ float min = (float) fabs(v.x);
474
+ Vector3 cardinalAxis = {1.0f, 0.0f, 0.0f};
475
+
476
+ if (fabs(v.y) < min)
477
+ {
478
+ min = (float) fabs(v.y);
479
+ Vector3 tmp = {0.0f, 1.0f, 0.0f};
480
+ cardinalAxis = tmp;
481
+ }
482
+
483
+ if (fabs(v.z) < min)
484
+ {
485
+ Vector3 tmp = {0.0f, 0.0f, 1.0f};
486
+ cardinalAxis = tmp;
487
+ }
488
+
489
+ // Cross product between vectors
490
+ result.x = v.y*cardinalAxis.z - v.z*cardinalAxis.y;
491
+ result.y = v.z*cardinalAxis.x - v.x*cardinalAxis.z;
492
+ result.z = v.x*cardinalAxis.y - v.y*cardinalAxis.x;
493
+
494
+ return result;
495
+ }
496
+
497
+ // Calculate vector length
498
+ RMAPI float Vector3Length(const Vector3 v)
499
+ {
500
+ float result = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
501
+
502
+ return result;
503
+ }
504
+
505
+ // Calculate vector square length
506
+ RMAPI float Vector3LengthSqr(const Vector3 v)
507
+ {
508
+ float result = v.x*v.x + v.y*v.y + v.z*v.z;
509
+
510
+ return result;
511
+ }
512
+
513
+ // Calculate two vectors dot product
514
+ RMAPI float Vector3DotProduct(Vector3 v1, Vector3 v2)
515
+ {
516
+ float result = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z);
517
+
518
+ return result;
519
+ }
520
+
521
+ // Calculate distance between two vectors
522
+ RMAPI float Vector3Distance(Vector3 v1, Vector3 v2)
523
+ {
524
+ float result = 0.0f;
525
+
526
+ float dx = v2.x - v1.x;
527
+ float dy = v2.y - v1.y;
528
+ float dz = v2.z - v1.z;
529
+ result = sqrtf(dx*dx + dy*dy + dz*dz);
530
+
531
+ return result;
532
+ }
533
+
534
+ // Calculate angle between two vectors in XY and XZ
535
+ RMAPI Vector2 Vector3Angle(Vector3 v1, Vector3 v2)
536
+ {
537
+ Vector2 result = { 0 };
538
+
539
+ float dx = v2.x - v1.x;
540
+ float dy = v2.y - v1.y;
541
+ float dz = v2.z - v1.z;
542
+
543
+ result.x = atan2f(dx, dz); // Angle in XZ
544
+ result.y = atan2f(dy, sqrtf(dx*dx + dz*dz)); // Angle in XY
545
+
546
+ return result;
547
+ }
548
+
549
+ // Negate provided vector (invert direction)
550
+ RMAPI Vector3 Vector3Negate(Vector3 v)
551
+ {
552
+ Vector3 result = { -v.x, -v.y, -v.z };
553
+
554
+ return result;
555
+ }
556
+
557
+ // Divide vector by vector
558
+ RMAPI Vector3 Vector3Divide(Vector3 v1, Vector3 v2)
559
+ {
560
+ Vector3 result = { v1.x/v2.x, v1.y/v2.y, v1.z/v2.z };
561
+
562
+ return result;
563
+ }
564
+
565
+ // Normalize provided vector
566
+ RMAPI Vector3 Vector3Normalize(Vector3 v)
567
+ {
568
+ Vector3 result = v;
569
+
570
+ float length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
571
+ if (length == 0.0f) length = 1.0f;
572
+ float ilength = 1.0f/length;
573
+
574
+ result.x *= ilength;
575
+ result.y *= ilength;
576
+ result.z *= ilength;
577
+
578
+ return result;
579
+ }
580
+
581
+ // Orthonormalize provided vectors
582
+ // Makes vectors normalized and orthogonal to each other
583
+ // Gram-Schmidt function implementation
584
+ RMAPI void Vector3OrthoNormalize(Vector3 *v1, Vector3 *v2)
585
+ {
586
+ float length = 0.0f;
587
+ float ilength = 0.0f;
588
+
589
+ // Vector3Normalize(*v1);
590
+ Vector3 v = *v1;
591
+ length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
592
+ if (length == 0.0f) length = 1.0f;
593
+ ilength = 1.0f/length;
594
+ v1->x *= ilength;
595
+ v1->y *= ilength;
596
+ v1->z *= ilength;
597
+
598
+ // Vector3CrossProduct(*v1, *v2)
599
+ Vector3 vn1 = { v1->y*v2->z - v1->z*v2->y, v1->z*v2->x - v1->x*v2->z, v1->x*v2->y - v1->y*v2->x };
600
+
601
+ // Vector3Normalize(vn1);
602
+ v = vn1;
603
+ length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
604
+ if (length == 0.0f) length = 1.0f;
605
+ ilength = 1.0f/length;
606
+ vn1.x *= ilength;
607
+ vn1.y *= ilength;
608
+ vn1.z *= ilength;
609
+
610
+ // Vector3CrossProduct(vn1, *v1)
611
+ Vector3 vn2 = { vn1.y*v1->z - vn1.z*v1->y, vn1.z*v1->x - vn1.x*v1->z, vn1.x*v1->y - vn1.y*v1->x };
612
+
613
+ *v2 = vn2;
614
+ }
615
+
616
+ // Transforms a Vector3 by a given Matrix
617
+ RMAPI Vector3 Vector3Transform(Vector3 v, Matrix mat)
618
+ {
619
+ Vector3 result = { 0 };
620
+
621
+ float x = v.x;
622
+ float y = v.y;
623
+ float z = v.z;
624
+
625
+ result.x = mat.m0*x + mat.m4*y + mat.m8*z + mat.m12;
626
+ result.y = mat.m1*x + mat.m5*y + mat.m9*z + mat.m13;
627
+ result.z = mat.m2*x + mat.m6*y + mat.m10*z + mat.m14;
628
+
629
+ return result;
630
+ }
631
+
632
+ // Transform a vector by quaternion rotation
633
+ RMAPI Vector3 Vector3RotateByQuaternion(Vector3 v, Quaternion q)
634
+ {
635
+ Vector3 result = { 0 };
636
+
637
+ result.x = v.x*(q.x*q.x + q.w*q.w - q.y*q.y - q.z*q.z) + v.y*(2*q.x*q.y - 2*q.w*q.z) + v.z*(2*q.x*q.z + 2*q.w*q.y);
638
+ result.y = v.x*(2*q.w*q.z + 2*q.x*q.y) + v.y*(q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z) + v.z*(-2*q.w*q.x + 2*q.y*q.z);
639
+ result.z = v.x*(-2*q.w*q.y + 2*q.x*q.z) + v.y*(2*q.w*q.x + 2*q.y*q.z)+ v.z*(q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z);
640
+
641
+ return result;
642
+ }
643
+
644
+ // Calculate linear interpolation between two vectors
645
+ RMAPI Vector3 Vector3Lerp(Vector3 v1, Vector3 v2, float amount)
646
+ {
647
+ Vector3 result = { 0 };
648
+
649
+ result.x = v1.x + amount*(v2.x - v1.x);
650
+ result.y = v1.y + amount*(v2.y - v1.y);
651
+ result.z = v1.z + amount*(v2.z - v1.z);
652
+
653
+ return result;
654
+ }
655
+
656
+ // Calculate reflected vector to normal
657
+ RMAPI Vector3 Vector3Reflect(Vector3 v, Vector3 normal)
658
+ {
659
+ Vector3 result = { 0 };
660
+
661
+ // I is the original vector
662
+ // N is the normal of the incident plane
663
+ // R = I - (2*N*(DotProduct[I, N]))
664
+
665
+ float dotProduct = (v.x*normal.x + v.y*normal.y + v.z*normal.z);
666
+
667
+ result.x = v.x - (2.0f*normal.x)*dotProduct;
668
+ result.y = v.y - (2.0f*normal.y)*dotProduct;
669
+ result.z = v.z - (2.0f*normal.z)*dotProduct;
670
+
671
+ return result;
672
+ }
673
+
674
+ // Get min value for each pair of components
675
+ RMAPI Vector3 Vector3Min(Vector3 v1, Vector3 v2)
676
+ {
677
+ Vector3 result = { 0 };
678
+
679
+ result.x = fminf(v1.x, v2.x);
680
+ result.y = fminf(v1.y, v2.y);
681
+ result.z = fminf(v1.z, v2.z);
682
+
683
+ return result;
684
+ }
685
+
686
+ // Get max value for each pair of components
687
+ RMAPI Vector3 Vector3Max(Vector3 v1, Vector3 v2)
688
+ {
689
+ Vector3 result = { 0 };
690
+
691
+ result.x = fmaxf(v1.x, v2.x);
692
+ result.y = fmaxf(v1.y, v2.y);
693
+ result.z = fmaxf(v1.z, v2.z);
694
+
695
+ return result;
696
+ }
697
+
698
+ // Compute barycenter coordinates (u, v, w) for point p with respect to triangle (a, b, c)
699
+ // NOTE: Assumes P is on the plane of the triangle
700
+ RMAPI Vector3 Vector3Barycenter(Vector3 p, Vector3 a, Vector3 b, Vector3 c)
701
+ {
702
+ Vector3 result = { 0 };
703
+
704
+ Vector3 v0 = { b.x - a.x, b.y - a.y, b.z - a.z }; // Vector3Subtract(b, a)
705
+ Vector3 v1 = { c.x - a.x, c.y - a.y, c.z - a.z }; // Vector3Subtract(c, a)
706
+ Vector3 v2 = { p.x - a.x, p.y - a.y, p.z - a.z }; // Vector3Subtract(p, a)
707
+ float d00 = (v0.x*v0.x + v0.y*v0.y + v0.z*v0.z); // Vector3DotProduct(v0, v0)
708
+ float d01 = (v0.x*v1.x + v0.y*v1.y + v0.z*v1.z); // Vector3DotProduct(v0, v1)
709
+ float d11 = (v1.x*v1.x + v1.y*v1.y + v1.z*v1.z); // Vector3DotProduct(v1, v1)
710
+ float d20 = (v2.x*v0.x + v2.y*v0.y + v2.z*v0.z); // Vector3DotProduct(v2, v0)
711
+ float d21 = (v2.x*v1.x + v2.y*v1.y + v2.z*v1.z); // Vector3DotProduct(v2, v1)
712
+
713
+ float denom = d00*d11 - d01*d01;
714
+
715
+ result.y = (d11*d20 - d01*d21)/denom;
716
+ result.z = (d00*d21 - d01*d20)/denom;
717
+ result.x = 1.0f - (result.z + result.y);
718
+
719
+ return result;
720
+ }
721
+
722
+ // Projects a Vector3 from screen space into object space
723
+ // NOTE: We are avoiding calling other raymath functions despite available
724
+ RMAPI Vector3 Vector3Unproject(Vector3 source, Matrix projection, Matrix view)
725
+ {
726
+ Vector3 result = { 0 };
727
+
728
+ // Calculate unproject matrix (multiply view patrix by projection matrix) and invert it
729
+ Matrix matViewProj = { // MatrixMultiply(view, projection);
730
+ view.m0*projection.m0 + view.m1*projection.m4 + view.m2*projection.m8 + view.m3*projection.m12,
731
+ view.m0*projection.m1 + view.m1*projection.m5 + view.m2*projection.m9 + view.m3*projection.m13,
732
+ view.m0*projection.m2 + view.m1*projection.m6 + view.m2*projection.m10 + view.m3*projection.m14,
733
+ view.m0*projection.m3 + view.m1*projection.m7 + view.m2*projection.m11 + view.m3*projection.m15,
734
+ view.m4*projection.m0 + view.m5*projection.m4 + view.m6*projection.m8 + view.m7*projection.m12,
735
+ view.m4*projection.m1 + view.m5*projection.m5 + view.m6*projection.m9 + view.m7*projection.m13,
736
+ view.m4*projection.m2 + view.m5*projection.m6 + view.m6*projection.m10 + view.m7*projection.m14,
737
+ view.m4*projection.m3 + view.m5*projection.m7 + view.m6*projection.m11 + view.m7*projection.m15,
738
+ view.m8*projection.m0 + view.m9*projection.m4 + view.m10*projection.m8 + view.m11*projection.m12,
739
+ view.m8*projection.m1 + view.m9*projection.m5 + view.m10*projection.m9 + view.m11*projection.m13,
740
+ view.m8*projection.m2 + view.m9*projection.m6 + view.m10*projection.m10 + view.m11*projection.m14,
741
+ view.m8*projection.m3 + view.m9*projection.m7 + view.m10*projection.m11 + view.m11*projection.m15,
742
+ view.m12*projection.m0 + view.m13*projection.m4 + view.m14*projection.m8 + view.m15*projection.m12,
743
+ view.m12*projection.m1 + view.m13*projection.m5 + view.m14*projection.m9 + view.m15*projection.m13,
744
+ view.m12*projection.m2 + view.m13*projection.m6 + view.m14*projection.m10 + view.m15*projection.m14,
745
+ view.m12*projection.m3 + view.m13*projection.m7 + view.m14*projection.m11 + view.m15*projection.m15 };
746
+
747
+ // Calculate inverted matrix -> MatrixInvert(matViewProj);
748
+ // Cache the matrix values (speed optimization)
749
+ float a00 = matViewProj.m0, a01 = matViewProj.m1, a02 = matViewProj.m2, a03 = matViewProj.m3;
750
+ float a10 = matViewProj.m4, a11 = matViewProj.m5, a12 = matViewProj.m6, a13 = matViewProj.m7;
751
+ float a20 = matViewProj.m8, a21 = matViewProj.m9, a22 = matViewProj.m10, a23 = matViewProj.m11;
752
+ float a30 = matViewProj.m12, a31 = matViewProj.m13, a32 = matViewProj.m14, a33 = matViewProj.m15;
753
+
754
+ float b00 = a00*a11 - a01*a10;
755
+ float b01 = a00*a12 - a02*a10;
756
+ float b02 = a00*a13 - a03*a10;
757
+ float b03 = a01*a12 - a02*a11;
758
+ float b04 = a01*a13 - a03*a11;
759
+ float b05 = a02*a13 - a03*a12;
760
+ float b06 = a20*a31 - a21*a30;
761
+ float b07 = a20*a32 - a22*a30;
762
+ float b08 = a20*a33 - a23*a30;
763
+ float b09 = a21*a32 - a22*a31;
764
+ float b10 = a21*a33 - a23*a31;
765
+ float b11 = a22*a33 - a23*a32;
766
+
767
+ // Calculate the invert determinant (inlined to avoid double-caching)
768
+ float invDet = 1.0f/(b00*b11 - b01*b10 + b02*b09 + b03*b08 - b04*b07 + b05*b06);
769
+
770
+ Matrix matViewProjInv = {
771
+ (a11*b11 - a12*b10 + a13*b09)*invDet,
772
+ (-a01*b11 + a02*b10 - a03*b09)*invDet,
773
+ (a31*b05 - a32*b04 + a33*b03)*invDet,
774
+ (-a21*b05 + a22*b04 - a23*b03)*invDet,
775
+ (-a10*b11 + a12*b08 - a13*b07)*invDet,
776
+ (a00*b11 - a02*b08 + a03*b07)*invDet,
777
+ (-a30*b05 + a32*b02 - a33*b01)*invDet,
778
+ (a20*b05 - a22*b02 + a23*b01)*invDet,
779
+ (a10*b10 - a11*b08 + a13*b06)*invDet,
780
+ (-a00*b10 + a01*b08 - a03*b06)*invDet,
781
+ (a30*b04 - a31*b02 + a33*b00)*invDet,
782
+ (-a20*b04 + a21*b02 - a23*b00)*invDet,
783
+ (-a10*b09 + a11*b07 - a12*b06)*invDet,
784
+ (a00*b09 - a01*b07 + a02*b06)*invDet,
785
+ (-a30*b03 + a31*b01 - a32*b00)*invDet,
786
+ (a20*b03 - a21*b01 + a22*b00)*invDet };
787
+
788
+ // Create quaternion from source point
789
+ Quaternion quat = { source.x, source.y, source.z, 1.0f };
790
+
791
+ // Multiply quat point by unproject matrix
792
+ Quaternion qtransformed = { // QuaternionTransform(quat, matViewProjInv)
793
+ matViewProjInv.m0*quat.x + matViewProjInv.m4*quat.y + matViewProjInv.m8*quat.z + matViewProjInv.m12*quat.w,
794
+ matViewProjInv.m1*quat.x + matViewProjInv.m5*quat.y + matViewProjInv.m9*quat.z + matViewProjInv.m13*quat.w,
795
+ matViewProjInv.m2*quat.x + matViewProjInv.m6*quat.y + matViewProjInv.m10*quat.z + matViewProjInv.m14*quat.w,
796
+ matViewProjInv.m3*quat.x + matViewProjInv.m7*quat.y + matViewProjInv.m11*quat.z + matViewProjInv.m15*quat.w };
797
+
798
+ // Normalized world points in vectors
799
+ result.x = qtransformed.x/qtransformed.w;
800
+ result.y = qtransformed.y/qtransformed.w;
801
+ result.z = qtransformed.z/qtransformed.w;
802
+
803
+ return result;
804
+ }
805
+
806
+ // Get Vector3 as float array
807
+ RMAPI float3 Vector3ToFloatV(Vector3 v)
808
+ {
809
+ float3 buffer = { 0 };
810
+
811
+ buffer.v[0] = v.x;
812
+ buffer.v[1] = v.y;
813
+ buffer.v[2] = v.z;
814
+
815
+ return buffer;
816
+ }
817
+
818
+ //----------------------------------------------------------------------------------
819
+ // Module Functions Definition - Matrix math
820
+ //----------------------------------------------------------------------------------
821
+
822
+ // Compute matrix determinant
823
+ RMAPI float MatrixDeterminant(Matrix mat)
824
+ {
825
+ float result = 0.0f;
826
+
827
+ // Cache the matrix values (speed optimization)
828
+ float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3;
829
+ float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7;
830
+ float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11;
831
+ float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15;
832
+
833
+ result = a30*a21*a12*a03 - a20*a31*a12*a03 - a30*a11*a22*a03 + a10*a31*a22*a03 +
834
+ a20*a11*a32*a03 - a10*a21*a32*a03 - a30*a21*a02*a13 + a20*a31*a02*a13 +
835
+ a30*a01*a22*a13 - a00*a31*a22*a13 - a20*a01*a32*a13 + a00*a21*a32*a13 +
836
+ a30*a11*a02*a23 - a10*a31*a02*a23 - a30*a01*a12*a23 + a00*a31*a12*a23 +
837
+ a10*a01*a32*a23 - a00*a11*a32*a23 - a20*a11*a02*a33 + a10*a21*a02*a33 +
838
+ a20*a01*a12*a33 - a00*a21*a12*a33 - a10*a01*a22*a33 + a00*a11*a22*a33;
839
+
840
+ return result;
841
+ }
842
+
843
+ // Get the trace of the matrix (sum of the values along the diagonal)
844
+ RMAPI float MatrixTrace(Matrix mat)
845
+ {
846
+ float result = (mat.m0 + mat.m5 + mat.m10 + mat.m15);
847
+
848
+ return result;
849
+ }
850
+
851
+ // Transposes provided matrix
852
+ RMAPI Matrix MatrixTranspose(Matrix mat)
853
+ {
854
+ Matrix result = { 0 };
855
+
856
+ result.m0 = mat.m0;
857
+ result.m1 = mat.m4;
858
+ result.m2 = mat.m8;
859
+ result.m3 = mat.m12;
860
+ result.m4 = mat.m1;
861
+ result.m5 = mat.m5;
862
+ result.m6 = mat.m9;
863
+ result.m7 = mat.m13;
864
+ result.m8 = mat.m2;
865
+ result.m9 = mat.m6;
866
+ result.m10 = mat.m10;
867
+ result.m11 = mat.m14;
868
+ result.m12 = mat.m3;
869
+ result.m13 = mat.m7;
870
+ result.m14 = mat.m11;
871
+ result.m15 = mat.m15;
872
+
873
+ return result;
874
+ }
875
+
876
+ // Invert provided matrix
877
+ RMAPI Matrix MatrixInvert(Matrix mat)
878
+ {
879
+ Matrix result = { 0 };
880
+
881
+ // Cache the matrix values (speed optimization)
882
+ float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3;
883
+ float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7;
884
+ float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11;
885
+ float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15;
886
+
887
+ float b00 = a00*a11 - a01*a10;
888
+ float b01 = a00*a12 - a02*a10;
889
+ float b02 = a00*a13 - a03*a10;
890
+ float b03 = a01*a12 - a02*a11;
891
+ float b04 = a01*a13 - a03*a11;
892
+ float b05 = a02*a13 - a03*a12;
893
+ float b06 = a20*a31 - a21*a30;
894
+ float b07 = a20*a32 - a22*a30;
895
+ float b08 = a20*a33 - a23*a30;
896
+ float b09 = a21*a32 - a22*a31;
897
+ float b10 = a21*a33 - a23*a31;
898
+ float b11 = a22*a33 - a23*a32;
899
+
900
+ // Calculate the invert determinant (inlined to avoid double-caching)
901
+ float invDet = 1.0f/(b00*b11 - b01*b10 + b02*b09 + b03*b08 - b04*b07 + b05*b06);
902
+
903
+ result.m0 = (a11*b11 - a12*b10 + a13*b09)*invDet;
904
+ result.m1 = (-a01*b11 + a02*b10 - a03*b09)*invDet;
905
+ result.m2 = (a31*b05 - a32*b04 + a33*b03)*invDet;
906
+ result.m3 = (-a21*b05 + a22*b04 - a23*b03)*invDet;
907
+ result.m4 = (-a10*b11 + a12*b08 - a13*b07)*invDet;
908
+ result.m5 = (a00*b11 - a02*b08 + a03*b07)*invDet;
909
+ result.m6 = (-a30*b05 + a32*b02 - a33*b01)*invDet;
910
+ result.m7 = (a20*b05 - a22*b02 + a23*b01)*invDet;
911
+ result.m8 = (a10*b10 - a11*b08 + a13*b06)*invDet;
912
+ result.m9 = (-a00*b10 + a01*b08 - a03*b06)*invDet;
913
+ result.m10 = (a30*b04 - a31*b02 + a33*b00)*invDet;
914
+ result.m11 = (-a20*b04 + a21*b02 - a23*b00)*invDet;
915
+ result.m12 = (-a10*b09 + a11*b07 - a12*b06)*invDet;
916
+ result.m13 = (a00*b09 - a01*b07 + a02*b06)*invDet;
917
+ result.m14 = (-a30*b03 + a31*b01 - a32*b00)*invDet;
918
+ result.m15 = (a20*b03 - a21*b01 + a22*b00)*invDet;
919
+
920
+ return result;
921
+ }
922
+
923
+ // Normalize provided matrix
924
+ RMAPI Matrix MatrixNormalize(Matrix mat)
925
+ {
926
+ Matrix result = { 0 };
927
+
928
+ // Cache the matrix values (speed optimization)
929
+ float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3;
930
+ float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7;
931
+ float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11;
932
+ float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15;
933
+
934
+ // MatrixDeterminant(mat)
935
+ float det = a30*a21*a12*a03 - a20*a31*a12*a03 - a30*a11*a22*a03 + a10*a31*a22*a03 +
936
+ a20*a11*a32*a03 - a10*a21*a32*a03 - a30*a21*a02*a13 + a20*a31*a02*a13 +
937
+ a30*a01*a22*a13 - a00*a31*a22*a13 - a20*a01*a32*a13 + a00*a21*a32*a13 +
938
+ a30*a11*a02*a23 - a10*a31*a02*a23 - a30*a01*a12*a23 + a00*a31*a12*a23 +
939
+ a10*a01*a32*a23 - a00*a11*a32*a23 - a20*a11*a02*a33 + a10*a21*a02*a33 +
940
+ a20*a01*a12*a33 - a00*a21*a12*a33 - a10*a01*a22*a33 + a00*a11*a22*a33;
941
+
942
+ result.m0 = mat.m0/det;
943
+ result.m1 = mat.m1/det;
944
+ result.m2 = mat.m2/det;
945
+ result.m3 = mat.m3/det;
946
+ result.m4 = mat.m4/det;
947
+ result.m5 = mat.m5/det;
948
+ result.m6 = mat.m6/det;
949
+ result.m7 = mat.m7/det;
950
+ result.m8 = mat.m8/det;
951
+ result.m9 = mat.m9/det;
952
+ result.m10 = mat.m10/det;
953
+ result.m11 = mat.m11/det;
954
+ result.m12 = mat.m12/det;
955
+ result.m13 = mat.m13/det;
956
+ result.m14 = mat.m14/det;
957
+ result.m15 = mat.m15/det;
958
+
959
+ return result;
960
+ }
961
+
962
+ // Get identity matrix
963
+ RMAPI Matrix MatrixIdentity(void)
964
+ {
965
+ Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f,
966
+ 0.0f, 1.0f, 0.0f, 0.0f,
967
+ 0.0f, 0.0f, 1.0f, 0.0f,
968
+ 0.0f, 0.0f, 0.0f, 1.0f };
969
+
970
+ return result;
971
+ }
972
+
973
+ // Add two matrices
974
+ RMAPI Matrix MatrixAdd(Matrix left, Matrix right)
975
+ {
976
+ Matrix result = { 0 };
977
+
978
+ result.m0 = left.m0 + right.m0;
979
+ result.m1 = left.m1 + right.m1;
980
+ result.m2 = left.m2 + right.m2;
981
+ result.m3 = left.m3 + right.m3;
982
+ result.m4 = left.m4 + right.m4;
983
+ result.m5 = left.m5 + right.m5;
984
+ result.m6 = left.m6 + right.m6;
985
+ result.m7 = left.m7 + right.m7;
986
+ result.m8 = left.m8 + right.m8;
987
+ result.m9 = left.m9 + right.m9;
988
+ result.m10 = left.m10 + right.m10;
989
+ result.m11 = left.m11 + right.m11;
990
+ result.m12 = left.m12 + right.m12;
991
+ result.m13 = left.m13 + right.m13;
992
+ result.m14 = left.m14 + right.m14;
993
+ result.m15 = left.m15 + right.m15;
994
+
995
+ return result;
996
+ }
997
+
998
+ // Subtract two matrices (left - right)
999
+ RMAPI Matrix MatrixSubtract(Matrix left, Matrix right)
1000
+ {
1001
+ Matrix result = { 0 };
1002
+
1003
+ result.m0 = left.m0 - right.m0;
1004
+ result.m1 = left.m1 - right.m1;
1005
+ result.m2 = left.m2 - right.m2;
1006
+ result.m3 = left.m3 - right.m3;
1007
+ result.m4 = left.m4 - right.m4;
1008
+ result.m5 = left.m5 - right.m5;
1009
+ result.m6 = left.m6 - right.m6;
1010
+ result.m7 = left.m7 - right.m7;
1011
+ result.m8 = left.m8 - right.m8;
1012
+ result.m9 = left.m9 - right.m9;
1013
+ result.m10 = left.m10 - right.m10;
1014
+ result.m11 = left.m11 - right.m11;
1015
+ result.m12 = left.m12 - right.m12;
1016
+ result.m13 = left.m13 - right.m13;
1017
+ result.m14 = left.m14 - right.m14;
1018
+ result.m15 = left.m15 - right.m15;
1019
+
1020
+ return result;
1021
+ }
1022
+
1023
+ // Get two matrix multiplication
1024
+ // NOTE: When multiplying matrices... the order matters!
1025
+ RMAPI Matrix MatrixMultiply(Matrix left, Matrix right)
1026
+ {
1027
+ Matrix result = { 0 };
1028
+
1029
+ result.m0 = left.m0*right.m0 + left.m1*right.m4 + left.m2*right.m8 + left.m3*right.m12;
1030
+ result.m1 = left.m0*right.m1 + left.m1*right.m5 + left.m2*right.m9 + left.m3*right.m13;
1031
+ result.m2 = left.m0*right.m2 + left.m1*right.m6 + left.m2*right.m10 + left.m3*right.m14;
1032
+ result.m3 = left.m0*right.m3 + left.m1*right.m7 + left.m2*right.m11 + left.m3*right.m15;
1033
+ result.m4 = left.m4*right.m0 + left.m5*right.m4 + left.m6*right.m8 + left.m7*right.m12;
1034
+ result.m5 = left.m4*right.m1 + left.m5*right.m5 + left.m6*right.m9 + left.m7*right.m13;
1035
+ result.m6 = left.m4*right.m2 + left.m5*right.m6 + left.m6*right.m10 + left.m7*right.m14;
1036
+ result.m7 = left.m4*right.m3 + left.m5*right.m7 + left.m6*right.m11 + left.m7*right.m15;
1037
+ result.m8 = left.m8*right.m0 + left.m9*right.m4 + left.m10*right.m8 + left.m11*right.m12;
1038
+ result.m9 = left.m8*right.m1 + left.m9*right.m5 + left.m10*right.m9 + left.m11*right.m13;
1039
+ result.m10 = left.m8*right.m2 + left.m9*right.m6 + left.m10*right.m10 + left.m11*right.m14;
1040
+ result.m11 = left.m8*right.m3 + left.m9*right.m7 + left.m10*right.m11 + left.m11*right.m15;
1041
+ result.m12 = left.m12*right.m0 + left.m13*right.m4 + left.m14*right.m8 + left.m15*right.m12;
1042
+ result.m13 = left.m12*right.m1 + left.m13*right.m5 + left.m14*right.m9 + left.m15*right.m13;
1043
+ result.m14 = left.m12*right.m2 + left.m13*right.m6 + left.m14*right.m10 + left.m15*right.m14;
1044
+ result.m15 = left.m12*right.m3 + left.m13*right.m7 + left.m14*right.m11 + left.m15*right.m15;
1045
+
1046
+ return result;
1047
+ }
1048
+
1049
+ // Get translation matrix
1050
+ RMAPI Matrix MatrixTranslate(float x, float y, float z)
1051
+ {
1052
+ Matrix result = { 1.0f, 0.0f, 0.0f, x,
1053
+ 0.0f, 1.0f, 0.0f, y,
1054
+ 0.0f, 0.0f, 1.0f, z,
1055
+ 0.0f, 0.0f, 0.0f, 1.0f };
1056
+
1057
+ return result;
1058
+ }
1059
+
1060
+ // Create rotation matrix from axis and angle
1061
+ // NOTE: Angle should be provided in radians
1062
+ RMAPI Matrix MatrixRotate(Vector3 axis, float angle)
1063
+ {
1064
+ Matrix result = { 0 };
1065
+
1066
+ float x = axis.x, y = axis.y, z = axis.z;
1067
+
1068
+ float lengthSquared = x*x + y*y + z*z;
1069
+
1070
+ if ((lengthSquared != 1.0f) && (lengthSquared != 0.0f))
1071
+ {
1072
+ float ilength = 1.0f/sqrtf(lengthSquared);
1073
+ x *= ilength;
1074
+ y *= ilength;
1075
+ z *= ilength;
1076
+ }
1077
+
1078
+ float sinres = sinf(angle);
1079
+ float cosres = cosf(angle);
1080
+ float t = 1.0f - cosres;
1081
+
1082
+ result.m0 = x*x*t + cosres;
1083
+ result.m1 = y*x*t + z*sinres;
1084
+ result.m2 = z*x*t - y*sinres;
1085
+ result.m3 = 0.0f;
1086
+
1087
+ result.m4 = x*y*t - z*sinres;
1088
+ result.m5 = y*y*t + cosres;
1089
+ result.m6 = z*y*t + x*sinres;
1090
+ result.m7 = 0.0f;
1091
+
1092
+ result.m8 = x*z*t + y*sinres;
1093
+ result.m9 = y*z*t - x*sinres;
1094
+ result.m10 = z*z*t + cosres;
1095
+ result.m11 = 0.0f;
1096
+
1097
+ result.m12 = 0.0f;
1098
+ result.m13 = 0.0f;
1099
+ result.m14 = 0.0f;
1100
+ result.m15 = 1.0f;
1101
+
1102
+ return result;
1103
+ }
1104
+
1105
+ // Get x-rotation matrix (angle in radians)
1106
+ RMAPI Matrix MatrixRotateX(float angle)
1107
+ {
1108
+ Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f,
1109
+ 0.0f, 1.0f, 0.0f, 0.0f,
1110
+ 0.0f, 0.0f, 1.0f, 0.0f,
1111
+ 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity()
1112
+
1113
+ float cosres = cosf(angle);
1114
+ float sinres = sinf(angle);
1115
+
1116
+ result.m5 = cosres;
1117
+ result.m6 = -sinres;
1118
+ result.m9 = sinres;
1119
+ result.m10 = cosres;
1120
+
1121
+ return result;
1122
+ }
1123
+
1124
+ // Get y-rotation matrix (angle in radians)
1125
+ RMAPI Matrix MatrixRotateY(float angle)
1126
+ {
1127
+ Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f,
1128
+ 0.0f, 1.0f, 0.0f, 0.0f,
1129
+ 0.0f, 0.0f, 1.0f, 0.0f,
1130
+ 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity()
1131
+
1132
+ float cosres = cosf(angle);
1133
+ float sinres = sinf(angle);
1134
+
1135
+ result.m0 = cosres;
1136
+ result.m2 = sinres;
1137
+ result.m8 = -sinres;
1138
+ result.m10 = cosres;
1139
+
1140
+ return result;
1141
+ }
1142
+
1143
+ // Get z-rotation matrix (angle in radians)
1144
+ RMAPI Matrix MatrixRotateZ(float angle)
1145
+ {
1146
+ Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f,
1147
+ 0.0f, 1.0f, 0.0f, 0.0f,
1148
+ 0.0f, 0.0f, 1.0f, 0.0f,
1149
+ 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity()
1150
+
1151
+ float cosres = cosf(angle);
1152
+ float sinres = sinf(angle);
1153
+
1154
+ result.m0 = cosres;
1155
+ result.m1 = -sinres;
1156
+ result.m4 = sinres;
1157
+ result.m5 = cosres;
1158
+
1159
+ return result;
1160
+ }
1161
+
1162
+
1163
+ // Get xyz-rotation matrix (angles in radians)
1164
+ RMAPI Matrix MatrixRotateXYZ(Vector3 ang)
1165
+ {
1166
+ Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f,
1167
+ 0.0f, 1.0f, 0.0f, 0.0f,
1168
+ 0.0f, 0.0f, 1.0f, 0.0f,
1169
+ 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity()
1170
+
1171
+ float cosz = cosf(-ang.z);
1172
+ float sinz = sinf(-ang.z);
1173
+ float cosy = cosf(-ang.y);
1174
+ float siny = sinf(-ang.y);
1175
+ float cosx = cosf(-ang.x);
1176
+ float sinx = sinf(-ang.x);
1177
+
1178
+ result.m0 = cosz*cosy;
1179
+ result.m4 = (cosz*siny*sinx) - (sinz*cosx);
1180
+ result.m8 = (cosz*siny*cosx) + (sinz*sinx);
1181
+
1182
+ result.m1 = sinz*cosy;
1183
+ result.m5 = (sinz*siny*sinx) + (cosz*cosx);
1184
+ result.m9 = (sinz*siny*cosx) - (cosz*sinx);
1185
+
1186
+ result.m2 = -siny;
1187
+ result.m6 = cosy*sinx;
1188
+ result.m10= cosy*cosx;
1189
+
1190
+ return result;
1191
+ }
1192
+
1193
+ // Get zyx-rotation matrix (angles in radians)
1194
+ RMAPI Matrix MatrixRotateZYX(Vector3 ang)
1195
+ {
1196
+ Matrix result = { 0 };
1197
+
1198
+ float cz = cosf(ang.z);
1199
+ float sz = sinf(ang.z);
1200
+ float cy = cosf(ang.y);
1201
+ float sy = sinf(ang.y);
1202
+ float cx = cosf(ang.x);
1203
+ float sx = sinf(ang.x);
1204
+
1205
+ result.m0 = cz*cy;
1206
+ result.m1 = cz*sy*sx - cx*sz;
1207
+ result.m2 = sz*sx + cz*cx*sy;
1208
+ result.m3 = 0;
1209
+
1210
+ result.m4 = cy*sz;
1211
+ result.m5 = cz*cx + sz*sy*sx;
1212
+ result.m6 = cx*sz*sy - cz*sx;
1213
+ result.m7 = 0;
1214
+
1215
+ result.m8 = -sy;
1216
+ result.m9 = cy*sx;
1217
+ result.m10 = cy*cx;
1218
+ result.m11 = 0;
1219
+
1220
+ result.m12 = 0;
1221
+ result.m13 = 0;
1222
+ result.m14 = 0;
1223
+ result.m15 = 1;
1224
+
1225
+ return result;
1226
+ }
1227
+
1228
+ // Get scaling matrix
1229
+ RMAPI Matrix MatrixScale(float x, float y, float z)
1230
+ {
1231
+ Matrix result = { x, 0.0f, 0.0f, 0.0f,
1232
+ 0.0f, y, 0.0f, 0.0f,
1233
+ 0.0f, 0.0f, z, 0.0f,
1234
+ 0.0f, 0.0f, 0.0f, 1.0f };
1235
+
1236
+ return result;
1237
+ }
1238
+
1239
+ // Get perspective projection matrix
1240
+ RMAPI Matrix MatrixFrustum(double left, double right, double bottom, double top, double near, double far)
1241
+ {
1242
+ Matrix result = { 0 };
1243
+
1244
+ float rl = (float)(right - left);
1245
+ float tb = (float)(top - bottom);
1246
+ float fn = (float)(far - near);
1247
+
1248
+ result.m0 = ((float)near*2.0f)/rl;
1249
+ result.m1 = 0.0f;
1250
+ result.m2 = 0.0f;
1251
+ result.m3 = 0.0f;
1252
+
1253
+ result.m4 = 0.0f;
1254
+ result.m5 = ((float)near*2.0f)/tb;
1255
+ result.m6 = 0.0f;
1256
+ result.m7 = 0.0f;
1257
+
1258
+ result.m8 = ((float)right + (float)left)/rl;
1259
+ result.m9 = ((float)top + (float)bottom)/tb;
1260
+ result.m10 = -((float)far + (float)near)/fn;
1261
+ result.m11 = -1.0f;
1262
+
1263
+ result.m12 = 0.0f;
1264
+ result.m13 = 0.0f;
1265
+ result.m14 = -((float)far*(float)near*2.0f)/fn;
1266
+ result.m15 = 0.0f;
1267
+
1268
+ return result;
1269
+ }
1270
+
1271
+ // Get perspective projection matrix
1272
+ // NOTE: Angle should be provided in radians
1273
+ RMAPI Matrix MatrixPerspective(double fovy, double aspect, double near, double far)
1274
+ {
1275
+ Matrix result = { 0 };
1276
+
1277
+ double top = near*tan(fovy*0.5);
1278
+ double bottom = -top;
1279
+ double right = top*aspect;
1280
+ double left = -right;
1281
+
1282
+ // MatrixFrustum(-right, right, -top, top, near, far);
1283
+ float rl = (float)(right - left);
1284
+ float tb = (float)(top - bottom);
1285
+ float fn = (float)(far - near);
1286
+
1287
+ result.m0 = ((float)near*2.0f)/rl;
1288
+ result.m5 = ((float)near*2.0f)/tb;
1289
+ result.m8 = ((float)right + (float)left)/rl;
1290
+ result.m9 = ((float)top + (float)bottom)/tb;
1291
+ result.m10 = -((float)far + (float)near)/fn;
1292
+ result.m11 = -1.0f;
1293
+ result.m14 = -((float)far*(float)near*2.0f)/fn;
1294
+
1295
+ return result;
1296
+ }
1297
+
1298
+ // Get orthographic projection matrix
1299
+ RMAPI Matrix MatrixOrtho(double left, double right, double bottom, double top, double near, double far)
1300
+ {
1301
+ Matrix result = { 0 };
1302
+
1303
+ float rl = (float)(right - left);
1304
+ float tb = (float)(top - bottom);
1305
+ float fn = (float)(far - near);
1306
+
1307
+ result.m0 = 2.0f/rl;
1308
+ result.m1 = 0.0f;
1309
+ result.m2 = 0.0f;
1310
+ result.m3 = 0.0f;
1311
+ result.m4 = 0.0f;
1312
+ result.m5 = 2.0f/tb;
1313
+ result.m6 = 0.0f;
1314
+ result.m7 = 0.0f;
1315
+ result.m8 = 0.0f;
1316
+ result.m9 = 0.0f;
1317
+ result.m10 = -2.0f/fn;
1318
+ result.m11 = 0.0f;
1319
+ result.m12 = -((float)left + (float)right)/rl;
1320
+ result.m13 = -((float)top + (float)bottom)/tb;
1321
+ result.m14 = -((float)far + (float)near)/fn;
1322
+ result.m15 = 1.0f;
1323
+
1324
+ return result;
1325
+ }
1326
+
1327
+ // Get camera look-at matrix (view matrix)
1328
+ RMAPI Matrix MatrixLookAt(Vector3 eye, Vector3 target, Vector3 up)
1329
+ {
1330
+ Matrix result = { 0 };
1331
+
1332
+ float length = 0.0f;
1333
+ float ilength = 0.0f;
1334
+
1335
+ // Vector3Subtract(eye, target)
1336
+ Vector3 vz = { eye.x - target.x, eye.y - target.y, eye.z - target.z };
1337
+
1338
+ // Vector3Normalize(vz)
1339
+ Vector3 v = vz;
1340
+ length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
1341
+ if (length == 0.0f) length = 1.0f;
1342
+ ilength = 1.0f/length;
1343
+ vz.x *= ilength;
1344
+ vz.y *= ilength;
1345
+ vz.z *= ilength;
1346
+
1347
+ // Vector3CrossProduct(up, vz)
1348
+ Vector3 vx = { up.y*vz.z - up.z*vz.y, up.z*vz.x - up.x*vz.z, up.x*vz.y - up.y*vz.x };
1349
+
1350
+ // Vector3Normalize(x)
1351
+ v = vx;
1352
+ length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
1353
+ if (length == 0.0f) length = 1.0f;
1354
+ ilength = 1.0f/length;
1355
+ vx.x *= ilength;
1356
+ vx.y *= ilength;
1357
+ vx.z *= ilength;
1358
+
1359
+ // Vector3CrossProduct(vz, vx)
1360
+ Vector3 vy = { vz.y*vx.z - vz.z*vx.y, vz.z*vx.x - vz.x*vx.z, vz.x*vx.y - vz.y*vx.x };
1361
+
1362
+ result.m0 = vx.x;
1363
+ result.m1 = vy.x;
1364
+ result.m2 = vz.x;
1365
+ result.m3 = 0.0f;
1366
+ result.m4 = vx.y;
1367
+ result.m5 = vy.y;
1368
+ result.m6 = vz.y;
1369
+ result.m7 = 0.0f;
1370
+ result.m8 = vx.z;
1371
+ result.m9 = vy.z;
1372
+ result.m10 = vz.z;
1373
+ result.m11 = 0.0f;
1374
+ result.m12 = -(vx.x*eye.x + vx.y*eye.y + vx.z*eye.z); // Vector3DotProduct(vx, eye)
1375
+ result.m13 = -(vy.x*eye.x + vy.y*eye.y + vy.z*eye.z); // Vector3DotProduct(vy, eye)
1376
+ result.m14 = -(vz.x*eye.x + vz.y*eye.y + vz.z*eye.z); // Vector3DotProduct(vz, eye)
1377
+ result.m15 = 1.0f;
1378
+
1379
+ return result;
1380
+ }
1381
+
1382
+ // Get float array of matrix data
1383
+ RMAPI float16 MatrixToFloatV(Matrix mat)
1384
+ {
1385
+ float16 result = { 0 };
1386
+
1387
+ result.v[0] = mat.m0;
1388
+ result.v[1] = mat.m1;
1389
+ result.v[2] = mat.m2;
1390
+ result.v[3] = mat.m3;
1391
+ result.v[4] = mat.m4;
1392
+ result.v[5] = mat.m5;
1393
+ result.v[6] = mat.m6;
1394
+ result.v[7] = mat.m7;
1395
+ result.v[8] = mat.m8;
1396
+ result.v[9] = mat.m9;
1397
+ result.v[10] = mat.m10;
1398
+ result.v[11] = mat.m11;
1399
+ result.v[12] = mat.m12;
1400
+ result.v[13] = mat.m13;
1401
+ result.v[14] = mat.m14;
1402
+ result.v[15] = mat.m15;
1403
+
1404
+ return result;
1405
+ }
1406
+
1407
+ //----------------------------------------------------------------------------------
1408
+ // Module Functions Definition - Quaternion math
1409
+ //----------------------------------------------------------------------------------
1410
+
1411
+ // Add two quaternions
1412
+ RMAPI Quaternion QuaternionAdd(Quaternion q1, Quaternion q2)
1413
+ {
1414
+ Quaternion result = {q1.x + q2.x, q1.y + q2.y, q1.z + q2.z, q1.w + q2.w};
1415
+
1416
+ return result;
1417
+ }
1418
+
1419
+ // Add quaternion and float value
1420
+ RMAPI Quaternion QuaternionAddValue(Quaternion q, float add)
1421
+ {
1422
+ Quaternion result = {q.x + add, q.y + add, q.z + add, q.w + add};
1423
+
1424
+ return result;
1425
+ }
1426
+
1427
+ // Subtract two quaternions
1428
+ RMAPI Quaternion QuaternionSubtract(Quaternion q1, Quaternion q2)
1429
+ {
1430
+ Quaternion result = {q1.x - q2.x, q1.y - q2.y, q1.z - q2.z, q1.w - q2.w};
1431
+
1432
+ return result;
1433
+ }
1434
+
1435
+ // Subtract quaternion and float value
1436
+ RMAPI Quaternion QuaternionSubtractValue(Quaternion q, float sub)
1437
+ {
1438
+ Quaternion result = {q.x - sub, q.y - sub, q.z - sub, q.w - sub};
1439
+
1440
+ return result;
1441
+ }
1442
+
1443
+ // Get identity quaternion
1444
+ RMAPI Quaternion QuaternionIdentity(void)
1445
+ {
1446
+ Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f };
1447
+
1448
+ return result;
1449
+ }
1450
+
1451
+ // Computes the length of a quaternion
1452
+ RMAPI float QuaternionLength(Quaternion q)
1453
+ {
1454
+ float result = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w);
1455
+
1456
+ return result;
1457
+ }
1458
+
1459
+ // Normalize provided quaternion
1460
+ RMAPI Quaternion QuaternionNormalize(Quaternion q)
1461
+ {
1462
+ Quaternion result = { 0 };
1463
+
1464
+ float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w);
1465
+ if (length == 0.0f) length = 1.0f;
1466
+ float ilength = 1.0f/length;
1467
+
1468
+ result.x = q.x*ilength;
1469
+ result.y = q.y*ilength;
1470
+ result.z = q.z*ilength;
1471
+ result.w = q.w*ilength;
1472
+
1473
+ return result;
1474
+ }
1475
+
1476
+ // Invert provided quaternion
1477
+ RMAPI Quaternion QuaternionInvert(Quaternion q)
1478
+ {
1479
+ Quaternion result = q;
1480
+
1481
+ float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w);
1482
+ float lengthSq = length*length;
1483
+
1484
+ if (lengthSq != 0.0)
1485
+ {
1486
+ float invLength = 1.0f/lengthSq;
1487
+
1488
+ result.x *= -invLength;
1489
+ result.y *= -invLength;
1490
+ result.z *= -invLength;
1491
+ result.w *= invLength;
1492
+ }
1493
+
1494
+ return result;
1495
+ }
1496
+
1497
+ // Calculate two quaternion multiplication
1498
+ RMAPI Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2)
1499
+ {
1500
+ Quaternion result = { 0 };
1501
+
1502
+ float qax = q1.x, qay = q1.y, qaz = q1.z, qaw = q1.w;
1503
+ float qbx = q2.x, qby = q2.y, qbz = q2.z, qbw = q2.w;
1504
+
1505
+ result.x = qax*qbw + qaw*qbx + qay*qbz - qaz*qby;
1506
+ result.y = qay*qbw + qaw*qby + qaz*qbx - qax*qbz;
1507
+ result.z = qaz*qbw + qaw*qbz + qax*qby - qay*qbx;
1508
+ result.w = qaw*qbw - qax*qbx - qay*qby - qaz*qbz;
1509
+
1510
+ return result;
1511
+ }
1512
+
1513
+ // Scale quaternion by float value
1514
+ RMAPI Quaternion QuaternionScale(Quaternion q, float mul)
1515
+ {
1516
+ Quaternion result = { 0 };
1517
+
1518
+ float qax = q.x, qay = q.y, qaz = q.z, qaw = q.w;
1519
+
1520
+ result.x = qax*mul + qaw*mul + qay*mul - qaz*mul;
1521
+ result.y = qay*mul + qaw*mul + qaz*mul - qax*mul;
1522
+ result.z = qaz*mul + qaw*mul + qax*mul - qay*mul;
1523
+ result.w = qaw*mul - qax*mul - qay*mul - qaz*mul;
1524
+
1525
+ return result;
1526
+ }
1527
+
1528
+ // Divide two quaternions
1529
+ RMAPI Quaternion QuaternionDivide(Quaternion q1, Quaternion q2)
1530
+ {
1531
+ Quaternion result = { q1.x/q2.x, q1.y/q2.y, q1.z/q2.z, q1.w/q2.w };
1532
+
1533
+ return result;
1534
+ }
1535
+
1536
+ // Calculate linear interpolation between two quaternions
1537
+ RMAPI Quaternion QuaternionLerp(Quaternion q1, Quaternion q2, float amount)
1538
+ {
1539
+ Quaternion result = { 0 };
1540
+
1541
+ result.x = q1.x + amount*(q2.x - q1.x);
1542
+ result.y = q1.y + amount*(q2.y - q1.y);
1543
+ result.z = q1.z + amount*(q2.z - q1.z);
1544
+ result.w = q1.w + amount*(q2.w - q1.w);
1545
+
1546
+ return result;
1547
+ }
1548
+
1549
+ // Calculate slerp-optimized interpolation between two quaternions
1550
+ RMAPI Quaternion QuaternionNlerp(Quaternion q1, Quaternion q2, float amount)
1551
+ {
1552
+ Quaternion result = { 0 };
1553
+
1554
+ // QuaternionLerp(q1, q2, amount)
1555
+ result.x = q1.x + amount*(q2.x - q1.x);
1556
+ result.y = q1.y + amount*(q2.y - q1.y);
1557
+ result.z = q1.z + amount*(q2.z - q1.z);
1558
+ result.w = q1.w + amount*(q2.w - q1.w);
1559
+
1560
+ // QuaternionNormalize(q);
1561
+ Quaternion q = result;
1562
+ float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w);
1563
+ if (length == 0.0f) length = 1.0f;
1564
+ float ilength = 1.0f/length;
1565
+
1566
+ result.x = q.x*ilength;
1567
+ result.y = q.y*ilength;
1568
+ result.z = q.z*ilength;
1569
+ result.w = q.w*ilength;
1570
+
1571
+ return result;
1572
+ }
1573
+
1574
+ // Calculates spherical linear interpolation between two quaternions
1575
+ RMAPI Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount)
1576
+ {
1577
+ Quaternion result = { 0 };
1578
+
1579
+ float cosHalfTheta = q1.x*q2.x + q1.y*q2.y + q1.z*q2.z + q1.w*q2.w;
1580
+
1581
+ if (cosHalfTheta < 0)
1582
+ {
1583
+ q2.x = -q2.x; q2.y = -q2.y; q2.z = -q2.z; q2.w = -q2.w;
1584
+ cosHalfTheta = -cosHalfTheta;
1585
+ }
1586
+
1587
+ if (fabs(cosHalfTheta) >= 1.0f) result = q1;
1588
+ else if (cosHalfTheta > 0.95f) result = QuaternionNlerp(q1, q2, amount);
1589
+ else
1590
+ {
1591
+ float halfTheta = acosf(cosHalfTheta);
1592
+ float sinHalfTheta = sqrtf(1.0f - cosHalfTheta*cosHalfTheta);
1593
+
1594
+ if (fabs(sinHalfTheta) < 0.001f)
1595
+ {
1596
+ result.x = (q1.x*0.5f + q2.x*0.5f);
1597
+ result.y = (q1.y*0.5f + q2.y*0.5f);
1598
+ result.z = (q1.z*0.5f + q2.z*0.5f);
1599
+ result.w = (q1.w*0.5f + q2.w*0.5f);
1600
+ }
1601
+ else
1602
+ {
1603
+ float ratioA = sinf((1 - amount)*halfTheta)/sinHalfTheta;
1604
+ float ratioB = sinf(amount*halfTheta)/sinHalfTheta;
1605
+
1606
+ result.x = (q1.x*ratioA + q2.x*ratioB);
1607
+ result.y = (q1.y*ratioA + q2.y*ratioB);
1608
+ result.z = (q1.z*ratioA + q2.z*ratioB);
1609
+ result.w = (q1.w*ratioA + q2.w*ratioB);
1610
+ }
1611
+ }
1612
+
1613
+ return result;
1614
+ }
1615
+
1616
+ // Calculate quaternion based on the rotation from one vector to another
1617
+ RMAPI Quaternion QuaternionFromVector3ToVector3(Vector3 from, Vector3 to)
1618
+ {
1619
+ Quaternion result = { 0 };
1620
+
1621
+ float cos2Theta = (from.x*to.x + from.y*to.y + from.z*to.z); // Vector3DotProduct(from, to)
1622
+ Vector3 cross = { from.y*to.z - from.z*to.y, from.z*to.x - from.x*to.z, from.x*to.y - from.y*to.x }; // Vector3CrossProduct(from, to)
1623
+
1624
+ result.x = cross.x;
1625
+ result.y = cross.y;
1626
+ result.z = cross.z;
1627
+ result.w = 1.0f + cos2Theta;
1628
+
1629
+ // QuaternionNormalize(q);
1630
+ // NOTE: Normalize to essentially nlerp the original and identity to 0.5
1631
+ Quaternion q = result;
1632
+ float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w);
1633
+ if (length == 0.0f) length = 1.0f;
1634
+ float ilength = 1.0f/length;
1635
+
1636
+ result.x = q.x*ilength;
1637
+ result.y = q.y*ilength;
1638
+ result.z = q.z*ilength;
1639
+ result.w = q.w*ilength;
1640
+
1641
+ return result;
1642
+ }
1643
+
1644
+ // Get a quaternion for a given rotation matrix
1645
+ RMAPI Quaternion QuaternionFromMatrix(Matrix mat)
1646
+ {
1647
+ Quaternion result = { 0 };
1648
+
1649
+ if ((mat.m0 > mat.m5) && (mat.m0 > mat.m10))
1650
+ {
1651
+ float s = sqrtf(1.0f + mat.m0 - mat.m5 - mat.m10)*2;
1652
+
1653
+ result.x = 0.25f*s;
1654
+ result.y = (mat.m4 + mat.m1)/s;
1655
+ result.z = (mat.m2 + mat.m8)/s;
1656
+ result.w = (mat.m9 - mat.m6)/s;
1657
+ }
1658
+ else if (mat.m5 > mat.m10)
1659
+ {
1660
+ float s = sqrtf(1.0f + mat.m5 - mat.m0 - mat.m10)*2;
1661
+ result.x = (mat.m4 + mat.m1)/s;
1662
+ result.y = 0.25f*s;
1663
+ result.z = (mat.m9 + mat.m6)/s;
1664
+ result.w = (mat.m2 - mat.m8)/s;
1665
+ }
1666
+ else
1667
+ {
1668
+ float s = sqrtf(1.0f + mat.m10 - mat.m0 - mat.m5)*2;
1669
+ result.x = (mat.m2 + mat.m8)/s;
1670
+ result.y = (mat.m9 + mat.m6)/s;
1671
+ result.z = 0.25f*s;
1672
+ result.w = (mat.m4 - mat.m1)/s;
1673
+ }
1674
+
1675
+ return result;
1676
+ }
1677
+
1678
+ // Get a matrix for a given quaternion
1679
+ RMAPI Matrix QuaternionToMatrix(Quaternion q)
1680
+ {
1681
+ Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f,
1682
+ 0.0f, 1.0f, 0.0f, 0.0f,
1683
+ 0.0f, 0.0f, 1.0f, 0.0f,
1684
+ 0.0f, 0.0f, 0.0f, 1.0f }; // MatrixIdentity()
1685
+
1686
+ float a2 = q.x*q.x;
1687
+ float b2 = q.y*q.y;
1688
+ float c2 = q.z*q.z;
1689
+ float ac = q.x*q.z;
1690
+ float ab = q.x*q.y;
1691
+ float bc = q.y*q.z;
1692
+ float ad = q.w*q.x;
1693
+ float bd = q.w*q.y;
1694
+ float cd = q.w*q.z;
1695
+
1696
+ result.m0 = 1 - 2*(b2 + c2);
1697
+ result.m1 = 2*(ab + cd);
1698
+ result.m2 = 2*(ac - bd);
1699
+
1700
+ result.m4 = 2*(ab - cd);
1701
+ result.m5 = 1 - 2*(a2 + c2);
1702
+ result.m6 = 2*(bc + ad);
1703
+
1704
+ result.m8 = 2*(ac + bd);
1705
+ result.m9 = 2*(bc - ad);
1706
+ result.m10 = 1 - 2*(a2 + b2);
1707
+
1708
+ return result;
1709
+ }
1710
+
1711
+ // Get rotation quaternion for an angle and axis
1712
+ // NOTE: angle must be provided in radians
1713
+ RMAPI Quaternion QuaternionFromAxisAngle(Vector3 axis, float angle)
1714
+ {
1715
+ Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f };
1716
+
1717
+ float axisLength = sqrtf(axis.x*axis.x + axis.y*axis.y + axis.z*axis.z);
1718
+
1719
+ if (axisLength != 0.0f)
1720
+ {
1721
+ angle *= 0.5f;
1722
+
1723
+ float length = 0.0f;
1724
+ float ilength = 0.0f;
1725
+
1726
+ // Vector3Normalize(axis)
1727
+ Vector3 v = axis;
1728
+ length = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
1729
+ if (length == 0.0f) length = 1.0f;
1730
+ ilength = 1.0f/length;
1731
+ axis.x *= ilength;
1732
+ axis.y *= ilength;
1733
+ axis.z *= ilength;
1734
+
1735
+ float sinres = sinf(angle);
1736
+ float cosres = cosf(angle);
1737
+
1738
+ result.x = axis.x*sinres;
1739
+ result.y = axis.y*sinres;
1740
+ result.z = axis.z*sinres;
1741
+ result.w = cosres;
1742
+
1743
+ // QuaternionNormalize(q);
1744
+ Quaternion q = result;
1745
+ length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w);
1746
+ if (length == 0.0f) length = 1.0f;
1747
+ ilength = 1.0f/length;
1748
+ result.x = q.x*ilength;
1749
+ result.y = q.y*ilength;
1750
+ result.z = q.z*ilength;
1751
+ result.w = q.w*ilength;
1752
+ }
1753
+
1754
+ return result;
1755
+ }
1756
+
1757
+ // Get the rotation angle and axis for a given quaternion
1758
+ RMAPI void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle)
1759
+ {
1760
+ if (fabs(q.w) > 1.0f)
1761
+ {
1762
+ // QuaternionNormalize(q);
1763
+ float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w);
1764
+ if (length == 0.0f) length = 1.0f;
1765
+ float ilength = 1.0f/length;
1766
+
1767
+ q.x = q.x*ilength;
1768
+ q.y = q.y*ilength;
1769
+ q.z = q.z*ilength;
1770
+ q.w = q.w*ilength;
1771
+ }
1772
+
1773
+ Vector3 resAxis = { 0.0f, 0.0f, 0.0f };
1774
+ float resAngle = 2.0f*acosf(q.w);
1775
+ float den = sqrtf(1.0f - q.w*q.w);
1776
+
1777
+ if (den > 0.0001f)
1778
+ {
1779
+ resAxis.x = q.x/den;
1780
+ resAxis.y = q.y/den;
1781
+ resAxis.z = q.z/den;
1782
+ }
1783
+ else
1784
+ {
1785
+ // This occurs when the angle is zero.
1786
+ // Not a problem: just set an arbitrary normalized axis.
1787
+ resAxis.x = 1.0f;
1788
+ }
1789
+
1790
+ *outAxis = resAxis;
1791
+ *outAngle = resAngle;
1792
+ }
1793
+
1794
+ // Get the quaternion equivalent to Euler angles
1795
+ // NOTE: Rotation order is ZYX
1796
+ RMAPI Quaternion QuaternionFromEuler(float pitch, float yaw, float roll)
1797
+ {
1798
+ Quaternion result = { 0 };
1799
+
1800
+ float x0 = cosf(pitch*0.5f);
1801
+ float x1 = sinf(pitch*0.5f);
1802
+ float y0 = cosf(yaw*0.5f);
1803
+ float y1 = sinf(yaw*0.5f);
1804
+ float z0 = cosf(roll*0.5f);
1805
+ float z1 = sinf(roll*0.5f);
1806
+
1807
+ result.x = x1*y0*z0 - x0*y1*z1;
1808
+ result.y = x0*y1*z0 + x1*y0*z1;
1809
+ result.z = x0*y0*z1 - x1*y1*z0;
1810
+ result.w = x0*y0*z0 + x1*y1*z1;
1811
+
1812
+ return result;
1813
+ }
1814
+
1815
+ // Get the Euler angles equivalent to quaternion (roll, pitch, yaw)
1816
+ // NOTE: Angles are returned in a Vector3 struct in radians
1817
+ RMAPI Vector3 QuaternionToEuler(Quaternion q)
1818
+ {
1819
+ Vector3 result = { 0 };
1820
+
1821
+ // Roll (x-axis rotation)
1822
+ float x0 = 2.0f*(q.w*q.x + q.y*q.z);
1823
+ float x1 = 1.0f - 2.0f*(q.x*q.x + q.y*q.y);
1824
+ result.x = atan2f(x0, x1);
1825
+
1826
+ // Pitch (y-axis rotation)
1827
+ float y0 = 2.0f*(q.w*q.y - q.z*q.x);
1828
+ y0 = y0 > 1.0f ? 1.0f : y0;
1829
+ y0 = y0 < -1.0f ? -1.0f : y0;
1830
+ result.y = asinf(y0);
1831
+
1832
+ // Yaw (z-axis rotation)
1833
+ float z0 = 2.0f*(q.w*q.z + q.x*q.y);
1834
+ float z1 = 1.0f - 2.0f*(q.y*q.y + q.z*q.z);
1835
+ result.z = atan2f(z0, z1);
1836
+
1837
+ return result;
1838
+ }
1839
+
1840
+ // Transform a quaternion given a transformation matrix
1841
+ RMAPI Quaternion QuaternionTransform(Quaternion q, Matrix mat)
1842
+ {
1843
+ Quaternion result = { 0 };
1844
+
1845
+ result.x = mat.m0*q.x + mat.m4*q.y + mat.m8*q.z + mat.m12*q.w;
1846
+ result.y = mat.m1*q.x + mat.m5*q.y + mat.m9*q.z + mat.m13*q.w;
1847
+ result.z = mat.m2*q.x + mat.m6*q.y + mat.m10*q.z + mat.m14*q.w;
1848
+ result.w = mat.m3*q.x + mat.m7*q.y + mat.m11*q.z + mat.m15*q.w;
1849
+
1850
+ return result;
1851
+ }
1852
+
1853
+ #endif // RAYMATH_H