diff --git a/src/api/types/shaderBlock.c b/src/api/types/shaderBlock.c index f216e437..913c3f17 100644 --- a/src/api/types/shaderBlock.c +++ b/src/api/types/shaderBlock.c @@ -8,6 +8,12 @@ int l_lovrShaderBlockGetSize(lua_State* L) { return 1; } +int l_lovrShaderBlockIsWritable(lua_State* L) { + ShaderBlock* block = luax_checktype(L, 1, ShaderBlock); + lua_pushboolean(L, lovrShaderBlockGetType(block) == BLOCK_STORAGE); + return 1; +} + int l_lovrShaderBlockSend(lua_State* L) { ShaderBlock* block = luax_checktype(L, 1, ShaderBlock); const char* name = luaL_checkstring(L, 2); @@ -20,6 +26,7 @@ int l_lovrShaderBlockSend(lua_State* L) { const luaL_Reg lovrShaderBlock[] = { { "getSize", l_lovrShaderBlockGetSize }, + { "isWritable", l_lovrShaderBlockIsWritable }, { "send", l_lovrShaderBlockSend }, { NULL, NULL } }; diff --git a/src/graphics/opengl.c b/src/graphics/opengl.c index 0addf13a..f48518b7 100644 --- a/src/graphics/opengl.c +++ b/src/graphics/opengl.c @@ -1700,6 +1700,10 @@ size_t lovrShaderBlockGetSize(ShaderBlock* block) { return block->size; } +BlockType lovrShaderBlockGetType(ShaderBlock* block) { + return block->type; +} + const Uniform* lovrShaderBlockGetUniform(ShaderBlock* block, const char* name) { int* index = map_get(&block->uniformMap, name); if (!index) return NULL; diff --git a/src/graphics/shader.h b/src/graphics/shader.h index 20eba147..f9537213 100644 --- a/src/graphics/shader.h +++ b/src/graphics/shader.h @@ -75,6 +75,7 @@ void lovrShaderSetBlock(Shader* shader, const char* name, ShaderBlock* block); ShaderBlock* lovrShaderBlockCreate(vec_uniform_t* uniforms, BlockType type, BufferUsage usage); void lovrShaderBlockDestroy(void* ref); size_t lovrShaderBlockGetSize(ShaderBlock* block); +BlockType lovrShaderBlockGetType(ShaderBlock* block); const Uniform* lovrShaderBlockGetUniform(ShaderBlock* block, const char* name); void* lovrShaderBlockMap(ShaderBlock* block); void lovrShaderBlockUnmap(ShaderBlock* block);