From c29a911cd1a3f23f66478f205cace14487aadc56 Mon Sep 17 00:00:00 2001 From: Matthew Kosarek Date: Wed, 17 Mar 2021 23:10:55 -0400 Subject: Beginning to build out the orthographic renderer, and updated styles --- frontend/_wasm/wasm.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'frontend/_wasm/wasm.cpp') 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(-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; } -- cgit v1.2.1