summaryrefslogtreecommitdiff
path: root/frontend/_wasm/wasm.cpp
diff options
context:
space:
mode:
authorMatthew Kosarek <mattkae@protonmail.com>2021-03-17 23:10:55 -0400
committerMatthew Kosarek <mattkae@protonmail.com>2021-03-17 23:10:55 -0400
commitc29a911cd1a3f23f66478f205cace14487aadc56 (patch)
tree43308a2b186314c74e04441f5470a652cf607540 /frontend/_wasm/wasm.cpp
parent1a08dd2bd6839f0be4b12dc5317ab0b00ca23ae1 (diff)
Beginning to build out the orthographic renderer, and updated styles
Diffstat (limited to 'frontend/_wasm/wasm.cpp')
-rw-r--r--frontend/_wasm/wasm.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/frontend/_wasm/wasm.cpp b/frontend/_wasm/wasm.cpp
index 8673c80..254a5e2 100644
--- a/frontend/_wasm/wasm.cpp
+++ b/frontend/_wasm/wasm.cpp
@@ -29,6 +29,7 @@ const char* orthographicFragment =
" gl_FragColor = VertexColor; \n"
"}";
+
struct OrthographicProgramData {
GLuint shader;
@@ -52,6 +53,7 @@ struct OrthographicVertex {
struct TriangleObject {
OrthographicVertex vertices[3];
Vector2 velocity;
+ Vector2 position;
GLuint mVao;
GLuint mVbo;
Mat4x4 model;
@@ -66,10 +68,6 @@ struct TriangleObject {
glBindBuffer(GL_ARRAY_BUFFER, mVbo);
glBufferData(GL_ARRAY_BUFFER, 3 * sizeof(OrthographicVertex), &vertices[0], GL_STATIC_DRAW);
- for (int idx = 0; idx < 3; idx++) {
- printf("%f, %f\n", vertices[idx].position.x, vertices[idx].position.y);
- }
-
glEnableVertexAttribArray(programData->attributes.position);
glVertexAttribPointer(programData->attributes.position, 2, GL_FLOAT, GL_FALSE, sizeof(OrthographicVertex), (GLvoid *)0);
@@ -144,6 +142,7 @@ int main() {
Scene scene;
EM_BOOL runScene(int eventType, const EmscriptenMouseEvent* mouseEvent, void* userData) {
+ scene.programData = OrthographicProgramData();
printf("Compiling shaders...\n");
scene.programData.shader = loadShader(orthographicVertex, orthographicFragment);
printf("Shaders compiled.\n");
@@ -151,14 +150,17 @@ EM_BOOL runScene(int eventType, const EmscriptenMouseEvent* mouseEvent, void* us
printf("Initializing scene...\n");
useShader(scene.programData.shader);
+
scene.programData.attributes.position = getShaderAttribute(scene.programData.shader, "position");
scene.programData.attributes.color = getShaderAttribute(scene.programData.shader, "color");
scene.programData.uniformVariables.projection = getShaderUniform(scene.programData.shader, "projection");
scene.programData.uniformVariables.model = getShaderUniform(scene.programData.shader, "model");
- scene.triangleObject.vertices[0] = { Vector2 { 220, 365 }, Vector4 { 1.f, 0.f, 0.f, 1.f }};
- scene.triangleObject.vertices[1] = { Vector2 { 320, 480 }, Vector4 { 0.f, 1.f, 0.f, 1.f }};
- scene.triangleObject.vertices[2] = { Vector2 { 420, 365 }, Vector4 { 0.f, 0.f, 1.f, 1.f }};
+ scene.triangleObject = TriangleObject();
+ scene.triangleObject.vertices[0] = { Vector2 { -100, -50 }, Vector4 { 1.f, 0.f, 0.f, 1.f }};
+ scene.triangleObject.vertices[1] = { Vector2 { 0, 50 }, Vector4 { 0.f, 1.f, 0.f, 1.f }};
+ scene.triangleObject.vertices[2] = { Vector2 { 100, -50 }, Vector4 { 0.f, 0.f, 1.f, 1.f }};
+ scene.triangleObject.position = { 320.f, 480.f - 100.f };
scene.triangleObject.initialize(&scene.programData);
scene.projection = Mat4x4().getOrthographicMatrix(0, 640, 0, 480);
@@ -195,7 +197,8 @@ EM_BOOL update(double time, void* userData) {
// Update
scene->triangleObject.velocity = scene->triangleObject.velocity + Vector2 { 0, static_cast<float>(-9.8 * deltaTimeSeconds) };
- scene->triangleObject.model = scene->triangleObject.model.translateByVec2(scene->triangleObject.velocity * deltaTimeSeconds);
+ scene->triangleObject.position = scene->triangleObject.position + scene->triangleObject.velocity * deltaTimeSeconds;
+ scene->triangleObject.model = Mat4x4().translateByVec2(scene->triangleObject.position);
// Render
glEnable(GL_DEPTH_TEST);
@@ -213,5 +216,8 @@ EM_BOOL update(double time, void* userData) {
EM_BOOL terminateScene(int eventType, const EmscriptenMouseEvent* mouseEvent, void* userData) {
scene.isTerminated = true;
+ glDeleteVertexArrays(1, &scene.triangleObject.mVao);
+ glDeleteBuffers(1, &scene.triangleObject.mVbo);
+ glDeleteProgram(scene.programData.shader);
return true;
}