DirectX10 Rendering Engine – Material_Lua.cpp
#include "material.h"
#include "engine.h"
extern CMaterial* g_pLuaSharedMaterial;
//-------------------------------------------------------------------------
// Lua helper to get values from table
//-------------------------------------------------------------------------
void Lua_GetField( lua_State* L, const char* key, const char** szResult )
{
lua_pushstring(L, key);
lua_gettable(L, -2); /* get key */
// not valid
if (!lua_isstring(L, -1))
{
*szResult = "";
}
else
{
*szResult = lua_tostring(L, -1);
}
lua_pop(L, 1); /* remove entry */
}
//-------------------------------------------------------------------------
// Lua function to set up a material
//-------------------------------------------------------------------------
int CMaterial::Lua_SetMaterial( lua_State* L )
{
lua_getglobal(L, g_pLuaSharedMaterial->GetName() );
if (!lua_istable(L, -1))
return 0;
const char* szFieldValue = new char[255];
szFieldValue = "";
// load diffuse texture
Lua_GetField(L, "Diffuse", &szFieldValue );
if (strcmp(szFieldValue,"") != 0)
g_pLuaSharedMaterial->m_pDiffuseTexture = Engine()->GetTextureManager()->AddResource( szFieldValue, "..//Content//Textures//" );
szFieldValue = "";
// load normal map texture
Lua_GetField(L, "NormalMap", &szFieldValue );
if (strcmp(szFieldValue,"") != 0)
g_pLuaSharedMaterial->m_pNormalTexture = Engine()->GetTextureManager()->AddResource( szFieldValue, "..//Content//Textures//" );
szFieldValue = "";
// load height map texture
Lua_GetField(L, "HeightMap", &szFieldValue );
if (strcmp(szFieldValue,"") != 0)
g_pLuaSharedMaterial->m_pHeightTexture = Engine()->GetTextureManager()->AddResource( szFieldValue, "..//Content//Textures//" );
szFieldValue = "";
// load shader file
Lua_GetField(L, "Shader", &szFieldValue );
if (strcmp(szFieldValue,"") != 0)
{
char* szFilename = new char[ strlen(szFieldValue) + 4 ];
sprintf_s( szFilename, strlen(szFieldValue) + 4, "%s.fx", szFieldValue );
CEffect* pEffect = Engine()->GetEffectManager()->AddResource( szFilename, "..//Content//Shaders//" );
g_pLuaSharedMaterial->m_pEffect = pEffect;
szFieldValue = "";
// get rendering technique
Lua_GetField(L, "Technique", &szFieldValue );
if ( pEffect && strcmp(szFieldValue,"") != 0)
{
pEffect->SetTechnique( szFieldValue );
}
}
return 0;
}