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/material.h"
|
||||||
#include "graphics/mesh.h"
|
#include "graphics/mesh.h"
|
||||||
#include "graphics/model.h"
|
#include "graphics/model.h"
|
||||||
#include "graphics/shaderBlock.h"
|
|
||||||
#include "data/modelData.h"
|
#include "data/modelData.h"
|
||||||
#include "data/rasterizer.h"
|
#include "data/rasterizer.h"
|
||||||
#include "data/textureData.h"
|
#include "data/textureData.h"
|
||||||
|
|
|
@ -162,8 +162,26 @@ int l_lovrShaderSend(lua_State* L) {
|
||||||
return 0;
|
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[] = {
|
const luaL_Reg lovrShader[] = {
|
||||||
{ "hasUniform", l_lovrShaderHasUniform },
|
{ "hasUniform", l_lovrShaderHasUniform },
|
||||||
{ "send", l_lovrShaderSend },
|
{ "send", l_lovrShaderSend },
|
||||||
|
{ "getBlock", l_lovrShaderGetBlock },
|
||||||
|
{ "setBlock", l_lovrShaderSetBlock },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
#include "graphics/canvas.h"
|
#include "graphics/canvas.h"
|
||||||
#include "graphics/mesh.h"
|
#include "graphics/mesh.h"
|
||||||
#include "graphics/shader.h"
|
#include "graphics/shader.h"
|
||||||
#include "graphics/shaderBlock.h"
|
|
||||||
#include "graphics/texture.h"
|
#include "graphics/texture.h"
|
||||||
#include "resources/shaders.h"
|
#include "resources/shaders.h"
|
||||||
#include "data/modelData.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");
|
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
|
||||||
|
|
||||||
ShaderBlock* lovrShaderBlockCreate(vec_uniform_t* uniforms) {
|
ShaderBlock* lovrShaderBlockCreate(vec_uniform_t* uniforms) {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#define LOVR_MAX_UNIFORM_LENGTH 64
|
#define LOVR_MAX_UNIFORM_LENGTH 64
|
||||||
#define LOVR_MAX_ATTRIBUTE_LENGTH 64
|
#define LOVR_MAX_ATTRIBUTE_LENGTH 64
|
||||||
|
#define MAX_SHADER_BLOCK_UNIFORMS 32
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
UNIFORM_FLOAT,
|
UNIFORM_FLOAT,
|
||||||
|
@ -45,6 +46,7 @@ typedef struct {
|
||||||
typedef vec_t(Uniform) vec_uniform_t;
|
typedef vec_t(Uniform) vec_uniform_t;
|
||||||
|
|
||||||
typedef struct Shader Shader;
|
typedef struct Shader Shader;
|
||||||
|
typedef struct ShaderBlock ShaderBlock;
|
||||||
|
|
||||||
Shader* lovrShaderCreate(const char* vertexSource, const char* fragmentSource);
|
Shader* lovrShaderCreate(const char* vertexSource, const char* fragmentSource);
|
||||||
Shader* lovrShaderCreateDefault(DefaultShader type);
|
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 lovrShaderSetInt(Shader* shader, const char* name, int* data, int count);
|
||||||
void lovrShaderSetMatrix(Shader* shader, const char* name, float* 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);
|
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
|
#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