From 93f007f329df5be67a5019152deb0d613a26c13b Mon Sep 17 00:00:00 2001 From: bjorn Date: Thu, 29 Sep 2016 00:00:02 -0700 Subject: [PATCH] Shape infrastructure; --- src/graphics/graphics.c | 19 +++++++++++++++++++ src/graphics/graphics.h | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index e7bff23c..12c48c75 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -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)); diff --git a/src/graphics/graphics.h b/src/graphics/graphics.h index b6a86499..3362c4c8 100644 --- a/src/graphics/graphics.h +++ b/src/graphics/graphics.h @@ -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);