summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gl.c66
-rw-r--r--src/include/daw/rendering.h3
2 files changed, 40 insertions, 29 deletions
diff --git a/src/gl.c b/src/gl.c
index 5178ef9..e84b33d 100644
--- a/src/gl.c
+++ b/src/gl.c
@@ -22,22 +22,13 @@ const char* ShaderType_str[] = {
[Shader_Compute] = "Shader_Compute",
};
-Shader compile_shader(const char* file_path, const ShaderType shader_type) {
- u32 shaderID = 0;
- GLenum shadertype = GL_INVALID_ENUM;
+Shader compile_shader(const char* source, const ShaderType shader_type) {
+ const GladGLContext* gl = GLOBAL_PLATFORM->window->context;
i32 Result = GL_FALSE;
i32 infolog_len;
- char* source = NULL;
- FILE* file = NULL;
-
- const GladGLContext* gl = GLOBAL_PLATFORM->window->context;
-
- if (file_path == NULL) {
- WARN("Empty path to shader");
- return (Shader){.program = 0, .type = Shader_Error};
- }
+ GLenum shadertype = GL_INVALID_ENUM;
switch (shader_type) {
case Shader_Vertex:
@@ -46,14 +37,44 @@ Shader compile_shader(const char* file_path, const ShaderType shader_type) {
case Shader_Fragment:
shadertype = GL_FRAGMENT_SHADER;
break;
- default: break;
+ default:
+ UNIMPLEMENTED;
+ break;
}
- file = fopen(file_path, "r");
-
- shaderID = gl->CreateShader(shadertype);
+ u32 shaderID = gl->CreateShader(shadertype);
LOG("CREATED SHADER ID %d", shaderID);
+ char const* src_ptr = source;
+ gl->ShaderSource(shaderID, 1, &src_ptr , NULL);
+ gl->CompileShader(shaderID);
+
+ // Check shader
+ gl->GetShaderiv(shaderID, GL_COMPILE_STATUS, &Result);
+ gl->GetShaderiv(shaderID, GL_INFO_LOG_LENGTH, &infolog_len);
+ if (infolog_len > 0) {
+ char* msg = calloc((usize)infolog_len + 1, sizeof(char));
+ gl->GetShaderInfoLog(shaderID, infolog_len, NULL, msg);
+ ERROR("Failed to compile shader: " TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET, msg);
+ free(msg);
+ }
+
+ return (Shader){.program = shaderID, .type = shader_type};
+}
+
+Shader compile_shader_f(const char* file_path, const ShaderType shader_type) {
+ u32 shaderID = 0;
+
+ char* source = NULL;
+ FILE* file = NULL;
+
+ if (file_path == NULL) {
+ WARN("Empty path to shader");
+ return (Shader){.program = 0, .type = Shader_Error};
+ }
+
+ file = fopen(file_path, "r");
+
if(file != NULL) {
const usize size = f_get_sz(file);
@@ -70,19 +91,8 @@ Shader compile_shader(const char* file_path, const ShaderType shader_type) {
// Compile shader
INFO("Compiling shader \"" TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET"\".", file_path);
- char const* src_ptr = source;
- gl->ShaderSource(shaderID, 1, &src_ptr , NULL);
- gl->CompileShader(shaderID);
- // Check shader
- gl->GetShaderiv(shaderID, GL_COMPILE_STATUS, &Result);
- gl->GetShaderiv(shaderID, GL_INFO_LOG_LENGTH, &infolog_len);
- if ( infolog_len > 0 ) {
- char* msg = calloc((usize)infolog_len + 1, sizeof(char));
- gl->GetShaderInfoLog(shaderID, infolog_len, NULL, msg);
- ERROR("Failed to compile shader: " TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET, msg);
- free(msg);
- }
+ compile_shader(source, shader_type);
free(source);
diff --git a/src/include/daw/rendering.h b/src/include/daw/rendering.h
index 17d3728..590bcb6 100644
--- a/src/include/daw/rendering.h
+++ b/src/include/daw/rendering.h
@@ -315,7 +315,8 @@ i32 renderbatch_add(RenderBatch* renderbatch, RenderObject* obj, Transform* t);
void renderbatch_transform(RenderBatch* renderbatch, usize obj_idx, Transform* t);
int renderbatch_refresh(RenderBatch* renderbatch);
-Shader compile_shader(const char* file_path, const ShaderType shader_type);
+Shader compile_shader(const char* source, const ShaderType shader_type);
+Shader compile_shader_f(const char* file_path, const ShaderType shader_type);
Shader compose_shader(Shader *shaders, usize shaders_len);
void shaders_delete(Shader* shader, usize shader_len);