diff options
Diffstat (limited to 'src/renderer/backends/backend_opengl.c')
-rw-r--r-- | src/renderer/backends/backend_opengl.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/renderer/backends/backend_opengl.c b/src/renderer/backends/backend_opengl.c new file mode 100644 index 0000000..ed2c70f --- /dev/null +++ b/src/renderer/backends/backend_opengl.c @@ -0,0 +1,62 @@ +#include <stdlib.h> +#define CEL_PLATFORM_LINUX + +#include "defines.h" +#include "log.h" +#include "maths_types.h" +#include "render_types.h" + +#if CEL_REND_BACKEND_OPENGL + +#include <glad/glad.h> + +#include <GLFW/glfw3.h> + +/** @brief Internal backend state */ +typedef struct opengl_state { +} opengl_state; + +bool gfx_backend_init(renderer *ren) { + INFO("loading OpenGL backend"); + + // glfwInit(); // Already handled in `renderer_init` + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); + + // glad: load all OpenGL function pointers + if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { + ERROR("Failed to initialise GLAD \n"); + + return false; + } + + glEnable(GL_DEPTH_TEST); + + opengl_state *internal = malloc(sizeof(opengl_state)); + ren->backend_state = (void *)internal; + + return true; +} +void gfx_backend_shutdown(renderer *ren) {} + +void uniform_vec3f(u32 program_id, const char *uniform_name, vec3 *value) { + glUniform3fv(glGetUniformLocation(program_id, uniform_name), 1, &value->x); +} +void uniform_f32(u32 program_id, const char *uniform_name, f32 value) { + glUniform1f(glGetUniformLocation(program_id, uniform_name), value); +} +void uniform_i32(u32 program_id, const char *uniform_name, i32 value) { + glUniform1i(glGetUniformLocation(program_id, uniform_name), value); +} +void uniform_mat4f(u32 program_id, const char *uniform_name, mat4 *value) { + glUniformMatrix4fv(glGetUniformLocation(program_id, uniform_name), 1, GL_FALSE, value->data); +} + +void clear_screen(vec3 colour) { + glClearColor(colour.x, colour.y, colour.z, 1.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +#endif
\ No newline at end of file |