summaryrefslogtreecommitdiff
path: root/shared_cpp
diff options
context:
space:
mode:
Diffstat (limited to 'shared_cpp')
-rw-r--r--shared_cpp/Renderer2d.cpp24
-rw-r--r--shared_cpp/Renderer2d.h5
-rw-r--r--shared_cpp/mathlib.cpp28
-rw-r--r--shared_cpp/mathlib.h4
4 files changed, 54 insertions, 7 deletions
diff --git a/shared_cpp/Renderer2d.cpp b/shared_cpp/Renderer2d.cpp
index adef4de..c050172 100644
--- a/shared_cpp/Renderer2d.cpp
+++ b/shared_cpp/Renderer2d.cpp
@@ -3,15 +3,16 @@
#include "mathlib.h"
const char* orthographicVertex =
-"attribute vec2 position; \n"
+"attribute vec4 position; \n"
"attribute vec4 color; \n"
"uniform mat4 projection; \n"
"uniform mat4 model; \n"
"varying lowp vec4 VertexColor; \n"
"void main() { \n"
-" vec4 fragmentPosition = projection * model * vec4(position, 1, 1); \n"
+" vec4 fragmentPosition = projection * model * position; \n"
" gl_Position = fragmentPosition; \n"
" VertexColor = color; \n"
+" gl_PointSize = 2.0; \n"
"}";
const char* orthographicFragment =
@@ -55,6 +56,7 @@ void Renderer2d::unload() {
void Mesh2d::load(Vertex2d* inVertices, uint32 inNumVertices, Renderer2d* renderer, GLenum loadType) {
mode = MeshMode::Vertex;
numVertices = inNumVertices;
+ isDynamic = loadType == GL_DYNAMIC_DRAW;
useShader(renderer->shader);
glGenVertexArrays(1, &vao);
@@ -65,7 +67,7 @@ void Mesh2d::load(Vertex2d* inVertices, uint32 inNumVertices, Renderer2d* render
glBufferData(GL_ARRAY_BUFFER, inNumVertices * sizeof(Vertex2d), &inVertices[0], loadType);
glEnableVertexAttribArray(renderer->attributes.position);
- glVertexAttribPointer(renderer->attributes.position, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex2d), (GLvoid *)0);
+ glVertexAttribPointer(renderer->attributes.position, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex2d), (GLvoid *)0);
glEnableVertexAttribArray(renderer->attributes.color);
glVertexAttribPointer(renderer->attributes.color, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex2d), (GLvoid *)offsetof(Vertex2d, color));
@@ -78,6 +80,7 @@ void Mesh2d::load(Vertex2d* inVertices, uint32 inNumVertices, GLuint* inIndices,
mode = MeshMode::Index;
numVertices = inNumVertices;
numIndices = inNumIndices;
+ isDynamic = loadType == GL_DYNAMIC_DRAW;
useShader(renderer->shader);
glGenVertexArrays(1, &vao);
@@ -88,7 +91,7 @@ void Mesh2d::load(Vertex2d* inVertices, uint32 inNumVertices, GLuint* inIndices,
glBufferData(GL_ARRAY_BUFFER, inNumVertices * sizeof(Vertex2d), &inVertices[0], loadType);
glEnableVertexAttribArray(renderer->attributes.position);
- glVertexAttribPointer(renderer->attributes.position, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex2d), (GLvoid *)0);
+ glVertexAttribPointer(renderer->attributes.position, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex2d), (GLvoid *)0);
glEnableVertexAttribArray(renderer->attributes.color);
glVertexAttribPointer(renderer->attributes.color, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex2d), (GLvoid *)offsetof(Vertex2d, color));
@@ -116,8 +119,7 @@ void Mesh2d::render(Renderer2d* renderer, GLenum drawType) {
}
glBindVertexArray(0);
-}
-
+}
void Mesh2d::unload() {
glDeleteVertexArrays(1, &vao);
@@ -128,3 +130,13 @@ void Mesh2d::unload() {
glDeleteBuffers(1, &ebo);
}
}
+
+void Mesh2d::updateVertices(Vertex2d* vertices) {
+ if (!isDynamic) {
+ printf("Cannot update vertices on a non-dynamic mesh.\n");
+ return;
+ }
+
+ glBindBuffer(GL_ARRAY_BUFFER, vbo);
+ glBufferSubData(GL_ARRAY_BUFFER, 0, numVertices * sizeof(Vertex2d), &vertices[0]);
+}
diff --git a/shared_cpp/Renderer2d.h b/shared_cpp/Renderer2d.h
index a942fa6..3ecb410 100644
--- a/shared_cpp/Renderer2d.h
+++ b/shared_cpp/Renderer2d.h
@@ -27,7 +27,7 @@ struct Renderer2d {
};
struct Vertex2d {
- Vector2 position;
+ Vector4 position;
Vector4 color;
};
@@ -44,9 +44,12 @@ struct Mesh2d {
uint32 numVertices = 0;
uint32 numIndices = 0;
Mat4x4 model;
+ bool isDynamic = false;
void load(Vertex2d* vertices, uint32 numVertices, Renderer2d* renderer, GLenum loadType = GL_STATIC_DRAW);
void load(Vertex2d* vertices, uint32 numVertices, GLuint* indices, uint32 numIndices, Renderer2d* renderer, GLenum loadType = GL_STATIC_DRAW);
void render(Renderer2d* renderer, GLenum drawType = GL_TRIANGLES);
void unload();
+
+ void updateVertices(Vertex2d* vertices);
};
diff --git a/shared_cpp/mathlib.cpp b/shared_cpp/mathlib.cpp
index 5996ba3..c9f2e0d 100644
--- a/shared_cpp/mathlib.cpp
+++ b/shared_cpp/mathlib.cpp
@@ -234,6 +234,20 @@ Vector4::Vector4(float inX, float inY, float inZ, float inW) {
w = inW;
}
+Vector4::Vector4(Vector2& v) {
+ x = v.x;
+ y = v.y;
+ z = 0;
+ w = 1;
+}
+
+Vector4::Vector4(Vector3& v) {
+ x = v.x;
+ y = v.y;
+ z = v.z;
+ w = 1;
+}
+
Vector4 Vector4::fromColor(float r, float g, float b, float a) {
float scale = 1.f / 255.f;
return { r * scale, g * scale, b * scale, a * scale };
@@ -302,6 +316,20 @@ Vector4 lerp(Vector4 start, Vector4 end, float t) {
return (end - start) * t + start;
}
+void Vector4::operator=(const Vector2& v2) {
+ x = v2.x;
+ y = v2.y;
+ z = 0;
+ w = 1;
+}
+
+void Vector4::operator=(const Vector3& v2) {
+ x = v2.x;
+ y = v2.y;
+ z = v2.z;
+ w = 1;
+}
+
Vector4 Vector4::operator+(const Vector4& v2) {
return add(v2);
}
diff --git a/shared_cpp/mathlib.h b/shared_cpp/mathlib.h
index fd21ae2..d8a15e7 100644
--- a/shared_cpp/mathlib.h
+++ b/shared_cpp/mathlib.h
@@ -96,6 +96,8 @@ struct Vector4 {
Vector4(float inX, float inY, float inZ, float inW);
Vector4 fromColor(float r, float g, float b, float a);
Vector4 toNormalizedColor();
+ Vector4(Vector2& v);
+ Vector4(Vector3& v);
float length();
Vector4 normalize();
@@ -106,6 +108,8 @@ struct Vector4 {
Vector4 negate();
Vector4 cross(const Vector4& other);
+ void operator=(const Vector2& v2);
+ void operator=(const Vector3& v2);
Vector4 operator+(const Vector4& v2);
Vector4 operator-(const Vector4& v2);
Vector4 operator-();