mirror of https://github.com/bjornbytes/lovr.git
Shader:getBlock; Shader:setBlock;
This commit is contained in:
parent
854431c9ea
commit
a4052430a4
|
@ -5,7 +5,6 @@
|
|||
#include "graphics/material.h"
|
||||
#include "graphics/mesh.h"
|
||||
#include "graphics/model.h"
|
||||
#include "graphics/shaderBlock.h"
|
||||
#include "data/modelData.h"
|
||||
#include "data/rasterizer.h"
|
||||
#include "data/textureData.h"
|
||||
|
|
|
@ -162,8 +162,26 @@ int l_lovrShaderSend(lua_State* L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrShaderGetBlock(lua_State* L) {
|
||||
Shader* shader = luax_checktype(L, 1, Shader);
|
||||
const char* name = luaL_checkstring(L, 2);
|
||||
ShaderBlock* block = lovrShaderGetBlock(shader, name);
|
||||
luax_pushobject(L, block);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_lovrShaderSetBlock(lua_State* L) {
|
||||
Shader* shader = luax_checktype(L, 1, Shader);
|
||||
const char* name = luaL_checkstring(L, 2);
|
||||
ShaderBlock* block = luax_checktype(L, 3, ShaderBlock);
|
||||
lovrShaderSetBlock(shader, name, block);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg lovrShader[] = {
|
||||
{ "hasUniform", l_lovrShaderHasUniform },
|
||||
{ "send", l_lovrShaderSend },
|
||||
{ "getBlock", l_lovrShaderGetBlock },
|
||||
{ "setBlock", l_lovrShaderSetBlock },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
#include "graphics/canvas.h"
|
||||
#include "graphics/mesh.h"
|
||||
#include "graphics/shader.h"
|
||||
#include "graphics/shaderBlock.h"
|
||||
#include "graphics/texture.h"
|
||||
#include "resources/shaders.h"
|
||||
#include "data/modelData.h"
|
||||
|
@ -1506,6 +1505,22 @@ void lovrShaderSetTexture(Shader* shader, const char* name, Texture** data, int
|
|||
lovrShaderSetUniform(shader, name, UNIFORM_SAMPLER, data, count, sizeof(Texture*), "texture");
|
||||
}
|
||||
|
||||
ShaderBlock* lovrShaderGetBlock(Shader* shader, const char* name) {
|
||||
int* index = map_get(&shader->blockMap, name);
|
||||
lovrAssert(index, "No shader block named '%s'", name);
|
||||
|
||||
UniformBlock* block = &shader->blocks.data[*index];
|
||||
return block->source;
|
||||
}
|
||||
|
||||
void lovrShaderSetBlock(Shader* shader, const char* name, ShaderBlock* source) {
|
||||
int* index = map_get(&shader->blockMap, name);
|
||||
lovrAssert(index, "No shader block named '%s'", name);
|
||||
|
||||
UniformBlock* block = &shader->blocks.data[*index];
|
||||
block->source = source;
|
||||
}
|
||||
|
||||
// ShaderBlock
|
||||
|
||||
ShaderBlock* lovrShaderBlockCreate(vec_uniform_t* uniforms) {
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#define LOVR_MAX_UNIFORM_LENGTH 64
|
||||
#define LOVR_MAX_ATTRIBUTE_LENGTH 64
|
||||
#define MAX_SHADER_BLOCK_UNIFORMS 32
|
||||
|
||||
typedef enum {
|
||||
UNIFORM_FLOAT,
|
||||
|
@ -45,6 +46,7 @@ typedef struct {
|
|||
typedef vec_t(Uniform) vec_uniform_t;
|
||||
|
||||
typedef struct Shader Shader;
|
||||
typedef struct ShaderBlock ShaderBlock;
|
||||
|
||||
Shader* lovrShaderCreate(const char* vertexSource, const char* fragmentSource);
|
||||
Shader* lovrShaderCreateDefault(DefaultShader type);
|
||||
|
@ -57,3 +59,8 @@ void lovrShaderSetFloat(Shader* shader, const char* name, float* data, int count
|
|||
void lovrShaderSetInt(Shader* shader, const char* name, int* data, int count);
|
||||
void lovrShaderSetMatrix(Shader* shader, const char* name, float* data, int count);
|
||||
void lovrShaderSetTexture(Shader* shader, const char* name, Texture** data, int count);
|
||||
ShaderBlock* lovrShaderGetBlock(Shader* shader, const char* name);
|
||||
void lovrShaderSetBlock(Shader* shader, const char* name, ShaderBlock* block);
|
||||
|
||||
ShaderBlock* lovrShaderBlockCreate(vec_uniform_t* uniforms);
|
||||
void lovrShaderBlockDestroy(void* ref);
|
||||
|
|
|
@ -2,9 +2,3 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#define MAX_SHADER_BLOCK_UNIFORMS 32
|
||||
|
||||
typedef struct ShaderBlock ShaderBlock;
|
||||
|
||||
ShaderBlock* lovrShaderBlockCreate(vec_uniform_t* uniforms);
|
||||
void lovrShaderBlockDestroy(void* ref);
|
||||
|
|
Loading…
Reference in New Issue