From 15174b8299f483e745a730190379c8038b455a9b Mon Sep 17 00:00:00 2001 From: bjorn Date: Tue, 22 Nov 2016 20:59:11 -0800 Subject: [PATCH] lovr.graphics.setDepthTest; --- src/glfw.c | 1 - src/graphics/graphics.c | 12 ++++++++++++ src/graphics/graphics.h | 12 ++++++++++++ src/lovr/graphics.c | 21 +++++++++++++++++++++ src/lovr/graphics.h | 3 +++ 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/glfw.c b/src/glfw.c index 83a2259f..4f7c2a08 100644 --- a/src/glfw.c +++ b/src/glfw.c @@ -43,5 +43,4 @@ void initGlfw(GLFWerrorfun onError, GLFWwindowclosefun onClose, void* userPointe glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_LINE_SMOOTH); glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); } diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index 0c726631..408cbfcd 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -59,6 +59,7 @@ void lovrGraphicsReset() { lovrGraphicsSetPointSize(1); lovrGraphicsSetCullingEnabled(0); lovrGraphicsSetPolygonWinding(POLYGON_WINDING_COUNTERCLOCKWISE); + lovrGraphicsSetDepthTest(COMPARE_LESS); } void lovrGraphicsClear(int color, int depth) { @@ -221,6 +222,17 @@ void lovrGraphicsSetPolygonWinding(PolygonWinding winding) { glFrontFace(winding); } +CompareMode lovrGraphicsGetDepthTest() { + return state.depthTest; +} + +void lovrGraphicsSetDepthTest(CompareMode depthTest) { + if (state.depthTest != depthTest) { + state.depthTest = depthTest; + glDepthFunc(depthTest); + } +} + 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 ab331262..e898c7fd 100644 --- a/src/graphics/graphics.h +++ b/src/graphics/graphics.h @@ -24,6 +24,15 @@ typedef enum { POLYGON_WINDING_COUNTERCLOCKWISE = GL_CCW } PolygonWinding; +typedef enum { + COMPARE_EQUAL = GL_EQUAL, + COMPARE_NOT_EQUAL = GL_NOTEQUAL, + COMPARE_LESS = GL_LESS, + COMPARE_LEQUAL = GL_LEQUAL, + COMPARE_GEQUAL = GL_GEQUAL, + COMPARE_GREATER = GL_GREATER +} CompareMode; + typedef struct { Shader* activeShader; Shader* defaultShader; @@ -43,6 +52,7 @@ typedef struct { float pointSize; char isCullingEnabled; PolygonWinding polygonWinding; + CompareMode depthTest; } GraphicsState; #endif @@ -74,6 +84,8 @@ char lovrGraphicsIsCullingEnabled(); void lovrGraphicsSetCullingEnabled(char isEnabled); PolygonWinding lovrGraphicsGetPolygonWinding(); void lovrGraphicsSetPolygonWinding(PolygonWinding winding); +CompareMode lovrGraphicsGetDepthTest(); +void lovrGraphicsSetDepthTest(CompareMode depthTest); int lovrGraphicsPush(); int lovrGraphicsPop(); void lovrGraphicsOrigin(); diff --git a/src/lovr/graphics.c b/src/lovr/graphics.c index 7ede2893..91650a87 100644 --- a/src/lovr/graphics.c +++ b/src/lovr/graphics.c @@ -62,6 +62,8 @@ const luaL_Reg lovrGraphics[] = { { "setCullingEnabled", l_lovrGraphicsSetCullingEnabled }, { "getPolygonWinding", l_lovrGraphicsGetPolygonWinding }, { "setPolygonWinding", l_lovrGraphicsSetPolygonWinding }, + { "getDepthTest", l_lovrGraphicsGetDepthTest }, + { "setDepthTest", l_lovrGraphicsSetDepthTest }, { "push", l_lovrGraphicsPush }, { "pop", l_lovrGraphicsPop }, { "origin", l_lovrGraphicsOrigin }, @@ -117,6 +119,14 @@ int l_lovrGraphicsInit(lua_State* L) { map_set(&PolygonWindings, "clockwise", POLYGON_WINDING_CLOCKWISE); map_set(&PolygonWindings, "counterclockwise", POLYGON_WINDING_COUNTERCLOCKWISE); + map_init(&CompareModes); + map_set(&CompareModes, "equal", COMPARE_EQUAL); + map_set(&CompareModes, "notequal", COMPARE_NOT_EQUAL); + map_set(&CompareModes, "less", COMPARE_LESS); + map_set(&CompareModes, "lequal", COMPARE_LEQUAL); + map_set(&CompareModes, "gequal", COMPARE_GEQUAL); + map_set(&CompareModes, "greater", COMPARE_GREATER); + map_init(&FilterModes); map_set(&FilterModes, "nearest", FILTER_NEAREST); map_set(&FilterModes, "linear", FILTER_LINEAR); @@ -310,6 +320,17 @@ int l_lovrGraphicsSetPolygonWinding(lua_State* L) { return 0; } +int l_lovrGraphicsGetDepthTest(lua_State* L) { + lua_pushstring(L, map_int_find(&CompareModes, lovrGraphicsGetDepthTest())); + return 1; +} + +int l_lovrGraphicsSetDepthTest(lua_State* L) { + CompareMode* depthTest = (CompareMode*) luax_checkenum(L, 1, &CompareModes, "compare mode"); + lovrGraphicsSetDepthTest(*depthTest); + 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 47627a49..b4b95c52 100644 --- a/src/lovr/graphics.h +++ b/src/lovr/graphics.h @@ -8,6 +8,7 @@ map_int_t BufferDrawModes; map_int_t BufferUsages; map_int_t DrawModes; map_int_t PolygonWindings; +map_int_t CompareModes; map_int_t FilterModes; map_int_t WrapModes; @@ -35,6 +36,8 @@ int l_lovrGraphicsIsCullingEnabled(lua_State* L); int l_lovrGraphicsSetCullingEnabled(lua_State* L); 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_lovrGraphicsPush(lua_State* L); int l_lovrGraphicsPop(lua_State* L); int l_lovrGraphicsOrigin(lua_State* L);