Shape infrastructure;

This commit is contained in:
bjorn 2016-09-29 00:00:02 -07:00
parent 33b19f367a
commit 93f007f329
2 changed files with 24 additions and 0 deletions

View File

@ -21,6 +21,9 @@ void lovrGraphicsInit() {
state.lastProjection = mat4_init();
state.defaultShader = lovrGraphicsNewShader(lovrDefaultVertexShader, lovrDefaultFragmentShader);
state.lastColor = LOVR_COLOR(255, 255, 255, 255);
glGenBuffers(1, &state.shapeBuffer);
glGenVertexArrays(1, &state.shapeArray);
vec_init(&state.shapeData);
lovrGraphicsReset();
}
@ -227,6 +230,22 @@ void lovrGraphicsGetDimensions(int* width, int* height) {
glfwGetFramebufferSize(window, width, height);
}
void lovrGraphicsSetShapeData(float* data, int count) {
vec_clear(&state.shapeData);
vec_pusharr(&state.shapeData, data, count);
glBindVertexArray(state.shapeArray);
glBindBuffer(GL_ARRAY_BUFFER, state.shapeBuffer);
glBufferData(GL_ARRAY_BUFFER, count * sizeof(float), data, GL_STREAM_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
}
void lovrGraphicsDrawShape() {
lovrGraphicsPrepare();
glBindVertexArray(state.shapeArray);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLE_FAN, 0, state.shapeData.length / 3);
}
Buffer* lovrGraphicsNewBuffer(int size, BufferDrawMode drawMode, BufferUsage usage) {
Buffer* buffer = malloc(sizeof(Buffer));

View File

@ -32,6 +32,9 @@ typedef struct {
unsigned char colorMask;
char isScissorEnabled;
ScissorRectangle scissor;
GLuint shapeArray;
GLuint shapeBuffer;
vec_float_t shapeData;
} GraphicsState;
#endif
@ -61,6 +64,8 @@ void lovrGraphicsTranslate(float x, float y, float z);
void lovrGraphicsRotate(float w, float x, float y, float z);
void lovrGraphicsScale(float x, float y, float z);
void lovrGraphicsGetDimensions(int* width, int* height);
void lovrGraphicsSetShapeData(float* data, int count);
void lovrGraphicsDrawShape();
Buffer* lovrGraphicsNewBuffer(int size, BufferDrawMode drawMode, BufferUsage usage);
Model* lovrGraphicsNewModel(const char* path);
Shader* lovrGraphicsNewShader(const char* vertexSource, const char* fragmentSource);