lovr.graphics.origin;

This commit is contained in:
bjorn 2016-09-21 15:26:05 -07:00
parent 4ae08b771f
commit 0786b67f0b
4 changed files with 17 additions and 3 deletions

View File

@ -19,6 +19,7 @@ static GraphicsState graphicsState;
void lovrGraphicsInit() {
vec_init(&graphicsState.transforms);
vec_push(&graphicsState.transforms, mat4_init());
}
void lovrGraphicsClear(int color, int depth) {
@ -64,18 +65,23 @@ void lovrGraphicsSetShader(Shader* shader) {
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());
if (transforms->length >= 64) { return 1; }
vec_push(transforms, mat4_copy(vec_last(transforms)));
return 0;
}
int lovrGraphicsPop() {
vec_mat4_t* transforms = &graphicsState.transforms;
if (transforms->length == 0) { return 1; }
if (transforms->length <= 1) { return 1; }
mat4_deinit(vec_pop(transforms));
return 0;
}
void lovrGraphicsOrigin() {
vec_mat4_t* transforms = &graphicsState.transforms;
mat4_setIdentity(vec_last(transforms));
}
Buffer* lovrGraphicsNewBuffer(int size, BufferDrawMode drawMode, BufferUsage usage) {
Buffer* buffer = malloc(sizeof(Buffer));

View File

@ -17,6 +17,7 @@ Shader* lovrGraphicsGetShader();
void lovrGraphicsSetShader(Shader* shader);
int lovrGraphicsPush();
int lovrGraphicsPop();
void lovrGraphicsOrigin();
Buffer* lovrGraphicsNewBuffer(int size, BufferDrawMode drawMode, BufferUsage usage);
Model* lovrGraphicsNewModel(const char* path);
Shader* lovrGraphicsNewShader(const char* vertexSource, const char* fragmentSource);

View File

@ -13,6 +13,7 @@ const luaL_Reg lovrGraphics[] = {
{ "setShader", l_lovrGraphicsSetShader },
{ "push", l_lovrGraphicsPush },
{ "pop", l_lovrGraphicsPop },
{ "origin", l_lovrGraphicsOrigin },
{ "newModel", l_lovrGraphicsNewModel },
{ "newBuffer", l_lovrGraphicsNewBuffer },
{ "newShader", l_lovrGraphicsNewShader },
@ -102,6 +103,11 @@ int l_lovrGraphicsPop(lua_State* L) {
return 0;
}
int l_lovrGraphicsOrigin(lua_State* L) {
lovrGraphicsOrigin();
return 0;
}
int l_lovrGraphicsNewBuffer(lua_State* L) {
const char* userDrawMode = luaL_optstring(L, 2, "fan");
BufferDrawMode* drawMode = (BufferDrawMode*) map_get(&BufferDrawModes, userDrawMode);

View File

@ -16,6 +16,7 @@ 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_lovrGraphicsOrigin(lua_State* L);
int l_lovrGraphicsNewBuffer(lua_State* L);
int l_lovrGraphicsNewModel(lua_State* L);
int l_lovrGraphicsNewShader(lua_State* L);