In fact, lets just replace Shader:getUniformVariable with Shader:hasUniform. The latter returns true if the uniform with the specified name exists and contributes to the final output of the shader.

--HG--
branch : minor
This commit is contained in:
Alex Szpakowski
2016-09-01 18:32:12 -03:00
parent ee79038572
commit 7a904de2e1
3 changed files with 9 additions and 52 deletions
+2 -14
View File
@@ -621,21 +621,9 @@ int Shader::getTextureUnit(const std::string &name)
return texunit; return texunit;
} }
Shader::UniformType Shader::getUniformVariable(const std::string &name, int &components, int &count) bool Shader::hasUniform(const std::string &name) const
{ {
auto it = uniforms.find(name); return uniforms.find(name) != uniforms.end();
if (it == uniforms.end())
{
components = 0;
count = 0;
return UNIFORM_UNKNOWN;
}
components = getUniformTypeSize(it->second.type);
count = (int) it->second.count;
return it->second.baseType;
} }
GLint Shader::getAttribLocation(const std::string &name) GLint Shader::getAttribLocation(const std::string &name)
+3 -10
View File
@@ -168,17 +168,10 @@ public:
void sendTexture(const std::string &name, Texture *texture); void sendTexture(const std::string &name, Texture *texture);
/** /**
* Gets the type, number of components, and number of array elements of * Gets whether a uniform with the specified name exists and is actively
* an active uniform variable in the shader. If a uniform variable with the * used in the shader.
* specified name doesn't exist, returns UNIFORM_UNKNOWN and sets the
* 'components' and 'count' values to 0.
*
* @param name The name of the uniform variable in the source code.
* @param[out] components Number of components of the variable (2 for vec2.)
* @param[out] count Number of array elements, if the variable is an array.
* @return The base type of the uniform variable.
**/ **/
UniformType getUniformVariable(const std::string &name, int &components, int &count); bool hasUniform(const std::string &name) const;
GLint getAttribLocation(const std::string &name); GLint getAttribLocation(const std::string &name);
+4 -28
View File
@@ -324,36 +324,12 @@ int w_Shader_send(lua_State *L)
return luaL_argerror(L, 3, "number, boolean, table, image, or canvas expected"); return luaL_argerror(L, 3, "number, boolean, table, image, or canvas expected");
} }
int w_Shader_getUniformVariable(lua_State *L) int w_Shader_hasUniform(lua_State *L)
{ {
Shader *shader = luax_checkshader(L, 1); Shader *shader = luax_checkshader(L, 1);
const char *name = luaL_checkstring(L, 2); const char *name = luaL_checkstring(L, 2);
luax_pushboolean(L, shader->hasUniform(name));
int components = 0; return 1;
int arrayelements = 0;
Shader::UniformType type = Shader::UNIFORM_UNKNOWN;
type = shader->getUniformVariable(name, components, arrayelements);
// Check if the variable exists (function will set components to 0 if not.)
if (components > 0)
{
const char *tname = nullptr;
if (!Shader::getConstant(type, tname))
return luaL_error(L, "Unknown uniform variable type name.");
lua_pushstring(L, tname);
lua_pushinteger(L, components);
lua_pushinteger(L, arrayelements);
}
else
{
lua_pushnil(L);
lua_pushnil(L);
lua_pushnil(L);
}
return 3;
} }
static const luaL_Reg w_Shader_functions[] = static const luaL_Reg w_Shader_functions[] =
@@ -366,7 +342,7 @@ static const luaL_Reg w_Shader_functions[] =
{ "sendMatrix", w_Shader_sendMatrix }, { "sendMatrix", w_Shader_sendMatrix },
{ "sendTexture", w_Shader_sendTexture }, { "sendTexture", w_Shader_sendTexture },
{ "send", w_Shader_send }, { "send", w_Shader_send },
{ "getUniformVariable", w_Shader_getUniformVariable }, { "hasUniform", w_Shader_hasUniform },
{ 0, 0 } { 0, 0 }
}; };