work on object system
This commit is contained in:
@@ -173,27 +173,28 @@ namespace Archimedes {
|
||||
return rt;
|
||||
};
|
||||
|
||||
|
||||
void useRenderTarget(RenderTarget& rt) override {
|
||||
void setupRenderTarget(RenderTarget& rt) override {
|
||||
|
||||
glGenVertexArrays(1, &rt.vertexArray.id);
|
||||
|
||||
glGenBuffers(1, &rt.vertexBuffer.id);
|
||||
|
||||
glGenBuffers(1, &rt.indexArray.id);
|
||||
|
||||
updateRenderTarget(rt);
|
||||
};
|
||||
|
||||
void updateRenderTarget(RenderTarget& rt) override {
|
||||
|
||||
glBindVertexArray(rt.vertexArray.id);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, rt.vertexBuffer.id);
|
||||
glBufferData(GL_ARRAY_BUFFER, rt.vertexBuffer.getSize(), rt.vertexBuffer.getData(), GL_STATIC_DRAW);
|
||||
|
||||
|
||||
glGenBuffers(1, &rt.indexArray.id);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, rt.indexArray.id);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, rt.indexArray.getCount() * sizeof(unsigned int), rt.indexArray.getIndicies(), GL_STATIC_DRAW);
|
||||
|
||||
|
||||
glUseProgram(rt.shader.id);
|
||||
|
||||
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
|
||||
glEnableVertexAttribArray(0);
|
||||
@@ -203,7 +204,14 @@ namespace Archimedes {
|
||||
|
||||
};
|
||||
|
||||
void draw(const RenderTarget& rt, RenderMode mode) override {
|
||||
void freeRenderTarget(RenderTarget& rt) override {
|
||||
|
||||
glDeleteVertexArrays(1, &rt.vertexArray.id);
|
||||
glDeleteBuffers(1, &rt.vertexBuffer.id);
|
||||
glDeleteBuffers(1, &rt.indexArray.id);
|
||||
};
|
||||
|
||||
void draw(const RenderTarget& rt, glm::vec4 color = { 1.0f, 0.0f, 1.0f, 1.0f }, RenderMode mode = RenderMode::Triangles) override {
|
||||
|
||||
glUseProgram(rt.shader.id);
|
||||
|
||||
@@ -214,18 +222,27 @@ namespace Archimedes {
|
||||
unsigned int resLoc = glGetUniformLocation(rt.shader.id, "res");
|
||||
glUniform2ui(resLoc, w, h);
|
||||
|
||||
unsigned int ccLoc = glGetUniformLocation(rt.shader.id, "clearColor");
|
||||
glUniform4f(ccLoc, clearColor.r, clearColor.g, clearColor.b, clearColor.a);
|
||||
unsigned int colorLoc = glGetUniformLocation(rt.shader.id, "color");
|
||||
glUniform4f(colorLoc, color.r, color.g, color.b, color.a);
|
||||
|
||||
glBindVertexArray(rt.vertexArray.id);
|
||||
|
||||
switch(mode) {
|
||||
case RenderMode::Triangles:
|
||||
glDrawElements(GL_TRIANGLES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::Lines:
|
||||
glDrawElements(GL_LINES, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::ConnectedLines:
|
||||
glDrawElements(GL_LINE_STRIP, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::ConnectedLinesLooped:
|
||||
glDrawElements(GL_LINE_LOOP, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
case RenderMode::Points:
|
||||
glDrawElements(GL_POINTS, rt.indexArray.getCount(), GL_UNSIGNED_INT, nullptr);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user