Draw Mesh Instanced Example.
This commit is contained in:
@@ -1028,6 +1028,7 @@ void luaRegister() {
|
||||
lua_register( L, "RL_SetMaterialTexture", lmodelsSetMaterialTexture );
|
||||
lua_register( L, "RL_SetMaterialColor", lmodelsSetMaterialColor );
|
||||
lua_register( L, "RL_SetMaterialValue", lmodelsSetMaterialValue );
|
||||
lua_register( L, "RL_SetMaterialShader", lmodelsSetMaterialShader );
|
||||
/* Model. */
|
||||
lua_register( L, "RL_LoadModel", lmodelsLoadModel );
|
||||
lua_register( L, "RL_LoadModelFromMesh", lmodelsLoadModelFromMesh );
|
||||
|
||||
37
src/models.c
37
src/models.c
@@ -1287,12 +1287,10 @@ int lmodelsDrawMesh( lua_State *L ) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* TODO Untested. */
|
||||
/*
|
||||
> success = RL_DrawMeshInstanced( Mesh mesh, Material material, Matrix{} transforms, int instances )
|
||||
|
||||
Draw multiple mesh instances with material and different transforms
|
||||
Note! Untested.
|
||||
|
||||
- Failure return false
|
||||
- Success return true
|
||||
@@ -1305,14 +1303,14 @@ int lmodelsDrawMeshInstanced( lua_State *L ) {
|
||||
}
|
||||
int instances = lua_tointeger( L, -1 );
|
||||
lua_pop( L, 1 );
|
||||
Matrix matrises[ instances ];
|
||||
Matrix transforms[ instances ];
|
||||
|
||||
int t = lua_gettop( L ), i = 0;
|
||||
lua_pushnil( L );
|
||||
|
||||
while ( lua_next( L, t ) != 0 ) {
|
||||
if ( lua_istable( L, -1 ) ) {
|
||||
matrises[i] = uluaGetMatrix( L );
|
||||
transforms[i] = uluaGetMatrix( L );
|
||||
}
|
||||
i++;
|
||||
lua_pop( L, 1 );
|
||||
@@ -1326,7 +1324,7 @@ int lmodelsDrawMeshInstanced( lua_State *L ) {
|
||||
lua_pushboolean( L, false );
|
||||
return 1;
|
||||
}
|
||||
DrawMeshInstanced( *state->meshes[ meshId ], *state->materials[ materialId ], matrises, instances );
|
||||
DrawMeshInstanced( *state->meshes[ meshId ], *state->materials[ materialId ], transforms, instances );
|
||||
lua_pushboolean( L, true );
|
||||
|
||||
return 1;
|
||||
@@ -1699,6 +1697,35 @@ int lmodelsSetMaterialValue( lua_State *L ) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
> success = RL_SetMaterialShader( Material material, Shader shader )
|
||||
|
||||
Set shader for material
|
||||
|
||||
- Failure return false
|
||||
- Success return true
|
||||
*/
|
||||
int lmodelsSetMaterialShader( lua_State *L ) {
|
||||
if ( !lua_isnumber( L, -2 ) || !lua_isnumber( L, -1 ) ) {
|
||||
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_SetMaterialShader( Material material, Shader shader )" );
|
||||
lua_pushboolean( L, false );
|
||||
return 1;
|
||||
}
|
||||
size_t shaderId = lua_tointeger( L, -1 );
|
||||
lua_pop( L, 1 );
|
||||
size_t materialId = lua_tointeger( L, -1 );
|
||||
|
||||
if ( !validMaterial( materialId || !validShader( shaderId ) ) ) {
|
||||
lua_pushboolean( L, false );
|
||||
return 1;
|
||||
}
|
||||
|
||||
state->materials[ materialId ]->shader = *state->shaders[ shaderId ];
|
||||
lua_pushboolean( L, true );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
## Models - Model
|
||||
*/
|
||||
|
||||
@@ -1607,7 +1607,7 @@ int lmathMatrixInvert( lua_State *L ) {
|
||||
}
|
||||
|
||||
/*
|
||||
> result = MatrixIdentity()
|
||||
> result = RL_MatrixIdentity()
|
||||
|
||||
Get identity matrix
|
||||
|
||||
|
||||
Reference in New Issue
Block a user