Browse Source

Shader:hasStage;

bjorn 4 years ago
parent
commit
a1c79c45d8

+ 5 - 0
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];

+ 5 - 0
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.
 	 **/

+ 13 - 0
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 }
 };