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;
}
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);
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;
return uniforms.find(name) != uniforms.end();
}
GLint Shader::getAttribLocation(const std::string &name)
+3 -10
View File
@@ -168,17 +168,10 @@ public:
void sendTexture(const std::string &name, Texture *texture);
/**
* Gets the type, number of components, and number of array elements of
* an active uniform variable in the shader. If a uniform variable with the
* 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.
* Gets whether a uniform with the specified name exists and is actively
* used in the shader.
**/
UniformType getUniformVariable(const std::string &name, int &components, int &count);
bool hasUniform(const std::string &name) const;
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");
}
int w_Shader_getUniformVariable(lua_State *L)
int w_Shader_hasUniform(lua_State *L)
{
Shader *shader = luax_checkshader(L, 1);
const char *name = luaL_checkstring(L, 2);
int components = 0;
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;
luax_pushboolean(L, shader->hasUniform(name));
return 1;
}
static const luaL_Reg w_Shader_functions[] =
@@ -366,7 +342,7 @@ static const luaL_Reg w_Shader_functions[] =
{ "sendMatrix", w_Shader_sendMatrix },
{ "sendTexture", w_Shader_sendTexture },
{ "send", w_Shader_send },
{ "getUniformVariable", w_Shader_getUniformVariable },
{ "hasUniform", w_Shader_hasUniform },
{ 0, 0 }
};