mirror of https://github.com/bjornbytes/lovr.git
Set up draw modes;
This commit is contained in:
parent
59bbe38489
commit
82916b373b
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue