Set up draw modes;

This commit is contained in:
bjorn 2016-10-01 12:10:38 -07:00
parent 59bbe38489
commit 82916b373b
4 changed files with 51 additions and 37 deletions

View File

@ -252,7 +252,7 @@ void lovrGraphicsSetShapeData(float* vertexData, int vertexLength, unsigned int*
}
}
void lovrGraphicsDrawShape(DrawMode mode) {
void lovrGraphicsDrawShape(GLenum mode) {
int usingIbo = state.shapeIndices.length > 0;
lovrGraphicsPrepare();
glBindVertexArray(state.shapeArray);
@ -268,38 +268,42 @@ void lovrGraphicsDrawShape(DrawMode mode) {
void lovrGraphicsLine(float* points, int count) {
lovrGraphicsSetShapeData(points, count, NULL, 0);
lovrGraphicsDrawShape(DRAW_MODE_LINE);
lovrGraphicsDrawShape(GL_LINE_STRIP);
}
void lovrGraphicsCube(float x, float y, float z, float size) {
float points[] = {
// Bottom
-.5, .5, -.5,
.5, .5, -.5,
.5, -.5, -.5,
-.5, -.5, -.5,
void lovrGraphicsCube(DrawMode mode, float x, float y, float z, float size) {
if (mode == DRAW_MODE_LINE) {
float points[] = {
// Bottom
-.5, .5, -.5,
.5, .5, -.5,
.5, -.5, -.5,
-.5, -.5, -.5,
// Top
-.5, .5, .5,
.5, .5, .5,
.5, -.5, .5,
-.5, -.5, .5
};
// Top
-.5, .5, .5,
.5, .5, .5,
.5, -.5, .5,
-.5, -.5, .5
};
unsigned int indices[] = {
0, 1, 1, 2, 2, 3, 3, 0, // Bottom
4, 5, 5, 6, 6, 7, 7, 4, // Top
0, 4, 1, 5, 2, 6, 3, 7 // Connections
};
unsigned int indices[] = {
0, 1, 1, 2, 2, 3, 3, 0, // Bottom
4, 5, 5, 6, 6, 7, 7, 4, // Top
0, 4, 1, 5, 2, 6, 3, 7 // Connections
};
float transform[16];
mat4_setTranslation(transform, x, y, z);
mat4_scale(transform, size, size, size);
lovrGraphicsPush();
lovrGraphicsTransform(transform);
lovrGraphicsSetShapeData(points, 24, indices, 24);
lovrGraphicsDrawShape(DRAW_MODE_LINES);
lovrGraphicsPop();
float transform[16];
mat4_setTranslation(transform, x, y, z);
mat4_scale(transform, size, size, size);
lovrGraphicsPush();
lovrGraphicsTransform(transform);
lovrGraphicsSetShapeData(points, 24, indices, 24);
lovrGraphicsDrawShape(GL_LINES);
lovrGraphicsPop();
} else {
return;
}
}
Buffer* lovrGraphicsNewBuffer(int size, BufferDrawMode drawMode, BufferUsage usage) {

View File

@ -21,9 +21,8 @@ typedef struct {
} ScissorRectangle;
typedef enum {
DRAW_MODE_FILL = GL_TRIANGLE_FAN,
DRAW_MODE_LINE = GL_LINE_STRIP,
DRAW_MODE_LINES = GL_LINES
DRAW_MODE_FILL,
DRAW_MODE_LINE
} DrawMode;
typedef struct {
@ -76,7 +75,7 @@ void lovrGraphicsGetDimensions(int* width, int* height);
void lovrGraphicsSetShapeData(float* data, int count, unsigned int* indices, int indexCount);
void lovrGraphicsDrawShape();
void lovrGraphicsLine(float* points, int count);
void lovrGraphicsCube(float x, float y, float z, float size);
void lovrGraphicsCube(DrawMode mode, float x, float y, float z, float size);
Buffer* lovrGraphicsNewBuffer(int size, BufferDrawMode drawMode, BufferUsage usage);
Model* lovrGraphicsNewModel(const char* path);
Shader* lovrGraphicsNewShader(const char* vertexSource, const char* fragmentSource);

View File

@ -54,6 +54,10 @@ int l_lovrGraphicsInit(lua_State* L) {
map_set(&BufferUsages, "dynamic", BUFFER_DYNAMIC);
map_set(&BufferUsages, "stream", BUFFER_STREAM);
map_init(&DrawModes);
map_set(&DrawModes, "fill", DRAW_MODE_FILL);
map_set(&DrawModes, "line", DRAW_MODE_LINE);
lovrGraphicsInit();
return 1;
}
@ -282,11 +286,17 @@ int l_lovrGraphicsLine(lua_State* L) {
}
int l_lovrGraphicsCube(lua_State* L) {
float x = luaL_optnumber(L, 1, 0.f);
float y = luaL_optnumber(L, 2, 0.f);
float z = luaL_optnumber(L, 3, 0.f);
float s = luaL_optnumber(L, 4, 1.f);
lovrGraphicsCube(x, y, z, s);
const char* userDrawMode = luaL_checkstring(L, 1);
DrawMode* drawMode = (DrawMode*) map_get(&DrawModes, userDrawMode);
if (!drawMode) {
return luaL_error(L, "Invalid draw mode: '%s'", userDrawMode);
}
float x = luaL_optnumber(L, 2, 0.f);
float y = luaL_optnumber(L, 3, 0.f);
float z = luaL_optnumber(L, 4, 0.f);
float s = luaL_optnumber(L, 5, 1.f);
lovrGraphicsCube(*drawMode, x, y, z, s);
return 0;
}

View File

@ -5,6 +5,7 @@
map_int_t BufferDrawModes;
map_int_t BufferUsages;
map_int_t DrawModes;
extern const luaL_Reg lovrGraphics[];
int l_lovrGraphicsInit(lua_State* L);