commit a7cf1d26328c53ea80a8d96b6c9b3e7909b178ff
parent 9b48857eac063a406f73886d2fc5a6a1fb41213b
Author: amin <dev@aminmesbah.com>
Date:   Sat,  2 Mar 2019 20:25:52 +0000
Render a tile
FossilOrigin-Name: b0aa41e9492efe00dd9fceb42a8b99a790c1361a06c34b492b53eca9369ae14a
Diffstat:
3 files changed, 76 insertions(+), 2 deletions(-)
diff --git a/src/game.c b/src/game.c
@@ -112,6 +112,49 @@ void game_init(struct GameState *game_state, uint32_t screen_width, uint32_t scr
         game_state->triangle_vbo_id = triangle_vbo_id;
     }
 
+    // set up and load tiles
+    {
+        GLfloat square_vertices[] = {
+             1.0f,  1.0f,
+             1.0f, -1.0f,
+            -1.0f, -1.0f,
+            -1.0f,  1.0f,
+        };
+
+        GLuint square_elements[] = { 0, 1, 3, 1, 2, 3 };
+
+        GLuint vao;
+        GLuint vbo;
+        GLuint ebo;
+        glGenVertexArrays(1, &vao);
+        glGenBuffers(1, &vbo);
+        glGenBuffers(1, &ebo);
+
+        glBindVertexArray(vao);
+
+        glBindBuffer(GL_ARRAY_BUFFER, vbo);
+        glBufferData(GL_ARRAY_BUFFER, sizeof(square_vertices), square_vertices, GL_STATIC_DRAW);
+        glVertexAttribPointer(
+            0,                   // Data location
+            2,                   // Number of values
+            GL_FLOAT,            // Data type
+            GL_FALSE,            // Normalize data
+            2 * sizeof(GLfloat), // Stride
+            (GLvoid*)0           // Position data offset (0)
+        );
+
+        glEnableVertexAttribArray(0);
+        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
+        glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(square_elements), square_elements, GL_STATIC_DRAW);
+
+        glBindVertexArray(0);
+
+        game_state->tiles.vao = vao;
+        game_state->tiles.vbo = vbo;
+        game_state->tiles.ebo = vbo;
+        game_state->tiles.count = 1;
+    }
+
     game_state->star_shader = shader_compile("shader/star_v.glsl", "shader/star_f.glsl");
     game_state->triangle_shader = shader_compile("shader/triangle_v.glsl", "shader/triangle_f.glsl");
 }
@@ -175,7 +218,29 @@ void game_update_and_render(struct GameState *game_state, float dt, uint32_t scr
         shader_setm4(&game_state->triangle_shader, "projection", &projection);
 
         glBindVertexArray(game_state->triangle_vao_id);
-        glDrawArrays(GL_TRIANGLES, 0, 3);
+        //glDrawArrays(GL_TRIANGLES, 0, 3);
+        glBindVertexArray(0);
+    }
+
+    // render tiles
+    {
+        m4 model = glmth_m4_init_id();
+        model = glmth_translate(model, glmth_v3_init(screen_width / 2.0f, screen_height / 2.0f, 0.0f));
+        model = glmth_translate(model, glmth_v3_init(100.0f * cosf(dt), 100.0f * sinf(dt), 0.0f));
+        model = glmth_rotate_z(model, -dt);
+        model = glmth_scale(model, glmth_v3_init(10.0f, 10.0f, 10.0f));
+        float scale_factor = fabs(1.0f * sinf(dt));
+        model = glmth_scale(model, glmth_v3_init(scale_factor, scale_factor, scale_factor));
+
+        shader_use(&game_state->star_shader);
+        shader_setm4(&game_state->star_shader, "model", &model);
+
+        m4 projection = glmth_m4_init_id();
+        projection = glmth_projection_ortho(0.0f, screen_width, screen_height, 0.0f, -1.0f, 1.0f);
+        shader_setm4(&game_state->star_shader, "projection", &projection);
+
+        glBindVertexArray(game_state->tiles.vao);
+        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
         glBindVertexArray(0);
     }
 }
diff --git a/src/game.h b/src/game.h
@@ -14,8 +14,17 @@ struct Stars
     v2 positions[NUM_STARS];
 };
 
+struct Tiles
+{
+    GLuint vao;
+    GLuint vbo;
+    GLuint ebo;
+    uint32_t count;
+};
+
 struct GameState
 {
+    struct Tiles tiles;
     GLuint star_vao_id;
     GLuint star_vbo_id;
     GLuint triangle_vao_id;
diff --git a/src/platform_linux.c b/src/platform_linux.c
@@ -42,7 +42,7 @@ int main(void)
     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
-    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
+    glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
 
     GLFWwindow* window = glfwCreateWindow(PLATFORM_SCR_WIDTH, PLATFORM_SCR_HEIGHT, "A Game", NULL, NULL);
     if (!window)