#include #include #include "common.h" int main(void) { state_t state = init_state(1600, 800, 1); init_glfw(&state); init_gl(); F32 vertices[] = { -0.5f, -0.5f, 0.0f, 0.5f, 0.5f, -0.5f }; U32 indices[] = { 0, 1, 2 }; U32 vao = 0, vbo = 0, ebo = 0; glGenVertexArrays(1, &vao); glGenBuffers(1, &ebo); glGenBuffers(1, &vbo); glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(F32), 0); glBindVertexArray(0); add_shader("shader.vert", "shader.frag", 0); U32 shader = find_shader("shader"); glUseProgram(shader); glClearColor(0.16f, 0.16f, 0.16f, 1.0f); glBindVertexArray(vao); V2F offset = v2f(0.0f, 0.0f); F32 time = 0.0f; while (!glfwWindowShouldClose(state.window)) { handle_glfw_events(state.window, &state.input); F32 dt = lock_framerate(60); /* update */ offset.x += 0.5f * dt; /* render */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUniform2fv(glGetUniformLocation(shader, "offset"), 1, (F32 *)&offset); glUniform1f(glGetUniformLocation(shader, "time"), time); glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0); glfwSwapBuffers(state.window); time += dt; } return 0; }