mirror of https://github.com/bjornbytes/lovr.git
Start matrix stack operations;
This commit is contained in:
parent
4eb449c63d
commit
579a3f9b72
|
@ -12,12 +12,13 @@
|
|||
|
||||
typedef struct {
|
||||
Shader* activeShader;
|
||||
vec_mat4_t transforms;
|
||||
} GraphicsState;
|
||||
|
||||
static GraphicsState graphicsState;
|
||||
GraphicsState graphicsState;
|
||||
|
||||
void lovrGraphicsInit() {
|
||||
//
|
||||
vec_init(&graphicsState.transforms);
|
||||
}
|
||||
|
||||
void lovrGraphicsClear(int color, int depth) {
|
||||
|
@ -61,6 +62,20 @@ void lovrGraphicsSetShader(Shader* shader) {
|
|||
glUseProgram(shader->id);
|
||||
}
|
||||
|
||||
int lovrGraphicsPush() {
|
||||
vec_mat4_t* transforms = &graphicsState.transforms;
|
||||
if (transforms->length > 64) { return 1; }
|
||||
vec_push(transforms, transforms->length > 0 ? mat4_copy(vec_last(transforms)) : mat4_init());
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lovrGraphicsPop() {
|
||||
vec_mat4_t* transforms = &graphicsState.transforms;
|
||||
if (transforms->length == 0) { return 1; }
|
||||
mat4_deinit(vec_pop(transforms));
|
||||
return 0;
|
||||
}
|
||||
|
||||
Buffer* lovrGraphicsNewBuffer(int size, BufferDrawMode drawMode, BufferUsage usage) {
|
||||
Buffer* buffer = malloc(sizeof(Buffer));
|
||||
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
#include "buffer.h"
|
||||
#include "model.h"
|
||||
#include "shader.h"
|
||||
#include "../matrix.h"
|
||||
|
||||
#ifndef LOVR_GRAPHICS_TYPES
|
||||
#define LOVR_GRAPHICS_TYPES
|
||||
typedef vec_t(mat4) vec_mat4_t;
|
||||
#endif
|
||||
|
||||
void lovrGraphicsInit();
|
||||
void lovrGraphicsClear(int color, int depth);
|
||||
|
@ -9,6 +15,8 @@ void lovrGraphicsGetClearColor(float* r, float* g, float* b, float* a);
|
|||
void lovrGraphicsSetClearColor(float r, float g, float b, float a);
|
||||
Shader* lovrGraphicsGetShader();
|
||||
void lovrGraphicsSetShader(Shader* shader);
|
||||
int lovrGraphicsPush();
|
||||
int lovrGraphicsPop();
|
||||
Buffer* lovrGraphicsNewBuffer(int size, BufferDrawMode drawMode, BufferUsage usage);
|
||||
Model* lovrGraphicsNewModel(const char* path);
|
||||
Shader* lovrGraphicsNewShader(const char* vertexSource, const char* fragmentSource);
|
||||
|
|
|
@ -11,6 +11,8 @@ const luaL_Reg lovrGraphics[] = {
|
|||
{ "getClearColor", l_lovrGraphicsGetClearColor },
|
||||
{ "setClearColor", l_lovrGraphicsSetClearColor },
|
||||
{ "setShader", l_lovrGraphicsSetShader },
|
||||
{ "push", l_lovrGraphicsPush },
|
||||
{ "pop", l_lovrGraphicsPop },
|
||||
{ "newModel", l_lovrGraphicsNewModel },
|
||||
{ "newBuffer", l_lovrGraphicsNewBuffer },
|
||||
{ "newShader", l_lovrGraphicsNewShader },
|
||||
|
@ -84,6 +86,22 @@ int l_lovrGraphicsSetShader(lua_State* L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrGraphicsPush(lua_State* L) {
|
||||
if (lovrGraphicsPush()) {
|
||||
return luaL_error(L, "Unbalanced matrix stack (more pushes than pops?)");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrGraphicsPop(lua_State* L) {
|
||||
if (lovrGraphicsPop()) {
|
||||
return luaL_error(L, "Unbalanced matrix stack (more pops than pushes?)");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int l_lovrGraphicsNewBuffer(lua_State* L) {
|
||||
const char* userDrawMode = luaL_optstring(L, 2, "fan");
|
||||
BufferDrawMode* drawMode = (BufferDrawMode*) map_get(&BufferDrawModes, userDrawMode);
|
||||
|
|
|
@ -14,6 +14,8 @@ int l_lovrGraphicsGetClearColor(lua_State* L);
|
|||
int l_lovrGraphicsSetClearColor(lua_State* L);
|
||||
int l_lovrGraphicsGetShader(lua_State* L);
|
||||
int l_lovrGraphicsSetShader(lua_State* L);
|
||||
int l_lovrGraphicsPush(lua_State* L);
|
||||
int l_lovrGraphicsPop(lua_State* L);
|
||||
int l_lovrGraphicsNewBuffer(lua_State* L);
|
||||
int l_lovrGraphicsNewModel(lua_State* L);
|
||||
int l_lovrGraphicsNewShader(lua_State* L);
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
*/
|
||||
|
||||
mat4 mat4_init() {
|
||||
mat4 matrix = calloc(16, sizeof(float));
|
||||
return matrix;
|
||||
mat4 matrix = malloc(16 * sizeof(float));
|
||||
return mat4_setIdentity(matrix);
|
||||
}
|
||||
|
||||
mat4 mat4_copy(mat4 source) {
|
||||
|
|
Loading…
Reference in New Issue