diff options
Diffstat (limited to 'src/rendering')
| -rw-r--r-- | src/rendering/include/engine/rendering/rendering.h | 13 | ||||
| -rw-r--r-- | src/rendering/src/gl.c | 2 | ||||
| -rw-r--r-- | src/rendering/src/rendering.c | 27 | ||||
| -rw-r--r-- | src/rendering/src/window.c | 2 |
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); |
