koffi 0.9.6 → 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.
- package/LICENSE.txt +661 -0
- package/README.md +195 -162
- package/package.json +36 -19
- package/src/call.hh +28 -27
- package/src/call_arm32.cc +498 -514
- package/src/call_arm32_fwd.S +108 -108
- package/src/call_arm64.cc +482 -497
- package/src/call_arm64_fwd.S +110 -110
- package/src/call_x64_sysv.cc +463 -477
- package/src/call_x64_sysv_fwd.S +131 -131
- package/src/call_x64_win.cc +240 -243
- package/src/call_x64_win_fwd.asm +105 -105
- package/src/call_x86.cc +246 -259
- package/src/call_x86_fwd.S +48 -48
- package/src/call_x86_fwd.asm +50 -50
- package/src/ffi.cc +506 -504
- package/src/ffi.hh +142 -136
- package/src/util.cc +330 -297
- package/src/util.hh +164 -80
- package/test/qemu/.gitkeep +0 -0
- package/test/registry/machines.json +112 -0
- package/test/registry/sha256sum.txt +21 -0
- package/test/test.js +493 -0
- package/vendor/dragonbox/include/dragonbox/dragonbox.h +2674 -2674
- package/vendor/dragonbox/subproject/test/results/binary32.csv +255 -255
- package/vendor/dragonbox/subproject/test/results/binary64.csv +2047 -2047
- package/vendor/libcc/libcc.cc +7669 -7651
- package/vendor/libcc/libcc.hh +4334 -4312
- package/vendor/node-addon-api/CHANGELOG.md +859 -859
- package/vendor/node-addon-api/CODE_OF_CONDUCT.md +4 -4
- package/vendor/node-addon-api/CONTRIBUTING.md +93 -93
- package/vendor/node-addon-api/LICENSE.md +12 -12
- package/vendor/node-addon-api/README.md +293 -293
- package/vendor/node-addon-api/appveyor.yml +37 -37
- package/vendor/node-addon-api/benchmark/README.md +47 -47
- package/vendor/node-addon-api/benchmark/binding.gyp +25 -25
- package/vendor/node-addon-api/benchmark/function_args.cc +217 -217
- package/vendor/node-addon-api/benchmark/function_args.js +60 -60
- package/vendor/node-addon-api/benchmark/index.js +34 -34
- package/vendor/node-addon-api/benchmark/property_descriptor.cc +91 -91
- package/vendor/node-addon-api/benchmark/property_descriptor.js +37 -37
- package/vendor/node-addon-api/common.gypi +21 -21
- package/vendor/node-addon-api/doc/addon.md +163 -163
- package/vendor/node-addon-api/doc/array.md +81 -81
- package/vendor/node-addon-api/doc/array_buffer.md +155 -155
- package/vendor/node-addon-api/doc/async_context.md +86 -86
- package/vendor/node-addon-api/doc/async_operations.md +31 -31
- package/vendor/node-addon-api/doc/async_worker.md +427 -427
- package/vendor/node-addon-api/doc/async_worker_variants.md +557 -557
- package/vendor/node-addon-api/doc/bigint.md +97 -97
- package/vendor/node-addon-api/doc/boolean.md +68 -68
- package/vendor/node-addon-api/doc/buffer.md +150 -150
- package/vendor/node-addon-api/doc/callback_scope.md +54 -54
- package/vendor/node-addon-api/doc/callbackinfo.md +97 -97
- package/vendor/node-addon-api/doc/checker-tool.md +32 -32
- package/vendor/node-addon-api/doc/class_property_descriptor.md +115 -115
- package/vendor/node-addon-api/doc/cmake-js.md +68 -68
- package/vendor/node-addon-api/doc/conversion-tool.md +27 -27
- package/vendor/node-addon-api/doc/creating_a_release.md +62 -62
- package/vendor/node-addon-api/doc/dataview.md +248 -248
- package/vendor/node-addon-api/doc/date.md +68 -68
- package/vendor/node-addon-api/doc/env.md +196 -196
- package/vendor/node-addon-api/doc/error.md +120 -120
- package/vendor/node-addon-api/doc/error_handling.md +254 -254
- package/vendor/node-addon-api/doc/escapable_handle_scope.md +80 -80
- package/vendor/node-addon-api/doc/external.md +63 -63
- package/vendor/node-addon-api/doc/function.md +402 -402
- package/vendor/node-addon-api/doc/function_reference.md +238 -238
- package/vendor/node-addon-api/doc/generator.md +13 -13
- package/vendor/node-addon-api/doc/handle_scope.md +63 -63
- package/vendor/node-addon-api/doc/hierarchy.md +91 -91
- package/vendor/node-addon-api/doc/instance_wrap.md +408 -408
- package/vendor/node-addon-api/doc/maybe.md +76 -76
- package/vendor/node-addon-api/doc/memory_management.md +27 -27
- package/vendor/node-addon-api/doc/name.md +29 -29
- package/vendor/node-addon-api/doc/node-gyp.md +82 -82
- package/vendor/node-addon-api/doc/number.md +163 -163
- package/vendor/node-addon-api/doc/object.md +432 -432
- package/vendor/node-addon-api/doc/object_lifetime_management.md +83 -83
- package/vendor/node-addon-api/doc/object_reference.md +117 -117
- package/vendor/node-addon-api/doc/object_wrap.md +561 -561
- package/vendor/node-addon-api/doc/prebuild_tools.md +16 -16
- package/vendor/node-addon-api/doc/promises.md +79 -79
- package/vendor/node-addon-api/doc/property_descriptor.md +286 -286
- package/vendor/node-addon-api/doc/propertylvalue.md +50 -50
- package/vendor/node-addon-api/doc/range_error.md +59 -59
- package/vendor/node-addon-api/doc/reference.md +113 -113
- package/vendor/node-addon-api/doc/setup.md +110 -110
- package/vendor/node-addon-api/doc/string.md +93 -93
- package/vendor/node-addon-api/doc/symbol.md +60 -60
- package/vendor/node-addon-api/doc/threadsafe.md +121 -121
- package/vendor/node-addon-api/doc/threadsafe_function.md +290 -290
- package/vendor/node-addon-api/doc/type_error.md +59 -59
- package/vendor/node-addon-api/doc/typed_array.md +78 -78
- package/vendor/node-addon-api/doc/typed_array_of.md +137 -137
- package/vendor/node-addon-api/doc/typed_threadsafe_function.md +306 -306
- package/vendor/node-addon-api/doc/value.md +340 -340
- package/vendor/node-addon-api/doc/version_management.md +43 -43
- package/vendor/node-addon-api/except.gypi +25 -25
- package/vendor/node-addon-api/index.js +11 -11
- package/vendor/node-addon-api/napi-inl.deprecated.h +192 -192
- package/vendor/node-addon-api/napi-inl.h +6209 -6209
- package/vendor/node-addon-api/napi.h +2983 -2983
- package/vendor/node-addon-api/node_api.gyp +9 -9
- package/vendor/node-addon-api/noexcept.gypi +26 -26
- package/vendor/node-addon-api/package-support.json +21 -21
- package/vendor/node-addon-api/package.json +399 -399
- package/vendor/node-addon-api/test/README.md +91 -91
- package/vendor/node-addon-api/test/addon.cc +36 -36
- package/vendor/node-addon-api/test/addon.js +11 -11
- package/vendor/node-addon-api/test/addon_build/index.js +49 -49
- package/vendor/node-addon-api/test/addon_build/tpl/addon.cc +17 -17
- package/vendor/node-addon-api/test/addon_build/tpl/binding.gyp +62 -62
- package/vendor/node-addon-api/test/addon_build/tpl/index.js +9 -9
- package/vendor/node-addon-api/test/addon_build/tpl/package.json +11 -11
- package/vendor/node-addon-api/test/addon_data.cc +99 -99
- package/vendor/node-addon-api/test/addon_data.js +46 -46
- package/vendor/node-addon-api/test/array_buffer.cc +243 -243
- package/vendor/node-addon-api/test/array_buffer.js +69 -69
- package/vendor/node-addon-api/test/async_context.cc +21 -21
- package/vendor/node-addon-api/test/async_context.js +86 -86
- package/vendor/node-addon-api/test/async_progress_queue_worker.cc +83 -83
- package/vendor/node-addon-api/test/async_progress_queue_worker.js +46 -46
- package/vendor/node-addon-api/test/async_progress_worker.cc +134 -134
- package/vendor/node-addon-api/test/async_progress_worker.js +61 -61
- package/vendor/node-addon-api/test/async_worker.cc +106 -106
- package/vendor/node-addon-api/test/async_worker.js +179 -179
- package/vendor/node-addon-api/test/async_worker_nocallback.js +13 -13
- package/vendor/node-addon-api/test/async_worker_persistent.cc +63 -63
- package/vendor/node-addon-api/test/async_worker_persistent.js +24 -24
- package/vendor/node-addon-api/test/basic_types/array.cc +40 -40
- package/vendor/node-addon-api/test/basic_types/array.js +35 -35
- package/vendor/node-addon-api/test/basic_types/boolean.cc +38 -38
- package/vendor/node-addon-api/test/basic_types/boolean.js +35 -35
- package/vendor/node-addon-api/test/basic_types/number.cc +99 -99
- package/vendor/node-addon-api/test/basic_types/number.js +114 -114
- package/vendor/node-addon-api/test/basic_types/value.cc +120 -120
- package/vendor/node-addon-api/test/basic_types/value.js +133 -133
- package/vendor/node-addon-api/test/bigint.cc +91 -91
- package/vendor/node-addon-api/test/bigint.js +53 -53
- package/vendor/node-addon-api/test/binding-swallowexcept.cc +12 -12
- package/vendor/node-addon-api/test/binding.cc +171 -171
- package/vendor/node-addon-api/test/binding.gyp +117 -117
- package/vendor/node-addon-api/test/buffer.cc +183 -183
- package/vendor/node-addon-api/test/buffer.js +69 -69
- package/vendor/node-addon-api/test/callbackscope.cc +22 -22
- package/vendor/node-addon-api/test/callbackscope.js +49 -49
- package/vendor/node-addon-api/test/common/index.js +113 -113
- package/vendor/node-addon-api/test/common/test_helper.h +61 -61
- package/vendor/node-addon-api/test/dataview/dataview.cc +48 -48
- package/vendor/node-addon-api/test/dataview/dataview.js +35 -35
- package/vendor/node-addon-api/test/dataview/dataview_read_write.cc +115 -115
- package/vendor/node-addon-api/test/dataview/dataview_read_write.js +90 -90
- package/vendor/node-addon-api/test/date.cc +44 -44
- package/vendor/node-addon-api/test/date.js +18 -18
- package/vendor/node-addon-api/test/env_cleanup.cc +88 -88
- package/vendor/node-addon-api/test/env_cleanup.js +56 -56
- package/vendor/node-addon-api/test/error.cc +287 -287
- package/vendor/node-addon-api/test/error.js +81 -81
- package/vendor/node-addon-api/test/error_handling_for_primitives.cc +13 -13
- package/vendor/node-addon-api/test/error_handling_for_primitives.js +29 -29
- package/vendor/node-addon-api/test/error_terminating_environment.js +94 -94
- package/vendor/node-addon-api/test/external.cc +81 -81
- package/vendor/node-addon-api/test/external.js +88 -88
- package/vendor/node-addon-api/test/function.cc +295 -295
- package/vendor/node-addon-api/test/function.js +121 -121
- package/vendor/node-addon-api/test/function_reference.cc +202 -202
- package/vendor/node-addon-api/test/function_reference.js +157 -157
- package/vendor/node-addon-api/test/globalObject/global_object.cc +61 -61
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.cc +31 -31
- package/vendor/node-addon-api/test/globalObject/global_object_delete_property.js +61 -61
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.cc +40 -40
- package/vendor/node-addon-api/test/globalObject/global_object_get_property.js +57 -57
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.cc +28 -28
- package/vendor/node-addon-api/test/globalObject/global_object_has_own_property.js +48 -48
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.cc +30 -30
- package/vendor/node-addon-api/test/globalObject/global_object_set_property.js +58 -58
- package/vendor/node-addon-api/test/handlescope.cc +60 -60
- package/vendor/node-addon-api/test/handlescope.js +14 -14
- package/vendor/node-addon-api/test/index.js +136 -136
- package/vendor/node-addon-api/test/maybe/check.cc +23 -23
- package/vendor/node-addon-api/test/maybe/index.js +38 -38
- package/vendor/node-addon-api/test/memory_management.cc +17 -17
- package/vendor/node-addon-api/test/memory_management.js +9 -9
- package/vendor/node-addon-api/test/movable_callbacks.cc +23 -23
- package/vendor/node-addon-api/test/movable_callbacks.js +21 -21
- package/vendor/node-addon-api/test/name.cc +108 -108
- package/vendor/node-addon-api/test/name.js +59 -59
- package/vendor/node-addon-api/test/napi_child.js +14 -14
- package/vendor/node-addon-api/test/object/delete_property.cc +38 -38
- package/vendor/node-addon-api/test/object/delete_property.js +41 -41
- package/vendor/node-addon-api/test/object/finalizer.cc +29 -29
- package/vendor/node-addon-api/test/object/finalizer.js +28 -28
- package/vendor/node-addon-api/test/object/get_property.cc +34 -34
- package/vendor/node-addon-api/test/object/get_property.js +40 -40
- package/vendor/node-addon-api/test/object/has_own_property.cc +34 -34
- package/vendor/node-addon-api/test/object/has_own_property.js +34 -34
- package/vendor/node-addon-api/test/object/has_property.cc +38 -38
- package/vendor/node-addon-api/test/object/has_property.js +37 -37
- package/vendor/node-addon-api/test/object/object.cc +348 -348
- package/vendor/node-addon-api/test/object/object.js +217 -217
- package/vendor/node-addon-api/test/object/object_deprecated.cc +66 -66
- package/vendor/node-addon-api/test/object/object_deprecated.js +47 -47
- package/vendor/node-addon-api/test/object/object_freeze_seal.cc +25 -25
- package/vendor/node-addon-api/test/object/object_freeze_seal.js +61 -61
- package/vendor/node-addon-api/test/object/set_property.cc +37 -37
- package/vendor/node-addon-api/test/object/set_property.js +29 -29
- package/vendor/node-addon-api/test/object/subscript_operator.cc +42 -42
- package/vendor/node-addon-api/test/object/subscript_operator.js +17 -17
- package/vendor/node-addon-api/test/object_reference.cc +219 -219
- package/vendor/node-addon-api/test/object_reference.js +259 -259
- package/vendor/node-addon-api/test/objectwrap.cc +268 -268
- package/vendor/node-addon-api/test/objectwrap.js +284 -284
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.cc +26 -26
- package/vendor/node-addon-api/test/objectwrap_constructor_exception.js +18 -18
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.cc +30 -30
- package/vendor/node-addon-api/test/objectwrap_multiple_inheritance.js +13 -13
- package/vendor/node-addon-api/test/objectwrap_removewrap.cc +45 -45
- package/vendor/node-addon-api/test/objectwrap_removewrap.js +40 -40
- package/vendor/node-addon-api/test/objectwrap_worker_thread.js +19 -19
- package/vendor/node-addon-api/test/promise.cc +29 -29
- package/vendor/node-addon-api/test/promise.js +18 -18
- package/vendor/node-addon-api/test/reference.cc +24 -24
- package/vendor/node-addon-api/test/reference.js +14 -14
- package/vendor/node-addon-api/test/run_script.cc +56 -56
- package/vendor/node-addon-api/test/run_script.js +45 -45
- package/vendor/node-addon-api/test/symbol.cc +79 -79
- package/vendor/node-addon-api/test/symbol.js +73 -73
- package/vendor/node-addon-api/test/testUtil.js +54 -54
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.cc +195 -195
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function.js +188 -188
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.cc +63 -63
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ctx.js +12 -12
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.cc +115 -115
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_existing_tsfn.js +14 -14
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.cc +26 -26
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_ptr.js +7 -7
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.cc +225 -225
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_sum.js +59 -59
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.cc +42 -42
- package/vendor/node-addon-api/test/threadsafe_function/threadsafe_function_unref.js +53 -53
- package/vendor/node-addon-api/test/thunking_manual.cc +140 -140
- package/vendor/node-addon-api/test/thunking_manual.js +17 -17
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.cc +215 -215
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function.js +188 -188
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.cc +68 -68
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ctx.js +12 -12
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.cc +127 -127
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_existing_tsfn.js +14 -14
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.cc +28 -28
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_ptr.js +7 -7
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.cc +237 -237
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_sum.js +59 -59
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.cc +53 -53
- package/vendor/node-addon-api/test/typed_threadsafe_function/typed_threadsafe_function_unref.js +53 -53
- package/vendor/node-addon-api/test/typedarray-bigint.js +58 -58
- package/vendor/node-addon-api/test/typedarray.cc +216 -216
- package/vendor/node-addon-api/test/typedarray.js +69 -69
- package/vendor/node-addon-api/test/version_management.cc +27 -27
- package/vendor/node-addon-api/test/version_management.js +31 -31
- package/vendor/node-addon-api/tools/README.md +73 -73
- package/vendor/node-addon-api/tools/check-napi.js +100 -100
- package/vendor/node-addon-api/tools/clang-format.js +68 -68
- package/vendor/node-addon-api/tools/conversion.js +309 -309
- package/vendor/node-addon-api/tools/eslint-format.js +71 -71
- package/vendor/raylib/BINDINGS.md +123 -0
- package/vendor/raylib/CHANGELOG +1495 -0
- package/vendor/raylib/CMakeLists.txt +33 -0
- package/vendor/raylib/CMakeOptions.txt +87 -0
- package/vendor/raylib/CONTRIBUTING.md +76 -0
- package/vendor/raylib/CONTRIBUTORS.md +63 -0
- package/vendor/raylib/CONVENTIONS.md +95 -0
- package/vendor/raylib/HISTORY.md +364 -0
- package/vendor/raylib/LICENSE +16 -0
- package/vendor/raylib/README.md +141 -0
- package/vendor/raylib/ROADMAP.md +76 -0
- package/vendor/raylib/SPONSORS.md +68 -0
- package/vendor/raylib/cmake/AddIfFlagCompiles.cmake +12 -0
- package/vendor/raylib/cmake/BuildOptions.cmake +18 -0
- package/vendor/raylib/cmake/CompileDefinitions.cmake +110 -0
- package/vendor/raylib/cmake/CompilerFlags.cmake +79 -0
- package/vendor/raylib/cmake/EnumOption.cmake +9 -0
- package/vendor/raylib/cmake/GlfwImport.cmake +34 -0
- package/vendor/raylib/cmake/InstallConfigurations.cmake +29 -0
- package/vendor/raylib/cmake/JoinPaths.cmake +26 -0
- package/vendor/raylib/cmake/LibraryConfigurations.cmake +108 -0
- package/vendor/raylib/cmake/LibraryPathToLinkerFlags.cmake +24 -0
- package/vendor/raylib/cmake/PackConfigurations.cmake +13 -0
- package/vendor/raylib/cmake/PopulateConfigVariablesLocally.cmake +11 -0
- package/vendor/raylib/cmake/raylib-config-version.cmake +21 -0
- package/vendor/raylib/cmake/raylib-config.cmake +76 -0
- package/vendor/raylib/examples/CMakeLists.txt +139 -0
- package/vendor/raylib/examples/Makefile +565 -0
- package/vendor/raylib/examples/Makefile.Android +405 -0
- package/vendor/raylib/examples/Makefile.Web +1053 -0
- package/vendor/raylib/examples/README.md +203 -0
- package/vendor/raylib/examples/audio/audio_module_playing.c +146 -0
- package/vendor/raylib/examples/audio/audio_module_playing.png +0 -0
- package/vendor/raylib/examples/audio/audio_multichannel_sound.c +73 -0
- package/vendor/raylib/examples/audio/audio_multichannel_sound.png +0 -0
- package/vendor/raylib/examples/audio/audio_music_stream.c +93 -0
- package/vendor/raylib/examples/audio/audio_music_stream.png +0 -0
- package/vendor/raylib/examples/audio/audio_raw_stream.c +167 -0
- package/vendor/raylib/examples/audio/audio_raw_stream.png +0 -0
- package/vendor/raylib/examples/audio/audio_sound_loading.c +64 -0
- package/vendor/raylib/examples/audio/audio_sound_loading.png +0 -0
- package/vendor/raylib/examples/audio/resources/LICENSE.md +10 -0
- package/vendor/raylib/examples/audio/resources/coin.wav +0 -0
- package/vendor/raylib/examples/audio/resources/country.mp3 +0 -0
- package/vendor/raylib/examples/audio/resources/mini1111.xm +0 -0
- package/vendor/raylib/examples/audio/resources/sound.wav +0 -0
- package/vendor/raylib/examples/audio/resources/spring.wav +0 -0
- package/vendor/raylib/examples/audio/resources/target.flac +0 -0
- package/vendor/raylib/examples/audio/resources/target.ogg +0 -0
- package/vendor/raylib/examples/audio/resources/weird.wav +0 -0
- package/vendor/raylib/examples/build.zig +86 -0
- package/vendor/raylib/examples/core/core_2d_camera.c +132 -0
- package/vendor/raylib/examples/core/core_2d_camera.png +0 -0
- package/vendor/raylib/examples/core/core_2d_camera_platformer.c +293 -0
- package/vendor/raylib/examples/core/core_2d_camera_platformer.png +0 -0
- package/vendor/raylib/examples/core/core_2d_camera_smooth_pixelperfect.png +0 -0
- package/vendor/raylib/examples/core/core_3d_camera_first_person.c +97 -0
- package/vendor/raylib/examples/core/core_3d_camera_first_person.png +0 -0
- package/vendor/raylib/examples/core/core_3d_camera_free.c +83 -0
- package/vendor/raylib/examples/core/core_3d_camera_free.png +0 -0
- package/vendor/raylib/examples/core/core_3d_camera_mode.c +73 -0
- package/vendor/raylib/examples/core/core_3d_camera_mode.png +0 -0
- package/vendor/raylib/examples/core/core_3d_picking.c +107 -0
- package/vendor/raylib/examples/core/core_3d_picking.png +0 -0
- package/vendor/raylib/examples/core/core_basic_screen_manager.c +150 -0
- package/vendor/raylib/examples/core/core_basic_screen_manager.png +0 -0
- package/vendor/raylib/examples/core/core_basic_window.c +62 -0
- package/vendor/raylib/examples/core/core_basic_window.png +0 -0
- package/vendor/raylib/examples/core/core_basic_window_web.c +85 -0
- package/vendor/raylib/examples/core/core_custom_frame_control.c +125 -0
- package/vendor/raylib/examples/core/core_custom_frame_control.png +0 -0
- package/vendor/raylib/examples/core/core_custom_logging.c +84 -0
- package/vendor/raylib/examples/core/core_custom_logging.png +0 -0
- package/vendor/raylib/examples/core/core_drop_files.c +76 -0
- package/vendor/raylib/examples/core/core_drop_files.png +0 -0
- package/vendor/raylib/examples/core/core_input_gamepad.c +195 -0
- package/vendor/raylib/examples/core/core_input_gamepad.png +0 -0
- package/vendor/raylib/examples/core/core_input_gestures.c +115 -0
- package/vendor/raylib/examples/core/core_input_gestures.png +0 -0
- package/vendor/raylib/examples/core/core_input_keys.c +59 -0
- package/vendor/raylib/examples/core/core_input_keys.png +0 -0
- package/vendor/raylib/examples/core/core_input_mouse.c +65 -0
- package/vendor/raylib/examples/core/core_input_mouse.png +0 -0
- package/vendor/raylib/examples/core/core_input_mouse_wheel.c +58 -0
- package/vendor/raylib/examples/core/core_input_mouse_wheel.png +0 -0
- package/vendor/raylib/examples/core/core_input_multitouch.c +70 -0
- package/vendor/raylib/examples/core/core_input_multitouch.png +0 -0
- package/vendor/raylib/examples/core/core_loading_thread.c +147 -0
- package/vendor/raylib/examples/core/core_loading_thread.png +0 -0
- package/vendor/raylib/examples/core/core_quat_conversion.c +132 -0
- package/vendor/raylib/examples/core/core_quat_conversion.png +0 -0
- package/vendor/raylib/examples/core/core_random_values.c +67 -0
- package/vendor/raylib/examples/core/core_random_values.png +0 -0
- package/vendor/raylib/examples/core/core_scissor_test.c +71 -0
- package/vendor/raylib/examples/core/core_scissor_test.png +0 -0
- package/vendor/raylib/examples/core/core_smooth_pixelperfect.c +117 -0
- package/vendor/raylib/examples/core/core_smooth_pixelperfect.png +0 -0
- package/vendor/raylib/examples/core/core_split_screen.c +155 -0
- package/vendor/raylib/examples/core/core_split_screen.png +0 -0
- package/vendor/raylib/examples/core/core_storage_values.c +87 -0
- package/vendor/raylib/examples/core/core_storage_values.png +0 -0
- package/vendor/raylib/examples/core/core_vr_simulator.c +143 -0
- package/vendor/raylib/examples/core/core_vr_simulator.png +0 -0
- package/vendor/raylib/examples/core/core_window_flags.c +191 -0
- package/vendor/raylib/examples/core/core_window_flags.png +0 -0
- package/vendor/raylib/examples/core/core_window_letterbox.c +112 -0
- package/vendor/raylib/examples/core/core_window_letterbox.png +0 -0
- package/vendor/raylib/examples/core/core_world_screen.c +78 -0
- package/vendor/raylib/examples/core/core_world_screen.png +0 -0
- package/vendor/raylib/examples/core/resources/LICENSE.md +4 -0
- package/vendor/raylib/examples/core/resources/distortion100.fs +52 -0
- package/vendor/raylib/examples/core/resources/distortion330.fs +53 -0
- package/vendor/raylib/examples/core/resources/ps3.png +0 -0
- package/vendor/raylib/examples/core/resources/xbox.png +0 -0
- package/vendor/raylib/examples/examples_template.c +100 -0
- package/vendor/raylib/examples/models/models_animation.c +114 -0
- package/vendor/raylib/examples/models/models_animation.png +0 -0
- package/vendor/raylib/examples/models/models_billboard.c +75 -0
- package/vendor/raylib/examples/models/models_billboard.png +0 -0
- package/vendor/raylib/examples/models/models_box_collisions.c +121 -0
- package/vendor/raylib/examples/models/models_box_collisions.png +0 -0
- package/vendor/raylib/examples/models/models_cubicmap.c +87 -0
- package/vendor/raylib/examples/models/models_cubicmap.png +0 -0
- package/vendor/raylib/examples/models/models_first_person_maze.c +122 -0
- package/vendor/raylib/examples/models/models_first_person_maze.png +0 -0
- package/vendor/raylib/examples/models/models_geometric_shapes.c +80 -0
- package/vendor/raylib/examples/models/models_geometric_shapes.png +0 -0
- package/vendor/raylib/examples/models/models_heightmap.c +82 -0
- package/vendor/raylib/examples/models/models_heightmap.png +0 -0
- package/vendor/raylib/examples/models/models_loading.c +146 -0
- package/vendor/raylib/examples/models/models_loading.png +0 -0
- package/vendor/raylib/examples/models/models_loading_gltf.c +105 -0
- package/vendor/raylib/examples/models/models_loading_gltf.png +0 -0
- package/vendor/raylib/examples/models/models_loading_vox.c +130 -0
- package/vendor/raylib/examples/models/models_loading_vox.png +0 -0
- package/vendor/raylib/examples/models/models_mesh_generation.c +179 -0
- package/vendor/raylib/examples/models/models_mesh_generation.png +0 -0
- package/vendor/raylib/examples/models/models_mesh_picking.c +223 -0
- package/vendor/raylib/examples/models/models_mesh_picking.png +0 -0
- package/vendor/raylib/examples/models/models_orthographic_projection.c +99 -0
- package/vendor/raylib/examples/models/models_orthographic_projection.png +0 -0
- package/vendor/raylib/examples/models/models_rlgl_solar_system.c +172 -0
- package/vendor/raylib/examples/models/models_rlgl_solar_system.png +0 -0
- package/vendor/raylib/examples/models/models_skybox.c +262 -0
- package/vendor/raylib/examples/models/models_skybox.png +0 -0
- package/vendor/raylib/examples/models/models_waving_cubes.c +112 -0
- package/vendor/raylib/examples/models/models_waving_cubes.png +0 -0
- package/vendor/raylib/examples/models/models_yaw_pitch_roll.c +117 -0
- package/vendor/raylib/examples/models/models_yaw_pitch_roll.png +0 -0
- package/vendor/raylib/examples/models/resources/LICENSE.md +23 -0
- package/vendor/raylib/examples/models/resources/billboard.png +0 -0
- package/vendor/raylib/examples/models/resources/cubicmap.png +0 -0
- package/vendor/raylib/examples/models/resources/cubicmap_atlas.png +0 -0
- package/vendor/raylib/examples/models/resources/dresden_square_1k.hdr +0 -0
- package/vendor/raylib/examples/models/resources/dresden_square_2k.hdr +0 -0
- package/vendor/raylib/examples/models/resources/heightmap.png +0 -0
- package/vendor/raylib/examples/models/resources/models/gltf/AnimatedMorphCube.glb +0 -0
- package/vendor/raylib/examples/models/resources/models/gltf/AnimatedTriangle.gltf +118 -0
- package/vendor/raylib/examples/models/resources/models/gltf/BoxAnimated.glb +0 -0
- package/vendor/raylib/examples/models/resources/models/gltf/LICENSE +23 -0
- package/vendor/raylib/examples/models/resources/models/gltf/girl.glb +0 -0
- package/vendor/raylib/examples/models/resources/models/gltf/raylib_32x32.glb +0 -0
- package/vendor/raylib/examples/models/resources/models/gltf/rigged_figure.glb +0 -0
- package/vendor/raylib/examples/models/resources/models/gltf/vertex_colored_object.glb +0 -0
- package/vendor/raylib/examples/models/resources/models/iqm/guy.blend +0 -0
- package/vendor/raylib/examples/models/resources/models/iqm/guy.iqm +0 -0
- package/vendor/raylib/examples/models/resources/models/iqm/guyanim.iqm +0 -0
- package/vendor/raylib/examples/models/resources/models/iqm/guytex.png +0 -0
- package/vendor/raylib/examples/models/resources/models/iqm/vertex_colored_object.iqm +0 -0
- package/vendor/raylib/examples/models/resources/models/obj/bridge.obj +1725 -0
- package/vendor/raylib/examples/models/resources/models/obj/bridge_diffuse.png +0 -0
- package/vendor/raylib/examples/models/resources/models/obj/castle.obj +12919 -0
- package/vendor/raylib/examples/models/resources/models/obj/castle_diffuse.png +0 -0
- package/vendor/raylib/examples/models/resources/models/obj/cube.obj +68 -0
- package/vendor/raylib/examples/models/resources/models/obj/cube_diffuse.png +0 -0
- package/vendor/raylib/examples/models/resources/models/obj/house.obj +4564 -0
- package/vendor/raylib/examples/models/resources/models/obj/house_diffuse.png +0 -0
- package/vendor/raylib/examples/models/resources/models/obj/market.obj +7301 -0
- package/vendor/raylib/examples/models/resources/models/obj/market_diffuse.png +0 -0
- package/vendor/raylib/examples/models/resources/models/obj/plane.obj +10858 -0
- package/vendor/raylib/examples/models/resources/models/obj/plane_diffuse.png +0 -0
- package/vendor/raylib/examples/models/resources/models/obj/turret.obj +1888 -0
- package/vendor/raylib/examples/models/resources/models/obj/turret_diffuse.png +0 -0
- package/vendor/raylib/examples/models/resources/models/obj/well.obj +1030 -0
- package/vendor/raylib/examples/models/resources/models/obj/well_diffuse.png +0 -0
- package/vendor/raylib/examples/models/resources/models/vox/LICENSE +9 -0
- package/vendor/raylib/examples/models/resources/models/vox/chr_knight.vox +0 -0
- package/vendor/raylib/examples/models/resources/models/vox/chr_sword.vox +0 -0
- package/vendor/raylib/examples/models/resources/models/vox/monu9.vox +0 -0
- package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.fs +29 -0
- package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.vs +20 -0
- package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.fs +31 -0
- package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.vs +24 -0
- package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.fs +30 -0
- package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.vs +20 -0
- package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.fs +30 -0
- package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.vs +24 -0
- package/vendor/raylib/examples/models/resources/skybox.png +0 -0
- package/vendor/raylib/examples/models/rlights.h +183 -0
- package/vendor/raylib/examples/others/easings.h +263 -0
- package/vendor/raylib/examples/others/easings_testbed.c +227 -0
- package/vendor/raylib/examples/others/embedded_files_loading.c +103 -0
- package/vendor/raylib/examples/others/external/include/GLFW/glfw3.h +5538 -0
- package/vendor/raylib/examples/others/external/include/GLFW/glfw3native.h +572 -0
- package/vendor/raylib/examples/others/external/include/glad.h +5466 -0
- package/vendor/raylib/examples/others/external/lib/libglfw3.a +0 -0
- package/vendor/raylib/examples/others/raudio_standalone.c +152 -0
- package/vendor/raylib/examples/others/raylib_opengl_interop.c +152 -0
- package/vendor/raylib/examples/others/raylib_opengl_interop.png +0 -0
- package/vendor/raylib/examples/others/resources/audio/country.mp3 +0 -0
- package/vendor/raylib/examples/others/resources/audio/target.ogg +0 -0
- package/vendor/raylib/examples/others/resources/audio/weird.wav +0 -0
- package/vendor/raylib/examples/others/resources/audio_data.h +4893 -0
- package/vendor/raylib/examples/others/resources/image_data.h +9848 -0
- package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.fs +16 -0
- package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.vs +24 -0
- package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.fs +17 -0
- package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.vs +24 -0
- package/vendor/raylib/examples/others/resources/shaders/glsl430/gol.glsl +41 -0
- package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_render.glsl +29 -0
- package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_transfert.glsl +51 -0
- package/vendor/raylib/examples/others/rlgl_compute_shader.c +173 -0
- package/vendor/raylib/examples/others/rlgl_standalone.c +469 -0
- package/vendor/raylib/examples/physics/physics_demo.c +128 -0
- package/vendor/raylib/examples/physics/physics_demo.png +0 -0
- package/vendor/raylib/examples/physics/physics_friction.c +142 -0
- package/vendor/raylib/examples/physics/physics_friction.png +0 -0
- package/vendor/raylib/examples/physics/physics_movement.c +128 -0
- package/vendor/raylib/examples/physics/physics_movement.png +0 -0
- package/vendor/raylib/examples/physics/physics_restitution.c +129 -0
- package/vendor/raylib/examples/physics/physics_restitution.png +0 -0
- package/vendor/raylib/examples/physics/physics_shatter.c +111 -0
- package/vendor/raylib/examples/physics/physics_shatter.png +0 -0
- package/vendor/raylib/examples/raylib_compile_execute.bat +32 -0
- package/vendor/raylib/examples/raylib_makefile_example.bat +27 -0
- package/vendor/raylib/examples/shaders/resources/LICENSE.md +11 -0
- package/vendor/raylib/examples/shaders/resources/fudesumi.png +0 -0
- package/vendor/raylib/examples/shaders/resources/mask.png +0 -0
- package/vendor/raylib/examples/shaders/resources/models/barracks.obj +22251 -0
- package/vendor/raylib/examples/shaders/resources/models/barracks_diffuse.png +0 -0
- package/vendor/raylib/examples/shaders/resources/models/church.obj +5116 -0
- package/vendor/raylib/examples/shaders/resources/models/church_diffuse.png +0 -0
- package/vendor/raylib/examples/shaders/resources/models/watermill.obj +5316 -0
- package/vendor/raylib/examples/shaders/resources/models/watermill_diffuse.png +0 -0
- package/vendor/raylib/examples/shaders/resources/plasma.png +0 -0
- package/vendor/raylib/examples/shaders/resources/raysan.png +0 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.fs +23 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.vs +26 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting.vs +59 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting_instanced.vs +36 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/bloom.fs +39 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/blur.fs +34 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/color_mix.fs +26 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_hatching.fs +47 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_stitching.fs +57 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cubes_panning.fs +60 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/depth.fs +26 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/distortion.fs +54 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/dream_vision.fs +37 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/eratosthenes.fs +60 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fisheye.fs +43 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fog.fs +94 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/grayscale.fs +25 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs +83 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs +81 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/mask.fs +24 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/outline.fs +34 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/palette_switch.fs +41 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/pixelizer.fs +32 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/posterization.fs +29 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/predator.fs +31 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/raymarching.fs +431 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/reload.fs +39 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/scanlines.fs +44 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/sobel.fs +40 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/spotlight.fs +77 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs +46 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl100/wave.fs +36 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.fs +22 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.vs +26 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base_lighting.vs +59 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/bloom.fs +37 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/blur.fs +32 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_hatching.fs +45 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_stitching.fs +55 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/distortion.fs +52 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/dream_vision.fs +35 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fisheye.fs +41 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fog.fs +92 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/grayscale.fs +23 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/palette_switch.fs +27 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/pixelizer.fs +30 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/posterization.fs +27 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/predator.fs +29 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/scanlines.fs +42 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/sobel.fs +38 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl120/swirl.fs +44 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.fs +25 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.vs +26 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting.vs +32 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting_instanced.vs +36 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/bloom.fs +40 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/blur.fs +35 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/color_mix.fs +27 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_hatching.fs +48 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_stitching.fs +59 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cubes_panning.fs +61 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/depth.fs +27 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/distortion.fs +56 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/dream_vision.fs +34 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/eratosthenes.fs +59 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fisheye.fs +40 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fog.fs +95 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/grayscale.fs +26 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs +81 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs +82 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/mask.fs +22 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/outline.fs +35 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/overdraw.fs +26 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/palette_switch.fs +30 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/pixelizer.fs +33 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/posterization.fs +31 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/predator.fs +32 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/raymarching.fs +430 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/reload.fs +40 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/scanlines.fs +49 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/sobel.fs +41 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/spotlight.fs +65 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/swirl.fs +47 -0
- package/vendor/raylib/examples/shaders/resources/shaders/glsl330/wave.fs +37 -0
- package/vendor/raylib/examples/shaders/resources/space.png +0 -0
- package/vendor/raylib/examples/shaders/resources/texel_checker.png +0 -0
- package/vendor/raylib/examples/shaders/rlights.h +183 -0
- package/vendor/raylib/examples/shaders/shaders_basic_lighting.c +152 -0
- package/vendor/raylib/examples/shaders/shaders_basic_lighting.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_custom_uniform.c +127 -0
- package/vendor/raylib/examples/shaders/shaders_custom_uniform.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_eratosthenes.c +92 -0
- package/vendor/raylib/examples/shaders/shaders_eratosthenes.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_fog.c +160 -0
- package/vendor/raylib/examples/shaders/shaders_fog.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_hot_reloading.c +130 -0
- package/vendor/raylib/examples/shaders/shaders_hot_reloading.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_julia_set.c +191 -0
- package/vendor/raylib/examples/shaders/shaders_julia_set.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_mesh_instancing.c +224 -0
- package/vendor/raylib/examples/shaders/shaders_mesh_instancing.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_model_shader.c +103 -0
- package/vendor/raylib/examples/shaders/shaders_model_shader.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_multi_sample2d.c +105 -0
- package/vendor/raylib/examples/shaders/shaders_multi_sample2d.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_palette_switch.c +147 -0
- package/vendor/raylib/examples/shaders/shaders_palette_switch.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_postprocessing.c +170 -0
- package/vendor/raylib/examples/shaders/shaders_postprocessing.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_raymarching.c +113 -0
- package/vendor/raylib/examples/shaders/shaders_raymarching.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_shapes_textures.c +116 -0
- package/vendor/raylib/examples/shaders/shaders_shapes_textures.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_simple_mask.c +144 -0
- package/vendor/raylib/examples/shaders/shaders_simple_mask.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_spotlight.c +254 -0
- package/vendor/raylib/examples/shaders/shaders_spotlight.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_texture_drawing.c +80 -0
- package/vendor/raylib/examples/shaders/shaders_texture_drawing.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_texture_outline.c +97 -0
- package/vendor/raylib/examples/shaders/shaders_texture_outline.png +0 -0
- package/vendor/raylib/examples/shaders/shaders_texture_waves.c +110 -0
- package/vendor/raylib/examples/shaders/shaders_texture_waves.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_basic_shapes.c +78 -0
- package/vendor/raylib/examples/shapes/shapes_basic_shapes.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_bouncing_ball.c +76 -0
- package/vendor/raylib/examples/shapes/shapes_bouncing_ball.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_collision_area.c +108 -0
- package/vendor/raylib/examples/shapes/shapes_collision_area.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_colors_palette.c +99 -0
- package/vendor/raylib/examples/shapes/shapes_colors_palette.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.c +83 -0
- package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.c +89 -0
- package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_draw_ring.c +96 -0
- package/vendor/raylib/examples/shapes/shapes_draw_ring.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.c +110 -0
- package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_easings_box_anim.c +136 -0
- package/vendor/raylib/examples/shapes/shapes_easings_box_anim.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.c +118 -0
- package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_following_eyes.c +104 -0
- package/vendor/raylib/examples/shapes/shapes_following_eyes.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_lines_bezier.c +59 -0
- package/vendor/raylib/examples/shapes/shapes_lines_bezier.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_logo_raylib.c +56 -0
- package/vendor/raylib/examples/shapes/shapes_logo_raylib.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.c +160 -0
- package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.png +0 -0
- package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.c +94 -0
- package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.png +0 -0
- package/vendor/raylib/examples/text/resources/KAISG.ttf +0 -0
- package/vendor/raylib/examples/text/resources/LICENSE.md +20 -0
- package/vendor/raylib/examples/text/resources/anonymous_pro_bold.ttf +0 -0
- package/vendor/raylib/examples/text/resources/custom_alagard.png +0 -0
- package/vendor/raylib/examples/text/resources/custom_jupiter_crash.png +0 -0
- package/vendor/raylib/examples/text/resources/custom_mecha.png +0 -0
- package/vendor/raylib/examples/text/resources/dejavu.fnt +1115 -0
- package/vendor/raylib/examples/text/resources/dejavu.png +0 -0
- package/vendor/raylib/examples/text/resources/fonts/alagard.png +0 -0
- package/vendor/raylib/examples/text/resources/fonts/alpha_beta.png +0 -0
- package/vendor/raylib/examples/text/resources/fonts/jupiter_crash.png +0 -0
- package/vendor/raylib/examples/text/resources/fonts/mecha.png +0 -0
- package/vendor/raylib/examples/text/resources/fonts/pixantiqua.png +0 -0
- package/vendor/raylib/examples/text/resources/fonts/pixelplay.png +0 -0
- package/vendor/raylib/examples/text/resources/fonts/romulus.png +0 -0
- package/vendor/raylib/examples/text/resources/fonts/setback.png +0 -0
- package/vendor/raylib/examples/text/resources/noto_cjk.fnt +580 -0
- package/vendor/raylib/examples/text/resources/noto_cjk.png +0 -0
- package/vendor/raylib/examples/text/resources/pixantiqua.fnt +188 -0
- package/vendor/raylib/examples/text/resources/pixantiqua.png +0 -0
- package/vendor/raylib/examples/text/resources/pixantiqua.ttf +0 -0
- package/vendor/raylib/examples/text/resources/shaders/glsl100/alpha_discard.fs +20 -0
- package/vendor/raylib/examples/text/resources/shaders/glsl100/sdf.fs +25 -0
- package/vendor/raylib/examples/text/resources/shaders/glsl330/alpha_discard.fs +19 -0
- package/vendor/raylib/examples/text/resources/shaders/glsl330/sdf.fs +26 -0
- package/vendor/raylib/examples/text/resources/symbola.fnt +191 -0
- package/vendor/raylib/examples/text/resources/symbola.png +0 -0
- package/vendor/raylib/examples/text/text_draw_3d.c +739 -0
- package/vendor/raylib/examples/text/text_draw_3d.png +0 -0
- package/vendor/raylib/examples/text/text_font_filters.c +134 -0
- package/vendor/raylib/examples/text/text_font_filters.png +0 -0
- package/vendor/raylib/examples/text/text_font_loading.c +91 -0
- package/vendor/raylib/examples/text/text_font_loading.png +0 -0
- package/vendor/raylib/examples/text/text_font_sdf.c +141 -0
- package/vendor/raylib/examples/text/text_font_sdf.png +0 -0
- package/vendor/raylib/examples/text/text_font_spritefont.c +85 -0
- package/vendor/raylib/examples/text/text_font_spritefont.png +0 -0
- package/vendor/raylib/examples/text/text_format_text.c +62 -0
- package/vendor/raylib/examples/text/text_format_text.png +0 -0
- package/vendor/raylib/examples/text/text_input_box.c +127 -0
- package/vendor/raylib/examples/text/text_input_box.png +0 -0
- package/vendor/raylib/examples/text/text_raylib_fonts.c +105 -0
- package/vendor/raylib/examples/text/text_raylib_fonts.png +0 -0
- package/vendor/raylib/examples/text/text_rectangle_bounds.c +264 -0
- package/vendor/raylib/examples/text/text_rectangle_bounds.png +0 -0
- package/vendor/raylib/examples/text/text_unicode.c +465 -0
- package/vendor/raylib/examples/text/text_unicode.png +0 -0
- package/vendor/raylib/examples/text/text_writing_anim.c +62 -0
- package/vendor/raylib/examples/text/text_writing_anim.png +0 -0
- package/vendor/raylib/examples/textures/resources/KAISG.ttf +0 -0
- package/vendor/raylib/examples/textures/resources/LICENSE.md +18 -0
- package/vendor/raylib/examples/textures/resources/boom.wav +0 -0
- package/vendor/raylib/examples/textures/resources/button.png +0 -0
- package/vendor/raylib/examples/textures/resources/buttonfx.wav +0 -0
- package/vendor/raylib/examples/textures/resources/cat.png +0 -0
- package/vendor/raylib/examples/textures/resources/custom_jupiter_crash.png +0 -0
- package/vendor/raylib/examples/textures/resources/cyberpunk_street_background.png +0 -0
- package/vendor/raylib/examples/textures/resources/cyberpunk_street_foreground.png +0 -0
- package/vendor/raylib/examples/textures/resources/cyberpunk_street_midground.png +0 -0
- package/vendor/raylib/examples/textures/resources/explosion.png +0 -0
- package/vendor/raylib/examples/textures/resources/fudesumi.png +0 -0
- package/vendor/raylib/examples/textures/resources/fudesumi.raw +0 -0
- package/vendor/raylib/examples/textures/resources/ninepatch_button.png +0 -0
- package/vendor/raylib/examples/textures/resources/parrots.png +0 -0
- package/vendor/raylib/examples/textures/resources/patterns.png +0 -0
- package/vendor/raylib/examples/textures/resources/raylib_logo.png +0 -0
- package/vendor/raylib/examples/textures/resources/scarfy.png +0 -0
- package/vendor/raylib/examples/textures/resources/spark_flame.png +0 -0
- package/vendor/raylib/examples/textures/resources/wabbit_alpha.png +0 -0
- package/vendor/raylib/examples/textures/textures_background_scrolling.c +87 -0
- package/vendor/raylib/examples/textures/textures_background_scrolling.png +0 -0
- package/vendor/raylib/examples/textures/textures_blend_modes.c +93 -0
- package/vendor/raylib/examples/textures/textures_blend_modes.png +0 -0
- package/vendor/raylib/examples/textures/textures_bunnymark.c +120 -0
- package/vendor/raylib/examples/textures/textures_bunnymark.png +0 -0
- package/vendor/raylib/examples/textures/textures_draw_tiled.c +165 -0
- package/vendor/raylib/examples/textures/textures_draw_tiled.png +0 -0
- package/vendor/raylib/examples/textures/textures_image_drawing.c +91 -0
- package/vendor/raylib/examples/textures/textures_image_drawing.png +0 -0
- package/vendor/raylib/examples/textures/textures_image_generation.c +102 -0
- package/vendor/raylib/examples/textures/textures_image_generation.png +0 -0
- package/vendor/raylib/examples/textures/textures_image_loading.c +64 -0
- package/vendor/raylib/examples/textures/textures_image_loading.png +0 -0
- package/vendor/raylib/examples/textures/textures_image_processing.c +169 -0
- package/vendor/raylib/examples/textures/textures_image_processing.png +0 -0
- package/vendor/raylib/examples/textures/textures_image_text.c +83 -0
- package/vendor/raylib/examples/textures/textures_image_text.png +0 -0
- package/vendor/raylib/examples/textures/textures_logo_raylib.c +57 -0
- package/vendor/raylib/examples/textures/textures_logo_raylib.png +0 -0
- package/vendor/raylib/examples/textures/textures_mouse_painting.c +221 -0
- package/vendor/raylib/examples/textures/textures_mouse_painting.png +0 -0
- package/vendor/raylib/examples/textures/textures_npatch_drawing.c +109 -0
- package/vendor/raylib/examples/textures/textures_npatch_drawing.png +0 -0
- package/vendor/raylib/examples/textures/textures_particles_blending.c +135 -0
- package/vendor/raylib/examples/textures/textures_particles_blending.png +0 -0
- package/vendor/raylib/examples/textures/textures_polygon.c +100 -0
- package/vendor/raylib/examples/textures/textures_polygon.png +0 -0
- package/vendor/raylib/examples/textures/textures_raw_data.c +99 -0
- package/vendor/raylib/examples/textures/textures_raw_data.png +0 -0
- package/vendor/raylib/examples/textures/textures_rectangle.c +99 -0
- package/vendor/raylib/examples/textures/textures_rectangle.png +0 -0
- package/vendor/raylib/examples/textures/textures_sprite_button.c +97 -0
- package/vendor/raylib/examples/textures/textures_sprite_button.png +0 -0
- package/vendor/raylib/examples/textures/textures_sprite_explosion.c +120 -0
- package/vendor/raylib/examples/textures/textures_sprite_explosion.png +0 -0
- package/vendor/raylib/examples/textures/textures_srcrec_dstrec.c +82 -0
- package/vendor/raylib/examples/textures/textures_srcrec_dstrec.png +0 -0
- package/vendor/raylib/examples/textures/textures_to_image.c +68 -0
- package/vendor/raylib/examples/textures/textures_to_image.png +0 -0
- package/vendor/raylib/logo/raylib.ico +0 -0
- package/vendor/raylib/logo/raylib_128x128.png +0 -0
- package/vendor/raylib/logo/raylib_144x144.png +0 -0
- package/vendor/raylib/logo/raylib_16x16.png +0 -0
- package/vendor/raylib/logo/raylib_180x180.png +0 -0
- package/vendor/raylib/logo/raylib_24x24.png +0 -0
- package/vendor/raylib/logo/raylib_256x256.png +0 -0
- package/vendor/raylib/logo/raylib_32x32.png +0 -0
- package/vendor/raylib/logo/raylib_36x36.png +0 -0
- package/vendor/raylib/logo/raylib_48x48.png +0 -0
- package/vendor/raylib/logo/raylib_512x512.png +0 -0
- package/vendor/raylib/logo/raylib_64x64.png +0 -0
- package/vendor/raylib/logo/raylib_72x72.png +0 -0
- package/vendor/raylib/logo/raylib_96x96.png +0 -0
- package/vendor/raylib/logo/raylib_logo_animation.gif +0 -0
- package/vendor/raylib/parser/LICENSE +16 -0
- package/vendor/raylib/parser/README.md +63 -0
- package/vendor/raylib/parser/raylib_api.json +6668 -0
- package/vendor/raylib/parser/raylib_api.txt +3568 -0
- package/vendor/raylib/parser/raylib_api.xml +2509 -0
- package/vendor/raylib/parser/raylib_parser.c +1003 -0
- package/vendor/raylib/projects/4coder/Makefile +401 -0
- package/vendor/raylib/projects/4coder/Makefile.Android +300 -0
- package/vendor/raylib/projects/4coder/main.c +39 -0
- package/vendor/raylib/projects/4coder/project.4coder +54 -0
- package/vendor/raylib/projects/Builder/README.md +24 -0
- package/vendor/raylib/projects/Builder/examples/README.md +1 -0
- package/vendor/raylib/projects/Builder/examples/meson.build +25 -0
- package/vendor/raylib/projects/Builder/meson.build +25 -0
- package/vendor/raylib/projects/CMake/CMakeLists.txt +44 -0
- package/vendor/raylib/projects/CMake/core_basic_window.c +62 -0
- package/vendor/raylib/projects/CodeBlocks/README.md +22 -0
- package/vendor/raylib/projects/CodeBlocks/compiler_settings.png +0 -0
- package/vendor/raylib/projects/CodeBlocks/core_basic_window.c +58 -0
- package/vendor/raylib/projects/CodeBlocks/core_basic_window.cbp +137 -0
- package/vendor/raylib/projects/Geany/core_basic_window.c +52 -0
- package/vendor/raylib/projects/Geany/raylib.c.tags +452 -0
- package/vendor/raylib/projects/Geany/raylib_compile_execute.bat +21 -0
- package/vendor/raylib/projects/Geany/raylib_compile_sources.bat +42 -0
- package/vendor/raylib/projects/Geany/raylib_project.geany +41 -0
- package/vendor/raylib/projects/Notepad++/README.md +19 -0
- package/vendor/raylib/projects/Notepad++/c_raylib.xml +3104 -0
- package/vendor/raylib/projects/Notepad++/npes_saved_mingw.txt +0 -0
- package/vendor/raylib/projects/Notepad++/npes_saved_tcc.txt +0 -0
- package/vendor/raylib/projects/Notepad++/npes_saved_w64devkit.txt +0 -0
- package/vendor/raylib/projects/Notepad++/npes_saved_zig.txt +0 -0
- package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp.xml +3060 -0
- package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp_parser.c +150 -0
- package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h +631 -0
- package/vendor/raylib/projects/README.md +18 -0
- package/vendor/raylib/projects/SublimeText/README.md +13 -0
- package/vendor/raylib/projects/SublimeText/raylib.sublime-build +13 -0
- package/vendor/raylib/projects/SublimeText/raylib.sublime-project +8 -0
- package/vendor/raylib/projects/VS2019/raylib/raylib.rc +0 -0
- package/vendor/raylib/projects/VS2019/raylib/resource.h +14 -0
- package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.c +437 -0
- package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.h +344 -0
- package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/main.c +64 -0
- package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/AndroidManifest.xml +22 -0
- package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/build.xml +90 -0
- package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/project.properties +3 -0
- package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/raylib_android.Packaging.androidproj +134 -0
- package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/res/values/strings.xml +4 -0
- package/vendor/raylib/projects/VSCode/.vscode/c_cpp_properties.json +63 -0
- package/vendor/raylib/projects/VSCode/.vscode/launch.json +60 -0
- package/vendor/raylib/projects/VSCode/.vscode/settings.json +11 -0
- package/vendor/raylib/projects/VSCode/.vscode/tasks.json +71 -0
- package/vendor/raylib/projects/VSCode/Makefile +408 -0
- package/vendor/raylib/projects/VSCode/Makefile.Android +300 -0
- package/vendor/raylib/projects/VSCode/main.c +83 -0
- package/vendor/raylib/projects/VSCode/main.code-workspace +16 -0
- package/vendor/raylib/projects/scripts/README.md +68 -0
- package/vendor/raylib/projects/scripts/build-linux.sh +169 -0
- package/vendor/raylib/projects/scripts/build-osx.sh +171 -0
- package/vendor/raylib/projects/scripts/build-rpi.sh +169 -0
- package/vendor/raylib/projects/scripts/build-windows.bat +219 -0
- package/vendor/raylib/projects/scripts/core_basic_window.c +61 -0
- package/vendor/raylib/raylib.pc.in +13 -0
- package/vendor/raylib/src/CMakeLists.txt +121 -0
- package/vendor/raylib/src/Makefile +696 -0
- package/vendor/raylib/src/build.zig +60 -0
- package/vendor/raylib/src/config.h +230 -0
- package/vendor/raylib/src/external/cgltf.h +6501 -0
- package/vendor/raylib/src/external/dirent.h +183 -0
- package/vendor/raylib/src/external/dr_flac.h +12269 -0
- package/vendor/raylib/src/external/dr_mp3.h +4787 -0
- package/vendor/raylib/src/external/dr_wav.h +8019 -0
- package/vendor/raylib/src/external/glad.h +8640 -0
- package/vendor/raylib/src/external/glfw/.mailmap +10 -0
- package/vendor/raylib/src/external/glfw/CMake/GenerateMappings.cmake +33 -0
- package/vendor/raylib/src/external/glfw/CMake/Info.plist.in +38 -0
- package/vendor/raylib/src/external/glfw/CMake/MacOSXBundleInfo.plist.in +38 -0
- package/vendor/raylib/src/external/glfw/CMake/cmake_uninstall.cmake.in +29 -0
- package/vendor/raylib/src/external/glfw/CMake/glfw3.pc.in +13 -0
- package/vendor/raylib/src/external/glfw/CMake/glfw3Config.cmake.in +3 -0
- package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32-clang.cmake +13 -0
- package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32.cmake +13 -0
- package/vendor/raylib/src/external/glfw/CMake/modules/FindEpollShim.cmake +17 -0
- package/vendor/raylib/src/external/glfw/CMake/modules/FindOSMesa.cmake +18 -0
- package/vendor/raylib/src/external/glfw/CMake/modules/FindWaylandProtocols.cmake +26 -0
- package/vendor/raylib/src/external/glfw/CMake/modules/FindXKBCommon.cmake +34 -0
- package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32-clang.cmake +13 -0
- package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32.cmake +13 -0
- package/vendor/raylib/src/external/glfw/CMakeLists.txt +323 -0
- package/vendor/raylib/src/external/glfw/LICENSE.md +23 -0
- package/vendor/raylib/src/external/glfw/README.md +477 -0
- package/vendor/raylib/src/external/glfw/deps/getopt.c +230 -0
- package/vendor/raylib/src/external/glfw/deps/getopt.h +57 -0
- package/vendor/raylib/src/external/glfw/deps/glad/gl.h +3840 -0
- package/vendor/raylib/src/external/glfw/deps/glad/khrplatform.h +282 -0
- package/vendor/raylib/src/external/glfw/deps/glad/vk_platform.h +92 -0
- package/vendor/raylib/src/external/glfw/deps/glad/vulkan.h +3480 -0
- package/vendor/raylib/src/external/glfw/deps/glad_gl.c +1791 -0
- package/vendor/raylib/src/external/glfw/deps/glad_vulkan.c +593 -0
- package/vendor/raylib/src/external/glfw/deps/mingw/_mingw_dxhelper.h +117 -0
- package/vendor/raylib/src/external/glfw/deps/mingw/dinput.h +2467 -0
- package/vendor/raylib/src/external/glfw/deps/mingw/xinput.h +239 -0
- package/vendor/raylib/src/external/glfw/deps/vs2008/stdint.h +247 -0
- package/vendor/raylib/src/external/glfw/include/GLFW/glfw3.h +6075 -0
- package/vendor/raylib/src/external/glfw/include/GLFW/glfw3native.h +530 -0
- package/vendor/raylib/src/external/glfw/src/CMakeLists.txt +246 -0
- package/vendor/raylib/src/external/glfw/src/cocoa_init.m +620 -0
- package/vendor/raylib/src/external/glfw/src/cocoa_joystick.h +46 -0
- package/vendor/raylib/src/external/glfw/src/cocoa_joystick.m +483 -0
- package/vendor/raylib/src/external/glfw/src/cocoa_monitor.m +631 -0
- package/vendor/raylib/src/external/glfw/src/cocoa_platform.h +206 -0
- package/vendor/raylib/src/external/glfw/src/cocoa_time.c +62 -0
- package/vendor/raylib/src/external/glfw/src/cocoa_window.m +1923 -0
- package/vendor/raylib/src/external/glfw/src/context.c +756 -0
- package/vendor/raylib/src/external/glfw/src/egl_context.c +846 -0
- package/vendor/raylib/src/external/glfw/src/egl_context.h +229 -0
- package/vendor/raylib/src/external/glfw/src/glfw.rc.in +30 -0
- package/vendor/raylib/src/external/glfw/src/glfw_config.h.in +58 -0
- package/vendor/raylib/src/external/glfw/src/glx_context.c +699 -0
- package/vendor/raylib/src/external/glfw/src/glx_context.h +181 -0
- package/vendor/raylib/src/external/glfw/src/init.c +357 -0
- package/vendor/raylib/src/external/glfw/src/input.c +1406 -0
- package/vendor/raylib/src/external/glfw/src/internal.h +799 -0
- package/vendor/raylib/src/external/glfw/src/linux_joystick.c +428 -0
- package/vendor/raylib/src/external/glfw/src/linux_joystick.h +59 -0
- package/vendor/raylib/src/external/glfw/src/mappings.h +1550 -0
- package/vendor/raylib/src/external/glfw/src/mappings.h.in +73 -0
- package/vendor/raylib/src/external/glfw/src/monitor.c +542 -0
- package/vendor/raylib/src/external/glfw/src/nsgl_context.h +66 -0
- package/vendor/raylib/src/external/glfw/src/nsgl_context.m +369 -0
- package/vendor/raylib/src/external/glfw/src/null_init.c +57 -0
- package/vendor/raylib/src/external/glfw/src/null_joystick.c +53 -0
- package/vendor/raylib/src/external/glfw/src/null_joystick.h +31 -0
- package/vendor/raylib/src/external/glfw/src/null_monitor.c +159 -0
- package/vendor/raylib/src/external/glfw/src/null_platform.h +89 -0
- package/vendor/raylib/src/external/glfw/src/null_window.c +670 -0
- package/vendor/raylib/src/external/glfw/src/osmesa_context.c +372 -0
- package/vendor/raylib/src/external/glfw/src/osmesa_context.h +90 -0
- package/vendor/raylib/src/external/glfw/src/posix_thread.c +105 -0
- package/vendor/raylib/src/external/glfw/src/posix_thread.h +51 -0
- package/vendor/raylib/src/external/glfw/src/posix_time.c +90 -0
- package/vendor/raylib/src/external/glfw/src/posix_time.h +44 -0
- package/vendor/raylib/src/external/glfw/src/vulkan.c +332 -0
- package/vendor/raylib/src/external/glfw/src/wgl_context.c +798 -0
- package/vendor/raylib/src/external/glfw/src/wgl_context.h +160 -0
- package/vendor/raylib/src/external/glfw/src/win32_init.c +636 -0
- package/vendor/raylib/src/external/glfw/src/win32_joystick.c +753 -0
- package/vendor/raylib/src/external/glfw/src/win32_joystick.h +53 -0
- package/vendor/raylib/src/external/glfw/src/win32_monitor.c +537 -0
- package/vendor/raylib/src/external/glfw/src/win32_platform.h +462 -0
- package/vendor/raylib/src/external/glfw/src/win32_thread.c +99 -0
- package/vendor/raylib/src/external/glfw/src/win32_time.c +76 -0
- package/vendor/raylib/src/external/glfw/src/win32_window.c +2405 -0
- package/vendor/raylib/src/external/glfw/src/window.c +1114 -0
- package/vendor/raylib/src/external/glfw/src/wl_init.c +1310 -0
- package/vendor/raylib/src/external/glfw/src/wl_monitor.c +231 -0
- package/vendor/raylib/src/external/glfw/src/wl_platform.h +352 -0
- package/vendor/raylib/src/external/glfw/src/wl_window.c +1814 -0
- package/vendor/raylib/src/external/glfw/src/x11_init.c +1500 -0
- package/vendor/raylib/src/external/glfw/src/x11_monitor.c +614 -0
- package/vendor/raylib/src/external/glfw/src/x11_platform.h +798 -0
- package/vendor/raylib/src/external/glfw/src/x11_window.c +3310 -0
- package/vendor/raylib/src/external/glfw/src/xkb_unicode.c +942 -0
- package/vendor/raylib/src/external/glfw/src/xkb_unicode.h +28 -0
- package/vendor/raylib/src/external/jar_mod.h +1596 -0
- package/vendor/raylib/src/external/jar_xm.h +2470 -0
- package/vendor/raylib/src/external/miniaudio.h +70273 -0
- package/vendor/raylib/src/external/msf_gif.h +717 -0
- package/vendor/raylib/src/external/par_shapes.h +2155 -0
- package/vendor/raylib/src/external/sdefl.h +696 -0
- package/vendor/raylib/src/external/sinfl.h +584 -0
- package/vendor/raylib/src/external/stb_image.h +7897 -0
- package/vendor/raylib/src/external/stb_image_resize.h +2634 -0
- package/vendor/raylib/src/external/stb_image_write.h +1724 -0
- package/vendor/raylib/src/external/stb_rect_pack.h +623 -0
- package/vendor/raylib/src/external/stb_truetype.h +5077 -0
- package/vendor/raylib/src/external/stb_vorbis.h +5475 -0
- package/vendor/raylib/src/external/tinyobj_loader_c.h +1589 -0
- package/vendor/raylib/src/external/vox_loader.h +710 -0
- package/vendor/raylib/src/extras/easings.h +263 -0
- package/vendor/raylib/src/extras/physac.h +1977 -0
- package/vendor/raylib/src/extras/raygui.h +4342 -0
- package/vendor/raylib/src/extras/rmem.h +751 -0
- package/vendor/raylib/src/raudio.c +2380 -0
- package/vendor/raylib/src/raudio.h +198 -0
- package/vendor/raylib/src/raylib.dll.rc +27 -0
- package/vendor/raylib/src/raylib.dll.rc.data +0 -0
- package/vendor/raylib/src/raylib.h +1536 -0
- package/vendor/raylib/src/raylib.ico +0 -0
- package/vendor/raylib/src/raylib.rc +27 -0
- package/vendor/raylib/src/raylib.rc.data +0 -0
- package/vendor/raylib/src/raymath.h +1853 -0
- package/vendor/raylib/src/rcamera.h +567 -0
- package/vendor/raylib/src/rcore.c +6772 -0
- package/vendor/raylib/src/rgestures.h +566 -0
- package/vendor/raylib/src/rglfw.c +126 -0
- package/vendor/raylib/src/rlgl.h +4677 -0
- package/vendor/raylib/src/rmodels.c +5041 -0
- package/vendor/raylib/src/rshapes.c +1759 -0
- package/vendor/raylib/src/rtext.c +1790 -0
- package/vendor/raylib/src/rtextures.c +4761 -0
- package/vendor/raylib/src/shell.html +328 -0
- package/vendor/raylib/src/utils.c +433 -0
- package/vendor/raylib/src/utils.h +81 -0
- package/vendor/sqlite3/shell.c +23487 -0
- package/vendor/sqlite3/sqlite3.c +239246 -0
- package/vendor/sqlite3/sqlite3.h +12802 -0
- package/vendor/sqlite3/sqlite3ext.h +689 -0
- package/CMakeLists.txt +0 -63
|
@@ -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
|