lovr.graphics.setDepthTest;

This commit is contained in:
bjorn 2016-11-22 20:59:11 -08:00
parent 00e07c177b
commit 15174b8299
5 changed files with 48 additions and 1 deletions

View File

@ -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);
}

View File

@ -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; }

View File

@ -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();

View File

@ -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?)");

View File

@ -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);