1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#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;
}
|