From f18ee761cdb6770c6648937da905420fc371695d Mon Sep 17 00:00:00 2001 From: bjorn Date: Tue, 22 Nov 2016 21:07:33 -0800 Subject: [PATCH] lovr.graphics.setWireframe; --- src/graphics/graphics.c | 20 ++++++++++++++++---- src/graphics/graphics.h | 16 ++++++++++------ src/lovr/graphics.c | 12 ++++++++++++ src/lovr/graphics.h | 2 ++ 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index 408cbfcd..b0262531 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -60,6 +60,7 @@ void lovrGraphicsReset() { lovrGraphicsSetCullingEnabled(0); lovrGraphicsSetPolygonWinding(POLYGON_WINDING_COUNTERCLOCKWISE); lovrGraphicsSetDepthTest(COMPARE_LESS); + lovrGraphicsSetWireframe(0); } void lovrGraphicsClear(int color, int depth) { @@ -122,11 +123,11 @@ void lovrGraphicsSetColorMask(char r, char g, char b, char a) { glColorMask(r, g, b, a); } -char lovrGraphicsIsScissorEnabled() { +int lovrGraphicsIsScissorEnabled() { return state.isScissorEnabled; } -void lovrGraphicsSetScissorEnabled(char isEnabled) { +void lovrGraphicsSetScissorEnabled(int isEnabled) { state.isScissorEnabled = isEnabled; if (isEnabled) { glEnable(GL_SCISSOR_TEST); @@ -200,11 +201,11 @@ void lovrGraphicsSetPointSize(float size) { glPointSize(size); } -char lovrGraphicsIsCullingEnabled() { +int lovrGraphicsIsCullingEnabled() { return state.isCullingEnabled; } -void lovrGraphicsSetCullingEnabled(char isEnabled) { +void lovrGraphicsSetCullingEnabled(int isEnabled) { state.isCullingEnabled = isEnabled; if (isEnabled) { glEnable(GL_CULL_FACE); @@ -233,6 +234,17 @@ void lovrGraphicsSetDepthTest(CompareMode depthTest) { } } +int lovrGraphicsIsWireframe() { + return state.isWireframe; +} + +void lovrGraphicsSetWireframe(int wireframe) { + if (state.isWireframe != wireframe) { + state.isWireframe = wireframe; + glPolygonMode(GL_FRONT_AND_BACK, wireframe ? GL_LINE : GL_FILL); + } +} + int lovrGraphicsPush() { vec_mat4_t* transforms = &state.transforms; if (transforms->length >= 64) { return 1; } diff --git a/src/graphics/graphics.h b/src/graphics/graphics.h index e898c7fd..3ef69d9f 100644 --- a/src/graphics/graphics.h +++ b/src/graphics/graphics.h @@ -41,7 +41,7 @@ typedef struct { mat4 projection; unsigned int color; char colorMask; - char isScissorEnabled; + int isScissorEnabled; ScissorRectangle scissor; GLuint shapeArray; GLuint shapeBuffer; @@ -50,10 +50,12 @@ typedef struct { vec_uint_t shapeIndices; float lineWidth; float pointSize; - char isCullingEnabled; + int isCullingEnabled; PolygonWinding polygonWinding; CompareMode depthTest; + int isWireframe; } GraphicsState; + #endif void lovrGraphicsInit(); @@ -68,8 +70,8 @@ void lovrGraphicsGetColor(unsigned char* r, unsigned char* g, unsigned char* b, void lovrGraphicsSetColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a); void lovrGraphicsGetColorMask(char* r, char* g, char* b, char* a); void lovrGraphicsSetColorMask(char r, char g, char b, char a); -char lovrGraphicsIsScissorEnabled(); -void lovrGraphicsSetScissorEnabled(char isEnabled); +int lovrGraphicsIsScissorEnabled(); +void lovrGraphicsSetScissorEnabled(int isEnabled); void lovrGraphicsGetScissor(int* x, int* y, int* width, int* height); void lovrGraphicsSetScissor(int x, int y, int width, int height); Shader* lovrGraphicsGetShader(); @@ -80,12 +82,14 @@ float lovrGraphicsGetLineWidth(); void lovrGraphicsSetLineWidth(float width); float lovrGraphicsGetPointSize(); void lovrGraphicsSetPointSize(float size); -char lovrGraphicsIsCullingEnabled(); -void lovrGraphicsSetCullingEnabled(char isEnabled); +int lovrGraphicsIsCullingEnabled(); +void lovrGraphicsSetCullingEnabled(int isEnabled); PolygonWinding lovrGraphicsGetPolygonWinding(); void lovrGraphicsSetPolygonWinding(PolygonWinding winding); CompareMode lovrGraphicsGetDepthTest(); void lovrGraphicsSetDepthTest(CompareMode depthTest); +int lovrGraphicsIsWireframe(); +void lovrGraphicsSetWireframe(int wireframe); int lovrGraphicsPush(); int lovrGraphicsPop(); void lovrGraphicsOrigin(); diff --git a/src/lovr/graphics.c b/src/lovr/graphics.c index 91650a87..6c8ffd62 100644 --- a/src/lovr/graphics.c +++ b/src/lovr/graphics.c @@ -64,6 +64,8 @@ const luaL_Reg lovrGraphics[] = { { "setPolygonWinding", l_lovrGraphicsSetPolygonWinding }, { "getDepthTest", l_lovrGraphicsGetDepthTest }, { "setDepthTest", l_lovrGraphicsSetDepthTest }, + { "isWireframe", l_lovrGraphicsIsWireframe }, + { "setWireframe", l_lovrGraphicsSetWireframe }, { "push", l_lovrGraphicsPush }, { "pop", l_lovrGraphicsPop }, { "origin", l_lovrGraphicsOrigin }, @@ -331,6 +333,16 @@ int l_lovrGraphicsSetDepthTest(lua_State* L) { return 0; } +int l_lovrGraphicsIsWireframe(lua_State* L) { + lua_pushboolean(L, lovrGraphicsIsWireframe()); + return 1; +} + +int l_lovrGraphicsSetWireframe(lua_State* L) { + lovrGraphicsSetWireframe(lua_toboolean(L, 1)); + return 0; +} + int l_lovrGraphicsPush(lua_State* L) { if (lovrGraphicsPush()) { return luaL_error(L, "Unbalanced matrix stack (more pushes than pops?)"); diff --git a/src/lovr/graphics.h b/src/lovr/graphics.h index b4b95c52..5dd72aac 100644 --- a/src/lovr/graphics.h +++ b/src/lovr/graphics.h @@ -38,6 +38,8 @@ int l_lovrGraphicsGetPolygonWinding(lua_State* L); int l_lovrGraphicsSetPolygonWinding(lua_State* L); int l_lovrGraphicsGetDepthTest(lua_State* L); int l_lovrGraphicsSetDepthTest(lua_State* L); +int l_lovrGraphicsIsWireframe(lua_State* L); +int l_lovrGraphicsSetWireframe(lua_State* L); int l_lovrGraphicsPush(lua_State* L); int l_lovrGraphicsPop(lua_State* L); int l_lovrGraphicsOrigin(lua_State* L);