summaryrefslogtreecommitdiff
path: root/themes/LeafParticleRender.cpp
diff options
context:
space:
mode:
authorMatthew Kosarek <mattkae@protonmail.com>2021-10-05 06:35:09 -0400
committerMatthew Kosarek <mattkae@protonmail.com>2021-10-05 06:35:09 -0400
commitd781d5a3c1ec6872361db2a15786dfc0db9780f3 (patch)
tree7e355a89bb0062cdd7692f3dae820a5e467aba9e /themes/LeafParticleRender.cpp
parent9d33d175b5cd564e77bda07fcbce252477f7c40f (diff)
Working tree render, now just have to do the leaves
Diffstat (limited to 'themes/LeafParticleRender.cpp')
-rw-r--r--themes/LeafParticleRender.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/themes/LeafParticleRender.cpp b/themes/LeafParticleRender.cpp
new file mode 100644
index 0000000..e119e22
--- /dev/null
+++ b/themes/LeafParticleRender.cpp
@@ -0,0 +1,51 @@
+#include "LeafParticleRender.h"
+#include "Renderer2d.h"
+
+void LeafParticleRender::load(Renderer2d *renderer, TreeShape *tree) {
+ numVertices = 0;
+ numLeaves = 0;
+
+ vertices = new Renderer2dVertex[numVertices];
+
+ useShader(renderer->shader);
+
+ glGenVertexArrays(1, &vao);
+ glBindVertexArray(vao);
+
+ glGenBuffers(1, &vbo);
+ glBindBuffer(GL_ARRAY_BUFFER, vbo);
+ glBufferData(GL_ARRAY_BUFFER, numVertices * sizeof(Renderer2dVertex), &vertices[0], GL_DYNAMIC_DRAW);
+
+ glEnableVertexAttribArray(renderer->attributes.position);
+ glVertexAttribPointer(renderer->attributes.position, 2, GL_FLOAT, GL_FALSE, sizeof(Renderer2dVertex), (GLvoid *)0);
+
+ glEnableVertexAttribArray(renderer->attributes.color);
+ glVertexAttribPointer(renderer->attributes.color, 4, GL_FLOAT, GL_FALSE, sizeof(Renderer2dVertex), (GLvoid *)offsetof(Renderer2dVertex, color));
+
+ glEnableVertexAttribArray(renderer->attributes.scale);
+ glVertexAttribPointer(renderer->attributes.scale, 2, GL_FLOAT, GL_FALSE, sizeof(Renderer2dVertex), (GLvoid *)offsetof(Renderer2dVertex, scale));
+
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
+ glBindVertexArray(0);
+}
+
+void LeafParticleRender::update(float32 dtSeconds) {
+
+}
+
+void LeafParticleRender::render(Renderer2d *renderer) {
+ setShaderMat4(renderer->uniforms.model, model);
+
+ glBindBuffer(GL_ARRAY_BUFFER, vbo);
+ glBufferSubData(GL_ARRAY_BUFFER, 0, numVertices * sizeof(Renderer2dVertex), &vertices[0]);
+
+ glBindVertexArray(vao);
+ glDrawArraysInstanced(GL_TRIANGLES, 0, 6 * numVertices, numLeaves);
+ glBindVertexArray(0);
+}
+
+void LeafParticleRender::unload() {
+ glDeleteVertexArrays(1, &vao);
+ glDeleteBuffers(1, &vbo);
+ delete [] vertices;
+} \ No newline at end of file