diff --git a/src/modules/graphics/Shader.cpp b/src/modules/graphics/Shader.cpp index af7328546..7bc8fae58 100644 --- a/src/modules/graphics/Shader.cpp +++ b/src/modules/graphics/Shader.cpp @@ -564,6 +564,11 @@ Shader::~Shader() attachDefault(STANDARD_DEFAULT); } +bool Shader::hasStage(ShaderStageType stage) +{ + return stages[stage] != nullptr; +} + void Shader::attachDefault(StandardShader defaultType) { Shader *defaultshader = standardShaders[defaultType]; diff --git a/src/modules/graphics/Shader.h b/src/modules/graphics/Shader.h index 88807ebcf..abc24a832 100644 --- a/src/modules/graphics/Shader.h +++ b/src/modules/graphics/Shader.h @@ -167,6 +167,11 @@ public: Shader(ShaderStage *vertex, ShaderStage *pixel); virtual ~Shader(); + /** + * Check whether a Shader has a stage. + **/ + bool hasStage(ShaderStageType stage); + /** * Binds this Shader's program to be used when rendering. **/ diff --git a/src/modules/graphics/wrap_Shader.cpp b/src/modules/graphics/wrap_Shader.cpp index 198f39dac..bd0fbd5c1 100644 --- a/src/modules/graphics/wrap_Shader.cpp +++ b/src/modules/graphics/wrap_Shader.cpp @@ -491,12 +491,25 @@ int w_Shader_hasUniform(lua_State *L) return 1; } +int w_Shader_hasStage(lua_State* L) +{ + Shader *shader = luax_checkshader(L, 1); + ShaderStageType stage; + const char *str = luaL_checkstring(L, 2); + if (!ShaderStage::getConstant(str, stage)) + return luax_enumerror(L, "shader stage", str); + + luax_pushboolean(L, shader->hasStage(stage)); + return 1; +} + static const luaL_Reg w_Shader_functions[] = { { "getWarnings", w_Shader_getWarnings }, { "send", w_Shader_send }, { "sendColor", w_Shader_sendColors }, { "hasUniform", w_Shader_hasUniform }, + { "hasStage", w_Shader_hasStage }, { 0, 0 } };