From 571bdc72bec626bbc3cb5f61fb689fb23de2ef67 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Fri, 1 Mar 2019 19:00:26 -0800 Subject: Updated renderscript to work with the new API --- RenderScript/src/ShaderVariableParser.cpp | 38 +++++++++++++++++++------------ 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'RenderScript/src/ShaderVariableParser.cpp') diff --git a/RenderScript/src/ShaderVariableParser.cpp b/RenderScript/src/ShaderVariableParser.cpp index d56cd1f..0bfac71 100644 --- a/RenderScript/src/ShaderVariableParser.cpp +++ b/RenderScript/src/ShaderVariableParser.cpp @@ -29,33 +29,43 @@ namespace Diligent const Char* ShaderVariableParser::ShaderVariableLibName = "ShaderVariable"; ShaderVariableParser::ShaderVariableParser( IRenderDevice *pRenderDevice, lua_State *L, - const String &ShaderLibMetatableName, + const String &PSOLibMetatableName, const String &BufferLibMetatableName, const String &BufferViewLibMetatableName, const String &TexViewMetatableName ) : EngineObjectParserBase( pRenderDevice, L, ShaderVariableLibName ), - m_ShaderLibMetatableName(ShaderLibMetatableName), + m_PSOLibMetatableName(PSOLibMetatableName), m_BufferLibMetatableName(BufferLibMetatableName), m_BufferViewLibMetatableName(BufferViewLibMetatableName), m_TexViewMetatableName(TexViewMetatableName), m_SetBinding( this, L, m_MetatableRegistryName.c_str(), "Set", &ShaderVariableParser::Set ), - m_GetShaderVariableBinding( this, L, m_ShaderLibMetatableName.c_str(), "GetShaderVariable", &ShaderVariableParser::GetShaderVariable ) + m_GetStaticShaderVariableBinding( this, L, m_PSOLibMetatableName.c_str(), "GetStaticShaderVariable", &ShaderVariableParser::GetStaticShaderVariable ) { }; void ShaderVariableParser::CreateObj( lua_State *L ) { + auto NumArgs = lua_gettop( L ); + if( NumArgs < 3 ) + { + SCRIPT_PARSING_ERROR( L, "2 arguments (shader type and variable name) are expected" ); + } + INIT_LUA_STACK_TRACKING(L); // Shader should be the first argument - auto *pShader = *GetUserData( L, 1, m_ShaderLibMetatableName.c_str() ); + auto *pPSO = *GetUserData( L, 1, m_PSOLibMetatableName.c_str() ); + SHADER_TYPE ShaderType = SHADER_TYPE_UNKNOWN; + EnumMemberBinder ShaderTypeParser(0, "ShaderType", m_ShaderTypeEnumMapping); + ShaderTypeParser.SetValue(L, 2, &ShaderType); + // Variable name should be the second argument - auto VarName = ReadValueFromLua( L, 2 ); + auto VarName = ReadValueFromLua( L, 3 ); - auto pVar = pShader->GetShaderVariable( VarName.c_str() ); + auto pVar = pPSO->GetStaticShaderVariable(ShaderType, VarName.c_str() ); - auto pNewShaderVarLuaObj = reinterpret_cast(lua_newuserdata( L, sizeof( IShaderVariable* ) )); + auto pNewShaderVarLuaObj = reinterpret_cast(lua_newuserdata( L, sizeof( IShaderResourceVariable* ) )); *pNewShaderVarLuaObj = pVar; pVar->AddRef(); @@ -66,7 +76,7 @@ namespace Diligent { if( pData != nullptr ) { - auto ppShaderVar = reinterpret_cast(pData); + auto ppShaderVar = reinterpret_cast(pData); if( *ppShaderVar != nullptr ) (*ppShaderVar)->Release(); } @@ -84,15 +94,15 @@ namespace Diligent void ShaderVariableParser::PushExistingObject( lua_State *L, const void *pObject ) { - auto pShaderVariable = reinterpret_cast(lua_newuserdata( L, sizeof( IShaderVariable* ) )); - *pShaderVariable = reinterpret_cast( const_cast(pObject) ); + auto pShaderVariable = reinterpret_cast(lua_newuserdata( L, sizeof( IShaderResourceVariable* ) )); + *pShaderVariable = reinterpret_cast( const_cast(pObject) ); (*pShaderVariable)->AddRef(); } int ShaderVariableParser::Set( lua_State *L ) { // Shader variable is the first argument - auto *pShaderVar = *GetUserData( L, 1, m_MetatableRegistryName.c_str() ); + auto *pShaderVar = *GetUserData( L, 1, m_MetatableRegistryName.c_str() ); IDeviceObject *pObject = nullptr; auto ArgType = lua_type( L, 2 ); @@ -126,14 +136,14 @@ namespace Diligent return 0; } - int ShaderVariableParser::GetShaderVariable( lua_State *L ) + int ShaderVariableParser::GetStaticShaderVariable( lua_State *L ) { return LuaCreate(L); } - void ShaderVariableParser::GetObjectByName( lua_State *L, const Char *ShaderName, IShaderVariable** ppObject ) + void ShaderVariableParser::GetObjectByName( lua_State *L, const Char *ShaderName, IShaderResourceVariable** ppObject ) { - auto pObject = *GetGlobalObject( L, ShaderName, m_MetatableRegistryName.c_str() ); + auto pObject = *GetGlobalObject( L, ShaderName, m_MetatableRegistryName.c_str() ); *ppObject = pObject; pObject->AddRef(); } -- cgit v1.2.3