summaryrefslogtreecommitdiff
path: root/src/renderer/backends/backend_opengl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/backends/backend_opengl.c')
-rw-r--r--src/renderer/backends/backend_opengl.c62
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