[rmodels] Added implementation of UpdateModelAnimationBonesWithBlending() function (#4578)

* [rmodels] Added implementation of `UpdateModelAnimationBonesWithBlending()` function

Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>

* [rmodels] Added example for animation blending and fixed wrap issue for blend factor

Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>

* [rmodels] Updated build information for animation blending example

Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>

* [rmodels] Fixed typos in anmation blending example

Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>

* [rmodels] Updated blend function signature and added function to update verts from bones

Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>

* [rmodels] Updated documentation

Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>

* rlparser: update raylib_api.* by CI

* rlparser: update raylib_api.* by CI

---------

Signed-off-by: Kirandeep-Singh-Khehra <kirandeepsinghkhehra@gmail.com>
Co-authored-by: Ray <raysan5@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Kirandeep-Singh-Khehra
2026-02-19 17:27:05 +05:30
committed by GitHub
parent 97023def48
commit 0e6cb0993d
10 changed files with 6451 additions and 5754 deletions

View File

@ -0,0 +1,152 @@
/*******************************************************************************************
*
* raylib [core] example - Model animation blending
*
* Example originally created with raylib 5.5
*
* Example contributed by Kirandeep (@Kirandeep-Singh-Khehra)
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2024 Kirandeep (@Kirandeep-Singh-Khehra)
*
* Note: Due to limitations in the Apple OpenGL driver, this feature does not work on MacOS
* Note: This example uses CPU for updating meshes.
* For GPU skinning see comments with 'INFO:'.
*
********************************************************************************************/
#include "raylib.h"
#define clamp(x,a,b) ((x < a)? a : (x > b)? b : x)
#if defined(PLATFORM_DESKTOP)
#define GLSL_VERSION 330
#else // PLATFORM_ANDROID, PLATFORM_WEB
#define GLSL_VERSION 100
#endif
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main(void)
{
// Initialization
//--------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raylib [models] example - Model Animation Blending");
// Define the camera to look into our 3d world
Camera camera = { 0 };
camera.position = (Vector3){ 8.0f, 8.0f, 8.0f }; // Camera position
camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; // Camera looking at point
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
camera.fovy = 45.0f; // Camera field-of-view Y
camera.projection = CAMERA_PERSPECTIVE; // Camera projection type
// Load gltf model
Model characterModel = LoadModel("resources/models/gltf/robot.glb"); // Load character model
/* INFO: Uncomment this to use GPU skinning
// Load skinning shader
Shader skinningShader = LoadShader(TextFormat("resources/shaders/glsl%i/skinning.vs", GLSL_VERSION),
TextFormat("resources/shaders/glsl%i/skinning.fs", GLSL_VERSION));
for (int i = 0; i < characterModel.materialCount; i++)
{
characterModel.materials[i].shader = skinningShader;
}
*/
// Load gltf model animations
int animsCount = 0;
unsigned int animIndex0 = 0;
unsigned int animIndex1 = 0;
unsigned int animCurrentFrame = 0;
ModelAnimation *modelAnimations = LoadModelAnimations("resources/models/gltf/robot.glb", &animsCount);
float blendFactor = 0.5f;
DisableCursor(); // Limit cursor to relative movement inside the window
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
UpdateCamera(&camera, CAMERA_THIRD_PERSON);
// Select current animation
if (IsKeyPressed(KEY_T)) animIndex0 = (animIndex0 + 1)%animsCount;
else if (IsKeyPressed(KEY_G)) animIndex0 = (animIndex0 + animsCount - 1)%animsCount;
if (IsKeyPressed(KEY_Y)) animIndex1 = (animIndex1 + 1)%animsCount;
else if (IsKeyPressed(KEY_H)) animIndex1 = (animIndex1 + animsCount - 1)%animsCount;
// Select blend factor
if (IsKeyPressed(KEY_U)) blendFactor = clamp(blendFactor - 0.1, 0.0f, 1.0f);
else if (IsKeyPressed(KEY_J)) blendFactor = clamp(blendFactor + 0.1, 0.0f, 1.0f);
// Update animation
animCurrentFrame++;
// Update bones
// Note: Same animation frame index is used below. By default it loops both animations
UpdateModelAnimationBonesLerp(characterModel, modelAnimations[animIndex0], animCurrentFrame, modelAnimations[animIndex1], animCurrentFrame, blendFactor);
// INFO: Comment the following line to use GPU skinning
UpdateModelVertsToCurrentBones(characterModel);
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
BeginMode3D(camera);
/* INFO: Uncomment this to use GPU skinning
// Draw character mesh, pose calculation is done in shader (GPU skinning)
for (int i = 0; i < characterModel.meshCount; i++)
{
DrawMesh(characterModel.meshes[i], characterModel.materials[characterModel.meshMaterial[i]], characterModel.transform);
}
*/
// INFO: Comment the following line to use GPU skinning
DrawModel(characterModel, (Vector3){0.0f, 0.0f, 0.0f}, 1.0f, WHITE);
DrawGrid(10, 1.0f);
EndMode3D();
DrawText("Use the U/J to adjust blend factor", 10, 10, 20, GRAY);
DrawText("Use the T/G to switch first animation", 10, 30, 20, GRAY);
DrawText("Use the Y/H to switch second animation", 10, 50, 20, GRAY);
DrawText(TextFormat("Animations: %s, %s", modelAnimations[animIndex0].name, modelAnimations[animIndex1].name), 10, 70, 20, BLACK);
DrawText(TextFormat("Blend Factor: %f", blendFactor), 10, 86, 20, BLACK);
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
UnloadModelAnimations(modelAnimations, animsCount); // Unload model animation
UnloadModel(characterModel); // Unload model and meshes/material
// INFO: Uncomment the following line to use GPU skinning
// UnloadShader(skinningShader); // Unload GPU skinning shader
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,387 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug.DLL|Win32">
<Configuration>Debug.DLL</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug.DLL|x64">
<Configuration>Debug.DLL</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release.DLL|Win32">
<Configuration>Release.DLL</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release.DLL|x64">
<Configuration>Release.DLL</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{AFDDE100-2D36-4749-817D-12E54C56312F}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>models_animation_blending</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>models_animation_blending</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|Win32'">
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\examples\models</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|x64'">
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\examples\models</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\examples\models</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\examples\models</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|Win32'">
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\examples\models</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\examples\models</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\examples\models</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|x64'">
<LocalDebuggerWorkingDirectory>$(SolutionDir)..\..\examples\models</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAs>CompileAsC</CompileAs>
<AdditionalIncludeDirectories>$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAs>CompileAsC</CompileAs>
<AdditionalIncludeDirectories>$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>/FS %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAs>CompileAsC</CompileAs>
<AdditionalIncludeDirectories>$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"</Command>
<Message>Copy Debug DLL to output directory</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug.DLL|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<CompileAs>CompileAsC</CompileAs>
<AdditionalIncludeDirectories>$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
<AdditionalDependencies>raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PostBuildEvent>
<Command>xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"</Command>
<Message>Copy Debug DLL to output directory</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Copy Release DLL to output directory</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release.DLL|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)..\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\</AdditionalLibraryDirectories>
</Link>
<PostBuildEvent>
<Command>xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Copy Release DLL to output directory</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\examples\models\models_animation_blending.c" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\raylib\raylib.vcxproj">
<Project>{e89d61ac-55de-4482-afd4-df7242ebc859}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -1621,6 +1621,8 @@ RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId);
RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount); // Load model animations from file RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, int *animCount); // Load model animations from file
RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose (CPU) RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose (CPU)
RLAPI void UpdateModelAnimationBones(Model model, ModelAnimation anim, int frame); // Update model animation mesh bone matrices (GPU skinning) RLAPI void UpdateModelAnimationBones(Model model, ModelAnimation anim, int frame); // Update model animation mesh bone matrices (GPU skinning)
RLAPI void UpdateModelAnimationBonesLerp(Model model, ModelAnimation animA, int frameA, ModelAnimation animB, int frameB, float value); // Update model animation mesh bone matrices with interpolation between two poses(GPU skinning)
RLAPI void UpdateModelVertsToCurrentBones(Model model); // Update model vertices according to mesh bone matrices (CPU)
RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data
RLAPI void UnloadModelAnimations(ModelAnimation *animations, int animCount); // Unload animation array data RLAPI void UnloadModelAnimations(ModelAnimation *animations, int animCount); // Unload animation array data
RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match

View File

@ -2346,12 +2346,70 @@ void UpdateModelAnimationBones(Model model, ModelAnimation anim, int frame)
} }
} }
// at least 2x speed up vs the old method // Update model animated bones transform matrices by interpolating between two different given frames of different ModelAnimation(could be same too)
// Update model animated vertex data (positions and normals) for a given frame // NOTE: Updated data is not uploaded to GPU but kept at model.meshes[i].boneMatrices[boneId],
// NOTE: Updated data is uploaded to GPU // to be uploaded to shader at drawing, in case GPU skinning is enabled
void UpdateModelAnimation(Model model, ModelAnimation anim, int frame) void UpdateModelAnimationBonesLerp(Model model, ModelAnimation animA, int frameA, ModelAnimation animB, int frameB, float value)
{ {
UpdateModelAnimationBones(model,anim,frame); if ((animA.frameCount > 0) && (animA.bones != NULL) && (animA.framePoses != NULL) &&
(animB.frameCount > 0) && (animB.bones != NULL) && (animB.framePoses != NULL) &&
(value >= 0.0f) && (value <= 1.0f))
{
frameA = frameA % animA.frameCount;
frameB = frameB % animB.frameCount;
for (int i = 0; i < model.meshCount; i++)
{
if (model.meshes[i].boneMatrices)
{
assert(model.meshes[i].boneCount == animA.boneCount);
assert(model.meshes[i].boneCount == animB.boneCount);
for (int boneId = 0; boneId < model.meshes[i].boneCount; boneId++)
{
Vector3 inTranslation = model.bindPose[boneId].translation;
Quaternion inRotation = model.bindPose[boneId].rotation;
Vector3 inScale = model.bindPose[boneId].scale;
Vector3 outATranslation = animA.framePoses[frameA][boneId].translation;
Quaternion outARotation = animA.framePoses[frameA][boneId].rotation;
Vector3 outAScale = animA.framePoses[frameA][boneId].scale;
Vector3 outBTranslation = animB.framePoses[frameB][boneId].translation;
Quaternion outBRotation = animB.framePoses[frameB][boneId].rotation;
Vector3 outBScale = animB.framePoses[frameB][boneId].scale;
Vector3 outTranslation = Vector3Lerp(outATranslation, outBTranslation, value);
Quaternion outRotation = QuaternionSlerp(outARotation, outBRotation, value);
Vector3 outScale = Vector3Lerp(outAScale, outBScale, value);
Vector3 invTranslation = Vector3RotateByQuaternion(Vector3Negate(inTranslation), QuaternionInvert(inRotation));
Quaternion invRotation = QuaternionInvert(inRotation);
Vector3 invScale = Vector3Divide((Vector3){ 1.0f, 1.0f, 1.0f }, inScale);
Vector3 boneTranslation = Vector3Add(
Vector3RotateByQuaternion(Vector3Multiply(outScale, invTranslation),
outRotation), outTranslation);
Quaternion boneRotation = QuaternionMultiply(outRotation, invRotation);
Vector3 boneScale = Vector3Multiply(outScale, invScale);
Matrix boneMatrix = MatrixMultiply(MatrixMultiply(
QuaternionToMatrix(boneRotation),
MatrixTranslate(boneTranslation.x, boneTranslation.y, boneTranslation.z)),
MatrixScale(boneScale.x, boneScale.y, boneScale.z));
model.meshes[i].boneMatrices[boneId] = boneMatrix;
}
}
}
}
}
// Update model vertex data (positions and normals) from mesh bone data
// NOTE: Updated data is uploaded to GPU
void UpdateModelVertsToCurrentBones(Model model)
{
//UpdateModelAnimationBones(model, anim, frame); // TODO: Review
for (int m = 0; m < model.meshCount; m++) for (int m = 0; m < model.meshCount; m++)
{ {
@ -2416,6 +2474,15 @@ void UpdateModelAnimation(Model model, ModelAnimation anim, int frame)
} }
} }
// at least 2x speed up vs the old method
// Update model animated vertex data (positions and normals) for a given frame
// NOTE: Updated data is uploaded to GPU
void UpdateModelAnimation(Model model, ModelAnimation anim, int frame)
{
UpdateModelAnimationBones(model,anim,frame);
UpdateModelVertsToCurrentBones(model);
}
// Unload animation array data // Unload animation array data
void UnloadModelAnimations(ModelAnimation *animations, int animCount) void UnloadModelAnimations(ModelAnimation *animations, int animCount)
{ {

View File

@ -11436,6 +11436,48 @@
} }
] ]
}, },
{
"name": "UpdateModelAnimationBonesLerp",
"description": "Update model animation mesh bone matrices with interpolation between two poses(GPU skinning)",
"returnType": "void",
"params": [
{
"type": "Model",
"name": "model"
},
{
"type": "ModelAnimation",
"name": "animA"
},
{
"type": "int",
"name": "frameA"
},
{
"type": "ModelAnimation",
"name": "animB"
},
{
"type": "int",
"name": "frameB"
},
{
"type": "float",
"name": "value"
}
]
},
{
"name": "UpdateModelVertsToCurrentBones",
"description": "Update model vertices according to mesh bone matrices (CPU)",
"returnType": "void",
"params": [
{
"type": "Model",
"name": "model"
}
]
},
{ {
"name": "UnloadModelAnimation", "name": "UnloadModelAnimation",
"description": "Unload animation data", "description": "Unload animation data",

View File

@ -7812,6 +7812,27 @@ return {
{type = "int", name = "frame"} {type = "int", name = "frame"}
} }
}, },
{
name = "UpdateModelAnimationBonesLerp",
description = "Update model animation mesh bone matrices with interpolation between two poses(GPU skinning)",
returnType = "void",
params = {
{type = "Model", name = "model"},
{type = "ModelAnimation", name = "animA"},
{type = "int", name = "frameA"},
{type = "ModelAnimation", name = "animB"},
{type = "int", name = "frameB"},
{type = "float", name = "value"}
}
},
{
name = "UpdateModelVertsToCurrentBones",
description = "Update model vertices according to mesh bone matrices (CPU)",
returnType = "void",
params = {
{type = "Model", name = "model"}
}
},
{ {
name = "UnloadModelAnimation", name = "UnloadModelAnimation",
description = "Unload animation data", description = "Unload animation data",

View File

@ -992,7 +992,7 @@ Callback 006: AudioCallback() (2 input parameters)
Param[1]: bufferData (type: void *) Param[1]: bufferData (type: void *)
Param[2]: frames (type: unsigned int) Param[2]: frames (type: unsigned int)
Functions found: 599 Functions found: 601
Function 001: InitWindow() (3 input parameters) Function 001: InitWindow() (3 input parameters)
Name: InitWindow Name: InitWindow
@ -4354,24 +4354,39 @@ Function 522: UpdateModelAnimationBones() (3 input parameters)
Param[1]: model (type: Model) Param[1]: model (type: Model)
Param[2]: anim (type: ModelAnimation) Param[2]: anim (type: ModelAnimation)
Param[3]: frame (type: int) Param[3]: frame (type: int)
Function 523: UnloadModelAnimation() (1 input parameters) Function 523: UpdateModelAnimationBonesLerp() (6 input parameters)
Name: UpdateModelAnimationBonesLerp
Return type: void
Description: Update model animation mesh bone matrices with interpolation between two poses(GPU skinning)
Param[1]: model (type: Model)
Param[2]: animA (type: ModelAnimation)
Param[3]: frameA (type: int)
Param[4]: animB (type: ModelAnimation)
Param[5]: frameB (type: int)
Param[6]: value (type: float)
Function 524: UpdateModelVertsToCurrentBones() (1 input parameters)
Name: UpdateModelVertsToCurrentBones
Return type: void
Description: Update model vertices according to mesh bone matrices (CPU)
Param[1]: model (type: Model)
Function 525: UnloadModelAnimation() (1 input parameters)
Name: UnloadModelAnimation Name: UnloadModelAnimation
Return type: void Return type: void
Description: Unload animation data Description: Unload animation data
Param[1]: anim (type: ModelAnimation) Param[1]: anim (type: ModelAnimation)
Function 524: UnloadModelAnimations() (2 input parameters) Function 526: UnloadModelAnimations() (2 input parameters)
Name: UnloadModelAnimations Name: UnloadModelAnimations
Return type: void Return type: void
Description: Unload animation array data Description: Unload animation array data
Param[1]: animations (type: ModelAnimation *) Param[1]: animations (type: ModelAnimation *)
Param[2]: animCount (type: int) Param[2]: animCount (type: int)
Function 525: IsModelAnimationValid() (2 input parameters) Function 527: IsModelAnimationValid() (2 input parameters)
Name: IsModelAnimationValid Name: IsModelAnimationValid
Return type: bool Return type: bool
Description: Check model animation skeleton match Description: Check model animation skeleton match
Param[1]: model (type: Model) Param[1]: model (type: Model)
Param[2]: anim (type: ModelAnimation) Param[2]: anim (type: ModelAnimation)
Function 526: CheckCollisionSpheres() (4 input parameters) Function 528: CheckCollisionSpheres() (4 input parameters)
Name: CheckCollisionSpheres Name: CheckCollisionSpheres
Return type: bool Return type: bool
Description: Check collision between two spheres Description: Check collision between two spheres
@ -4379,40 +4394,40 @@ Function 526: CheckCollisionSpheres() (4 input parameters)
Param[2]: radius1 (type: float) Param[2]: radius1 (type: float)
Param[3]: center2 (type: Vector3) Param[3]: center2 (type: Vector3)
Param[4]: radius2 (type: float) Param[4]: radius2 (type: float)
Function 527: CheckCollisionBoxes() (2 input parameters) Function 529: CheckCollisionBoxes() (2 input parameters)
Name: CheckCollisionBoxes Name: CheckCollisionBoxes
Return type: bool Return type: bool
Description: Check collision between two bounding boxes Description: Check collision between two bounding boxes
Param[1]: box1 (type: BoundingBox) Param[1]: box1 (type: BoundingBox)
Param[2]: box2 (type: BoundingBox) Param[2]: box2 (type: BoundingBox)
Function 528: CheckCollisionBoxSphere() (3 input parameters) Function 530: CheckCollisionBoxSphere() (3 input parameters)
Name: CheckCollisionBoxSphere Name: CheckCollisionBoxSphere
Return type: bool Return type: bool
Description: Check collision between box and sphere Description: Check collision between box and sphere
Param[1]: box (type: BoundingBox) Param[1]: box (type: BoundingBox)
Param[2]: center (type: Vector3) Param[2]: center (type: Vector3)
Param[3]: radius (type: float) Param[3]: radius (type: float)
Function 529: GetRayCollisionSphere() (3 input parameters) Function 531: GetRayCollisionSphere() (3 input parameters)
Name: GetRayCollisionSphere Name: GetRayCollisionSphere
Return type: RayCollision Return type: RayCollision
Description: Get collision info between ray and sphere Description: Get collision info between ray and sphere
Param[1]: ray (type: Ray) Param[1]: ray (type: Ray)
Param[2]: center (type: Vector3) Param[2]: center (type: Vector3)
Param[3]: radius (type: float) Param[3]: radius (type: float)
Function 530: GetRayCollisionBox() (2 input parameters) Function 532: GetRayCollisionBox() (2 input parameters)
Name: GetRayCollisionBox Name: GetRayCollisionBox
Return type: RayCollision Return type: RayCollision
Description: Get collision info between ray and box Description: Get collision info between ray and box
Param[1]: ray (type: Ray) Param[1]: ray (type: Ray)
Param[2]: box (type: BoundingBox) Param[2]: box (type: BoundingBox)
Function 531: GetRayCollisionMesh() (3 input parameters) Function 533: GetRayCollisionMesh() (3 input parameters)
Name: GetRayCollisionMesh Name: GetRayCollisionMesh
Return type: RayCollision Return type: RayCollision
Description: Get collision info between ray and mesh Description: Get collision info between ray and mesh
Param[1]: ray (type: Ray) Param[1]: ray (type: Ray)
Param[2]: mesh (type: Mesh) Param[2]: mesh (type: Mesh)
Param[3]: transform (type: Matrix) Param[3]: transform (type: Matrix)
Function 532: GetRayCollisionTriangle() (4 input parameters) Function 534: GetRayCollisionTriangle() (4 input parameters)
Name: GetRayCollisionTriangle Name: GetRayCollisionTriangle
Return type: RayCollision Return type: RayCollision
Description: Get collision info between ray and triangle Description: Get collision info between ray and triangle
@ -4420,7 +4435,7 @@ Function 532: GetRayCollisionTriangle() (4 input parameters)
Param[2]: p1 (type: Vector3) Param[2]: p1 (type: Vector3)
Param[3]: p2 (type: Vector3) Param[3]: p2 (type: Vector3)
Param[4]: p3 (type: Vector3) Param[4]: p3 (type: Vector3)
Function 533: GetRayCollisionQuad() (5 input parameters) Function 535: GetRayCollisionQuad() (5 input parameters)
Name: GetRayCollisionQuad Name: GetRayCollisionQuad
Return type: RayCollision Return type: RayCollision
Description: Get collision info between ray and quad Description: Get collision info between ray and quad
@ -4429,158 +4444,158 @@ Function 533: GetRayCollisionQuad() (5 input parameters)
Param[3]: p2 (type: Vector3) Param[3]: p2 (type: Vector3)
Param[4]: p3 (type: Vector3) Param[4]: p3 (type: Vector3)
Param[5]: p4 (type: Vector3) Param[5]: p4 (type: Vector3)
Function 534: InitAudioDevice() (0 input parameters) Function 536: InitAudioDevice() (0 input parameters)
Name: InitAudioDevice Name: InitAudioDevice
Return type: void Return type: void
Description: Initialize audio device and context Description: Initialize audio device and context
No input parameters No input parameters
Function 535: CloseAudioDevice() (0 input parameters) Function 537: CloseAudioDevice() (0 input parameters)
Name: CloseAudioDevice Name: CloseAudioDevice
Return type: void Return type: void
Description: Close the audio device and context Description: Close the audio device and context
No input parameters No input parameters
Function 536: IsAudioDeviceReady() (0 input parameters) Function 538: IsAudioDeviceReady() (0 input parameters)
Name: IsAudioDeviceReady Name: IsAudioDeviceReady
Return type: bool Return type: bool
Description: Check if audio device has been initialized successfully Description: Check if audio device has been initialized successfully
No input parameters No input parameters
Function 537: SetMasterVolume() (1 input parameters) Function 539: SetMasterVolume() (1 input parameters)
Name: SetMasterVolume Name: SetMasterVolume
Return type: void Return type: void
Description: Set master volume (listener) Description: Set master volume (listener)
Param[1]: volume (type: float) Param[1]: volume (type: float)
Function 538: GetMasterVolume() (0 input parameters) Function 540: GetMasterVolume() (0 input parameters)
Name: GetMasterVolume Name: GetMasterVolume
Return type: float Return type: float
Description: Get master volume (listener) Description: Get master volume (listener)
No input parameters No input parameters
Function 539: LoadWave() (1 input parameters) Function 541: LoadWave() (1 input parameters)
Name: LoadWave Name: LoadWave
Return type: Wave Return type: Wave
Description: Load wave data from file Description: Load wave data from file
Param[1]: fileName (type: const char *) Param[1]: fileName (type: const char *)
Function 540: LoadWaveFromMemory() (3 input parameters) Function 542: LoadWaveFromMemory() (3 input parameters)
Name: LoadWaveFromMemory Name: LoadWaveFromMemory
Return type: Wave Return type: Wave
Description: Load wave from memory buffer, fileType refers to extension: i.e. '.wav' Description: Load wave from memory buffer, fileType refers to extension: i.e. '.wav'
Param[1]: fileType (type: const char *) Param[1]: fileType (type: const char *)
Param[2]: fileData (type: const unsigned char *) Param[2]: fileData (type: const unsigned char *)
Param[3]: dataSize (type: int) Param[3]: dataSize (type: int)
Function 541: IsWaveValid() (1 input parameters) Function 543: IsWaveValid() (1 input parameters)
Name: IsWaveValid Name: IsWaveValid
Return type: bool Return type: bool
Description: Checks if wave data is valid (data loaded and parameters) Description: Checks if wave data is valid (data loaded and parameters)
Param[1]: wave (type: Wave) Param[1]: wave (type: Wave)
Function 542: LoadSound() (1 input parameters) Function 544: LoadSound() (1 input parameters)
Name: LoadSound Name: LoadSound
Return type: Sound Return type: Sound
Description: Load sound from file Description: Load sound from file
Param[1]: fileName (type: const char *) Param[1]: fileName (type: const char *)
Function 543: LoadSoundFromWave() (1 input parameters) Function 545: LoadSoundFromWave() (1 input parameters)
Name: LoadSoundFromWave Name: LoadSoundFromWave
Return type: Sound Return type: Sound
Description: Load sound from wave data Description: Load sound from wave data
Param[1]: wave (type: Wave) Param[1]: wave (type: Wave)
Function 544: LoadSoundAlias() (1 input parameters) Function 546: LoadSoundAlias() (1 input parameters)
Name: LoadSoundAlias Name: LoadSoundAlias
Return type: Sound Return type: Sound
Description: Create a new sound that shares the same sample data as the source sound, does not own the sound data Description: Create a new sound that shares the same sample data as the source sound, does not own the sound data
Param[1]: source (type: Sound) Param[1]: source (type: Sound)
Function 545: IsSoundValid() (1 input parameters) Function 547: IsSoundValid() (1 input parameters)
Name: IsSoundValid Name: IsSoundValid
Return type: bool Return type: bool
Description: Checks if a sound is valid (data loaded and buffers initialized) Description: Checks if a sound is valid (data loaded and buffers initialized)
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Function 546: UpdateSound() (3 input parameters) Function 548: UpdateSound() (3 input parameters)
Name: UpdateSound Name: UpdateSound
Return type: void Return type: void
Description: Update sound buffer with new data (default data format: 32 bit float, stereo) Description: Update sound buffer with new data (default data format: 32 bit float, stereo)
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Param[2]: data (type: const void *) Param[2]: data (type: const void *)
Param[3]: sampleCount (type: int) Param[3]: sampleCount (type: int)
Function 547: UnloadWave() (1 input parameters) Function 549: UnloadWave() (1 input parameters)
Name: UnloadWave Name: UnloadWave
Return type: void Return type: void
Description: Unload wave data Description: Unload wave data
Param[1]: wave (type: Wave) Param[1]: wave (type: Wave)
Function 548: UnloadSound() (1 input parameters) Function 550: UnloadSound() (1 input parameters)
Name: UnloadSound Name: UnloadSound
Return type: void Return type: void
Description: Unload sound Description: Unload sound
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Function 549: UnloadSoundAlias() (1 input parameters) Function 551: UnloadSoundAlias() (1 input parameters)
Name: UnloadSoundAlias Name: UnloadSoundAlias
Return type: void Return type: void
Description: Unload a sound alias (does not deallocate sample data) Description: Unload a sound alias (does not deallocate sample data)
Param[1]: alias (type: Sound) Param[1]: alias (type: Sound)
Function 550: ExportWave() (2 input parameters) Function 552: ExportWave() (2 input parameters)
Name: ExportWave Name: ExportWave
Return type: bool Return type: bool
Description: Export wave data to file, returns true on success Description: Export wave data to file, returns true on success
Param[1]: wave (type: Wave) Param[1]: wave (type: Wave)
Param[2]: fileName (type: const char *) Param[2]: fileName (type: const char *)
Function 551: ExportWaveAsCode() (2 input parameters) Function 553: ExportWaveAsCode() (2 input parameters)
Name: ExportWaveAsCode Name: ExportWaveAsCode
Return type: bool Return type: bool
Description: Export wave sample data to code (.h), returns true on success Description: Export wave sample data to code (.h), returns true on success
Param[1]: wave (type: Wave) Param[1]: wave (type: Wave)
Param[2]: fileName (type: const char *) Param[2]: fileName (type: const char *)
Function 552: PlaySound() (1 input parameters) Function 554: PlaySound() (1 input parameters)
Name: PlaySound Name: PlaySound
Return type: void Return type: void
Description: Play a sound Description: Play a sound
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Function 553: StopSound() (1 input parameters) Function 555: StopSound() (1 input parameters)
Name: StopSound Name: StopSound
Return type: void Return type: void
Description: Stop playing a sound Description: Stop playing a sound
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Function 554: PauseSound() (1 input parameters) Function 556: PauseSound() (1 input parameters)
Name: PauseSound Name: PauseSound
Return type: void Return type: void
Description: Pause a sound Description: Pause a sound
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Function 555: ResumeSound() (1 input parameters) Function 557: ResumeSound() (1 input parameters)
Name: ResumeSound Name: ResumeSound
Return type: void Return type: void
Description: Resume a paused sound Description: Resume a paused sound
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Function 556: IsSoundPlaying() (1 input parameters) Function 558: IsSoundPlaying() (1 input parameters)
Name: IsSoundPlaying Name: IsSoundPlaying
Return type: bool Return type: bool
Description: Check if a sound is currently playing Description: Check if a sound is currently playing
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Function 557: SetSoundVolume() (2 input parameters) Function 559: SetSoundVolume() (2 input parameters)
Name: SetSoundVolume Name: SetSoundVolume
Return type: void Return type: void
Description: Set volume for a sound (1.0 is max level) Description: Set volume for a sound (1.0 is max level)
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Param[2]: volume (type: float) Param[2]: volume (type: float)
Function 558: SetSoundPitch() (2 input parameters) Function 560: SetSoundPitch() (2 input parameters)
Name: SetSoundPitch Name: SetSoundPitch
Return type: void Return type: void
Description: Set pitch for a sound (1.0 is base level) Description: Set pitch for a sound (1.0 is base level)
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Param[2]: pitch (type: float) Param[2]: pitch (type: float)
Function 559: SetSoundPan() (2 input parameters) Function 561: SetSoundPan() (2 input parameters)
Name: SetSoundPan Name: SetSoundPan
Return type: void Return type: void
Description: Set pan for a sound (-1.0 left, 0.0 center, 1.0 right) Description: Set pan for a sound (-1.0 left, 0.0 center, 1.0 right)
Param[1]: sound (type: Sound) Param[1]: sound (type: Sound)
Param[2]: pan (type: float) Param[2]: pan (type: float)
Function 560: WaveCopy() (1 input parameters) Function 562: WaveCopy() (1 input parameters)
Name: WaveCopy Name: WaveCopy
Return type: Wave Return type: Wave
Description: Copy a wave to a new wave Description: Copy a wave to a new wave
Param[1]: wave (type: Wave) Param[1]: wave (type: Wave)
Function 561: WaveCrop() (3 input parameters) Function 563: WaveCrop() (3 input parameters)
Name: WaveCrop Name: WaveCrop
Return type: void Return type: void
Description: Crop a wave to defined frames range Description: Crop a wave to defined frames range
Param[1]: wave (type: Wave *) Param[1]: wave (type: Wave *)
Param[2]: initFrame (type: int) Param[2]: initFrame (type: int)
Param[3]: finalFrame (type: int) Param[3]: finalFrame (type: int)
Function 562: WaveFormat() (4 input parameters) Function 564: WaveFormat() (4 input parameters)
Name: WaveFormat Name: WaveFormat
Return type: void Return type: void
Description: Convert wave data to desired format Description: Convert wave data to desired format
@ -4588,203 +4603,203 @@ Function 562: WaveFormat() (4 input parameters)
Param[2]: sampleRate (type: int) Param[2]: sampleRate (type: int)
Param[3]: sampleSize (type: int) Param[3]: sampleSize (type: int)
Param[4]: channels (type: int) Param[4]: channels (type: int)
Function 563: LoadWaveSamples() (1 input parameters) Function 565: LoadWaveSamples() (1 input parameters)
Name: LoadWaveSamples Name: LoadWaveSamples
Return type: float * Return type: float *
Description: Load samples data from wave as a 32bit float data array Description: Load samples data from wave as a 32bit float data array
Param[1]: wave (type: Wave) Param[1]: wave (type: Wave)
Function 564: UnloadWaveSamples() (1 input parameters) Function 566: UnloadWaveSamples() (1 input parameters)
Name: UnloadWaveSamples Name: UnloadWaveSamples
Return type: void Return type: void
Description: Unload samples data loaded with LoadWaveSamples() Description: Unload samples data loaded with LoadWaveSamples()
Param[1]: samples (type: float *) Param[1]: samples (type: float *)
Function 565: LoadMusicStream() (1 input parameters) Function 567: LoadMusicStream() (1 input parameters)
Name: LoadMusicStream Name: LoadMusicStream
Return type: Music Return type: Music
Description: Load music stream from file Description: Load music stream from file
Param[1]: fileName (type: const char *) Param[1]: fileName (type: const char *)
Function 566: LoadMusicStreamFromMemory() (3 input parameters) Function 568: LoadMusicStreamFromMemory() (3 input parameters)
Name: LoadMusicStreamFromMemory Name: LoadMusicStreamFromMemory
Return type: Music Return type: Music
Description: Load music stream from data Description: Load music stream from data
Param[1]: fileType (type: const char *) Param[1]: fileType (type: const char *)
Param[2]: data (type: const unsigned char *) Param[2]: data (type: const unsigned char *)
Param[3]: dataSize (type: int) Param[3]: dataSize (type: int)
Function 567: IsMusicValid() (1 input parameters) Function 569: IsMusicValid() (1 input parameters)
Name: IsMusicValid Name: IsMusicValid
Return type: bool Return type: bool
Description: Checks if a music stream is valid (context and buffers initialized) Description: Checks if a music stream is valid (context and buffers initialized)
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 568: UnloadMusicStream() (1 input parameters) Function 570: UnloadMusicStream() (1 input parameters)
Name: UnloadMusicStream Name: UnloadMusicStream
Return type: void Return type: void
Description: Unload music stream Description: Unload music stream
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 569: PlayMusicStream() (1 input parameters) Function 571: PlayMusicStream() (1 input parameters)
Name: PlayMusicStream Name: PlayMusicStream
Return type: void Return type: void
Description: Start music playing Description: Start music playing
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 570: IsMusicStreamPlaying() (1 input parameters) Function 572: IsMusicStreamPlaying() (1 input parameters)
Name: IsMusicStreamPlaying Name: IsMusicStreamPlaying
Return type: bool Return type: bool
Description: Check if music is playing Description: Check if music is playing
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 571: UpdateMusicStream() (1 input parameters) Function 573: UpdateMusicStream() (1 input parameters)
Name: UpdateMusicStream Name: UpdateMusicStream
Return type: void Return type: void
Description: Updates buffers for music streaming Description: Updates buffers for music streaming
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 572: StopMusicStream() (1 input parameters) Function 574: StopMusicStream() (1 input parameters)
Name: StopMusicStream Name: StopMusicStream
Return type: void Return type: void
Description: Stop music playing Description: Stop music playing
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 573: PauseMusicStream() (1 input parameters) Function 575: PauseMusicStream() (1 input parameters)
Name: PauseMusicStream Name: PauseMusicStream
Return type: void Return type: void
Description: Pause music playing Description: Pause music playing
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 574: ResumeMusicStream() (1 input parameters) Function 576: ResumeMusicStream() (1 input parameters)
Name: ResumeMusicStream Name: ResumeMusicStream
Return type: void Return type: void
Description: Resume playing paused music Description: Resume playing paused music
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 575: SeekMusicStream() (2 input parameters) Function 577: SeekMusicStream() (2 input parameters)
Name: SeekMusicStream Name: SeekMusicStream
Return type: void Return type: void
Description: Seek music to a position (in seconds) Description: Seek music to a position (in seconds)
Param[1]: music (type: Music) Param[1]: music (type: Music)
Param[2]: position (type: float) Param[2]: position (type: float)
Function 576: SetMusicVolume() (2 input parameters) Function 578: SetMusicVolume() (2 input parameters)
Name: SetMusicVolume Name: SetMusicVolume
Return type: void Return type: void
Description: Set volume for music (1.0 is max level) Description: Set volume for music (1.0 is max level)
Param[1]: music (type: Music) Param[1]: music (type: Music)
Param[2]: volume (type: float) Param[2]: volume (type: float)
Function 577: SetMusicPitch() (2 input parameters) Function 579: SetMusicPitch() (2 input parameters)
Name: SetMusicPitch Name: SetMusicPitch
Return type: void Return type: void
Description: Set pitch for a music (1.0 is base level) Description: Set pitch for a music (1.0 is base level)
Param[1]: music (type: Music) Param[1]: music (type: Music)
Param[2]: pitch (type: float) Param[2]: pitch (type: float)
Function 578: SetMusicPan() (2 input parameters) Function 580: SetMusicPan() (2 input parameters)
Name: SetMusicPan Name: SetMusicPan
Return type: void Return type: void
Description: Set pan for a music (-1.0 left, 0.0 center, 1.0 right) Description: Set pan for a music (-1.0 left, 0.0 center, 1.0 right)
Param[1]: music (type: Music) Param[1]: music (type: Music)
Param[2]: pan (type: float) Param[2]: pan (type: float)
Function 579: GetMusicTimeLength() (1 input parameters) Function 581: GetMusicTimeLength() (1 input parameters)
Name: GetMusicTimeLength Name: GetMusicTimeLength
Return type: float Return type: float
Description: Get music time length (in seconds) Description: Get music time length (in seconds)
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 580: GetMusicTimePlayed() (1 input parameters) Function 582: GetMusicTimePlayed() (1 input parameters)
Name: GetMusicTimePlayed Name: GetMusicTimePlayed
Return type: float Return type: float
Description: Get current music time played (in seconds) Description: Get current music time played (in seconds)
Param[1]: music (type: Music) Param[1]: music (type: Music)
Function 581: LoadAudioStream() (3 input parameters) Function 583: LoadAudioStream() (3 input parameters)
Name: LoadAudioStream Name: LoadAudioStream
Return type: AudioStream Return type: AudioStream
Description: Load audio stream (to stream raw audio pcm data) Description: Load audio stream (to stream raw audio pcm data)
Param[1]: sampleRate (type: unsigned int) Param[1]: sampleRate (type: unsigned int)
Param[2]: sampleSize (type: unsigned int) Param[2]: sampleSize (type: unsigned int)
Param[3]: channels (type: unsigned int) Param[3]: channels (type: unsigned int)
Function 582: IsAudioStreamValid() (1 input parameters) Function 584: IsAudioStreamValid() (1 input parameters)
Name: IsAudioStreamValid Name: IsAudioStreamValid
Return type: bool Return type: bool
Description: Checks if an audio stream is valid (buffers initialized) Description: Checks if an audio stream is valid (buffers initialized)
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Function 583: UnloadAudioStream() (1 input parameters) Function 585: UnloadAudioStream() (1 input parameters)
Name: UnloadAudioStream Name: UnloadAudioStream
Return type: void Return type: void
Description: Unload audio stream and free memory Description: Unload audio stream and free memory
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Function 584: UpdateAudioStream() (3 input parameters) Function 586: UpdateAudioStream() (3 input parameters)
Name: UpdateAudioStream Name: UpdateAudioStream
Return type: void Return type: void
Description: Update audio stream buffers with data Description: Update audio stream buffers with data
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Param[2]: data (type: const void *) Param[2]: data (type: const void *)
Param[3]: frameCount (type: int) Param[3]: frameCount (type: int)
Function 585: IsAudioStreamProcessed() (1 input parameters) Function 587: IsAudioStreamProcessed() (1 input parameters)
Name: IsAudioStreamProcessed Name: IsAudioStreamProcessed
Return type: bool Return type: bool
Description: Check if any audio stream buffers requires refill Description: Check if any audio stream buffers requires refill
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Function 586: PlayAudioStream() (1 input parameters) Function 588: PlayAudioStream() (1 input parameters)
Name: PlayAudioStream Name: PlayAudioStream
Return type: void Return type: void
Description: Play audio stream Description: Play audio stream
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Function 587: PauseAudioStream() (1 input parameters) Function 589: PauseAudioStream() (1 input parameters)
Name: PauseAudioStream Name: PauseAudioStream
Return type: void Return type: void
Description: Pause audio stream Description: Pause audio stream
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Function 588: ResumeAudioStream() (1 input parameters) Function 590: ResumeAudioStream() (1 input parameters)
Name: ResumeAudioStream Name: ResumeAudioStream
Return type: void Return type: void
Description: Resume audio stream Description: Resume audio stream
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Function 589: IsAudioStreamPlaying() (1 input parameters) Function 591: IsAudioStreamPlaying() (1 input parameters)
Name: IsAudioStreamPlaying Name: IsAudioStreamPlaying
Return type: bool Return type: bool
Description: Check if audio stream is playing Description: Check if audio stream is playing
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Function 590: StopAudioStream() (1 input parameters) Function 592: StopAudioStream() (1 input parameters)
Name: StopAudioStream Name: StopAudioStream
Return type: void Return type: void
Description: Stop audio stream Description: Stop audio stream
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Function 591: SetAudioStreamVolume() (2 input parameters) Function 593: SetAudioStreamVolume() (2 input parameters)
Name: SetAudioStreamVolume Name: SetAudioStreamVolume
Return type: void Return type: void
Description: Set volume for audio stream (1.0 is max level) Description: Set volume for audio stream (1.0 is max level)
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Param[2]: volume (type: float) Param[2]: volume (type: float)
Function 592: SetAudioStreamPitch() (2 input parameters) Function 594: SetAudioStreamPitch() (2 input parameters)
Name: SetAudioStreamPitch Name: SetAudioStreamPitch
Return type: void Return type: void
Description: Set pitch for audio stream (1.0 is base level) Description: Set pitch for audio stream (1.0 is base level)
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Param[2]: pitch (type: float) Param[2]: pitch (type: float)
Function 593: SetAudioStreamPan() (2 input parameters) Function 595: SetAudioStreamPan() (2 input parameters)
Name: SetAudioStreamPan Name: SetAudioStreamPan
Return type: void Return type: void
Description: Set pan for audio stream (0.5 is centered) Description: Set pan for audio stream (0.5 is centered)
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Param[2]: pan (type: float) Param[2]: pan (type: float)
Function 594: SetAudioStreamBufferSizeDefault() (1 input parameters) Function 596: SetAudioStreamBufferSizeDefault() (1 input parameters)
Name: SetAudioStreamBufferSizeDefault Name: SetAudioStreamBufferSizeDefault
Return type: void Return type: void
Description: Default size for new audio streams Description: Default size for new audio streams
Param[1]: size (type: int) Param[1]: size (type: int)
Function 595: SetAudioStreamCallback() (2 input parameters) Function 597: SetAudioStreamCallback() (2 input parameters)
Name: SetAudioStreamCallback Name: SetAudioStreamCallback
Return type: void Return type: void
Description: Audio thread callback to request new data Description: Audio thread callback to request new data
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Param[2]: callback (type: AudioCallback) Param[2]: callback (type: AudioCallback)
Function 596: AttachAudioStreamProcessor() (2 input parameters) Function 598: AttachAudioStreamProcessor() (2 input parameters)
Name: AttachAudioStreamProcessor Name: AttachAudioStreamProcessor
Return type: void Return type: void
Description: Attach audio stream processor to stream, receives frames x 2 samples as 'float' (stereo) Description: Attach audio stream processor to stream, receives frames x 2 samples as 'float' (stereo)
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Param[2]: processor (type: AudioCallback) Param[2]: processor (type: AudioCallback)
Function 597: DetachAudioStreamProcessor() (2 input parameters) Function 599: DetachAudioStreamProcessor() (2 input parameters)
Name: DetachAudioStreamProcessor Name: DetachAudioStreamProcessor
Return type: void Return type: void
Description: Detach audio stream processor from stream Description: Detach audio stream processor from stream
Param[1]: stream (type: AudioStream) Param[1]: stream (type: AudioStream)
Param[2]: processor (type: AudioCallback) Param[2]: processor (type: AudioCallback)
Function 598: AttachAudioMixedProcessor() (1 input parameters) Function 600: AttachAudioMixedProcessor() (1 input parameters)
Name: AttachAudioMixedProcessor Name: AttachAudioMixedProcessor
Return type: void Return type: void
Description: Attach audio stream processor to the entire audio pipeline, receives frames x 2 samples as 'float' (stereo) Description: Attach audio stream processor to the entire audio pipeline, receives frames x 2 samples as 'float' (stereo)
Param[1]: processor (type: AudioCallback) Param[1]: processor (type: AudioCallback)
Function 599: DetachAudioMixedProcessor() (1 input parameters) Function 601: DetachAudioMixedProcessor() (1 input parameters)
Name: DetachAudioMixedProcessor Name: DetachAudioMixedProcessor
Return type: void Return type: void
Description: Detach audio stream processor from the entire audio pipeline Description: Detach audio stream processor from the entire audio pipeline

View File

@ -678,7 +678,7 @@
<Param type="unsigned int" name="frames" desc="" /> <Param type="unsigned int" name="frames" desc="" />
</Callback> </Callback>
</Callbacks> </Callbacks>
<Functions count="599"> <Functions count="601">
<Function name="InitWindow" retType="void" paramCount="3" desc="Initialize window and OpenGL context"> <Function name="InitWindow" retType="void" paramCount="3" desc="Initialize window and OpenGL context">
<Param type="int" name="width" desc="" /> <Param type="int" name="width" desc="" />
<Param type="int" name="height" desc="" /> <Param type="int" name="height" desc="" />
@ -2918,6 +2918,17 @@
<Param type="ModelAnimation" name="anim" desc="" /> <Param type="ModelAnimation" name="anim" desc="" />
<Param type="int" name="frame" desc="" /> <Param type="int" name="frame" desc="" />
</Function> </Function>
<Function name="UpdateModelAnimationBonesLerp" retType="void" paramCount="6" desc="Update model animation mesh bone matrices with interpolation between two poses(GPU skinning)">
<Param type="Model" name="model" desc="" />
<Param type="ModelAnimation" name="animA" desc="" />
<Param type="int" name="frameA" desc="" />
<Param type="ModelAnimation" name="animB" desc="" />
<Param type="int" name="frameB" desc="" />
<Param type="float" name="value" desc="" />
</Function>
<Function name="UpdateModelVertsToCurrentBones" retType="void" paramCount="1" desc="Update model vertices according to mesh bone matrices (CPU)">
<Param type="Model" name="model" desc="" />
</Function>
<Function name="UnloadModelAnimation" retType="void" paramCount="1" desc="Unload animation data"> <Function name="UnloadModelAnimation" retType="void" paramCount="1" desc="Unload animation data">
<Param type="ModelAnimation" name="anim" desc="" /> <Param type="ModelAnimation" name="anim" desc="" />
</Function> </Function>