summaryrefslogtreecommitdiff
path: root/src/rendering
diff options
context:
space:
mode:
Diffstat (limited to 'src/rendering')
-rw-r--r--src/rendering/include/engine/rendering/rendering.h13
-rw-r--r--src/rendering/src/gl.c2
-rw-r--r--src/rendering/src/rendering.c27
-rw-r--r--src/rendering/src/window.c2
4 files changed, 31 insertions, 13 deletions
diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h
index ed066d6..bc9e07a 100644
--- a/src/rendering/include/engine/rendering/rendering.h
+++ b/src/rendering/include/engine/rendering/rendering.h
@@ -60,6 +60,14 @@ typedef struct {
u32 mvp;
} RenderObject;
+typedef struct {
+ /* Position of the camera in world-space. */
+ vec3 pos;
+ /* Perspective matrix. Initialize with r_perspective_ortho or r_perspective. */
+ /* Alternatively, use `glm_perspective` or `glm_ortho`. */
+ mat4 per;
+} Camera;
+
/* Rendering functions */
void render_begin(Window* w);
void render_present(Window* w);
@@ -67,6 +75,11 @@ void drawcall_reset(void);
void render(Window* w);
/* Misc */
+void r_perspective(f32 ratio, f32 fov, Camera *c);
+void r_perspective_ortho(f32 ratio, f32 sz, Camera *c);
+
+void r_set_camera(Camera* c);
+
//void window_size_callback(GLFWwindow* window, i32 width, i32 height);
//void engine_window_resize_pointers(i32* w, i32* h);
//void engine_window_resize_pointers_reset(void);
diff --git a/src/rendering/src/gl.c b/src/rendering/src/gl.c
index ab41f01..5ca5e91 100644
--- a/src/rendering/src/gl.c
+++ b/src/rendering/src/gl.c
@@ -190,8 +190,6 @@ RenderObject RenderObject_new(float* model, Shader* shader, usize sz, float* uv,
//DEBUG("RenderObject got %d: %s\n", shader->program, ShaderType_str[shader->type]);
- // TODO: implement index buffer!
-
gl->GenVertexArrays(1, &(o.vao));
gl->BindVertexArray(o.vao);
diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c
index 77cd285..b74a146 100644
--- a/src/rendering/src/rendering.c
+++ b/src/rendering/src/rendering.c
@@ -32,6 +32,7 @@ void render_present(Window* w) {
/* This is GL specific, TODO: move the GL-specific code elsewhere. Maybe make
* this whole present GL specific? assign it as a fn ptr in the Window struct? */
GladGLContext *gl = w->context;
+ Camera c = *GLOBAL_PLATFORM->cam;
const f32 ratio = (float)w->windowsize[0] / (float)w->windowsize[1];
for (i32 i = 0; i < drawcall_len; i++) {
@@ -76,31 +77,25 @@ void render_present(Window* w) {
{
- vec3 cam = {-3., 2., -3.}; // perspective
- mat4 per; // perspective
mat4 v; // view
mat4 model = GLM_MAT4_IDENTITY_INIT;
mat4 modelviewprojection;
- const float sz = 10.f;
- //LOG("<%.1f, %.1f, %.1f>", pos[0], pos[1], pos[2]);
model[3][0] = pos[0];
model[3][1] = pos[1];
model[3][2] = pos[2];
- //glm_perspective(45.f , 600.f / 400.f, 0.1, 100.0f, per);
- glm_ortho(-sz * ratio, sz * ratio, -sz, sz, -sz, sz, per);
-
/* Lookat zero should be changed to whatever later */
- glm_lookat(cam, GLM_VEC3_ZERO, GLM_YUP, v);
+ glm_lookat(c.pos, GLM_VEC3_ZERO, GLM_YUP, v);
{ mat4 t;
//modelviewprojection = p * v * model
glm_mat4_mul(v, model, t);
+
// TODO: Remove this later
- glm_rotate_at(t, (vec3){0,0,0}, get_time() / 2.f, GLM_YUP); //, (vec3)({0,1,0}));
+ //glm_rotate_at(t, (vec3){0,0,0}, get_time() / 2.f, GLM_YUP); //, (vec3)({0,1,0}));
- glm_mat4_mul(per, t, modelviewprojection);
+ glm_mat4_mul(c.per, t, modelviewprojection);
}
// TODO: Do this only once during initialization
@@ -168,6 +163,18 @@ void render_present(Window* w) {
void drawcall_reset(void) { drawcall_len = 0; }
+void r_perspective(f32 ratio, f32 fov, Camera *c) {
+ glm_perspective(fov , ratio, 0.1, 100.0f, c->per);
+}
+
+void r_perspective_ortho(f32 ratio, f32 sz, Camera *c) {
+ glm_ortho(-sz * ratio, sz * ratio, -sz, sz, -sz, sz, c->per);
+}
+
+void r_set_camera(Camera* c) {
+ GLOBAL_PLATFORM->cam = c;
+}
+
void engine_window_resize_pointers(i32* w, i32* h) {
//GLOBAL_PLATFORM->window->game_w = w;
//GLOBAL_PLATFORM->window->game_h = h;
diff --git a/src/rendering/src/window.c b/src/rendering/src/window.c
index 9c04957..a1a5833 100644
--- a/src/rendering/src/window.c
+++ b/src/rendering/src/window.c
@@ -101,7 +101,7 @@ Window* init_window_glfw(
// Setup callbacks
// TODO: input handler callback
glfwSetFramebufferSizeCallback(window, window_size_callback);
-
+ glfwSetKeyCallback(window, (GLFWkeyfun)key_callback);
//glfwMakeContextCurrent(window);
//glfwSwapInterval(0);