summaryrefslogtreecommitdiff
path: root/prge_shader.c
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-03-27 08:27:46 +0500
committerpryazha <pryadeiniv@mail.ru>2025-03-27 08:27:46 +0500
commit92a8eb610f40c9770569ca63ca1bd705a6d3497d (patch)
tree7cb8edbf29e51aea24bc55be066b55033fe8fa1d /prge_shader.c
parentb1389bad67cccd3da6815c2d5a436c177f09594b (diff)
audio, renaming
Diffstat (limited to 'prge_shader.c')
-rw-r--r--prge_shader.c97
1 files changed, 45 insertions, 52 deletions
diff --git a/prge_shader.c b/prge_shader.c
index 96b50f1..3aee9b5 100644
--- a/prge_shader.c
+++ b/prge_shader.c
@@ -1,21 +1,18 @@
-U32 compile_shader(GLenum type, Str8 filename)
+U32 compile_glsl_shader(U32 type, const char *fname)
{
- Arena *tmp;
- Str8 src;
+ Arena *tmpa;
+ FLS src;
+ const char *csrc;
U32 id;
S32 status;
- const char *csrc;
-
- tmp = arena_alloc(0);
- src = str8_read_entire_file(tmp, filename);
- if (!src.ptr || !src.length) {
- str8print(str8pushf(tmp, "[ERROR] : Failed to read \"%.*s\"\n", str8expand(filename)));
- arena_release(tmp);
+ tmpa = alloc_arena(0);
+ src = sys_read_entire_file_fls(tmpa, fname);
+ if (!src.p) {
+ sys_printf("[ERROR] : Failed to read \"%s\"\n", fname);
return 0;
}
-
- csrc = str8tocstr(tmp, src);
+ csrc = (const char *)src.p;
id = glCreateShader(type);
glShaderSource(id, 1, &csrc, 0);
@@ -25,76 +22,72 @@ U32 compile_shader(GLenum type, Str8 filename)
if (status == GL_FALSE) {
char log[512];
glGetShaderInfoLog(id, 512, 0, log);
- str8print(str8pushf(tmp, "[ERROR] : Failed to compile : \"%.*s\"\n%s", str8expand(filename), log));
+ sys_printf("[ERROR] : Failed to compile : \"%s\"\n%s", fname, log);
} else {
- str8print(str8pushf(tmp, "[INFO] : \"%.*s\" compiled successfully.\n", str8expand(filename)));
+ sys_printf("[INFO] : \"%s\" compiled successfully.\n", fname);
}
- arena_release(tmp);
+ release_arena(tmpa);
return id;
}
-U32 load_shader(char *vert_filename, char *geom_filename, char *frag_filename)
+Shader load_shader(const char *vfname, const char *gfname, const char *ffname)
{
- U32 vert, geom, frag, id;
- Arena *tmp;
+ Shader shader;
+ U32 vert, geom, frag;
S32 success;
- if (vert_filename)
- vert = compile_shader(GL_VERTEX_SHADER, str8fromcstr(vert_filename));
- if (geom_filename)
- geom = compile_shader(GL_GEOMETRY_SHADER, str8fromcstr(geom_filename));
- if (frag_filename)
- frag = compile_shader(GL_FRAGMENT_SHADER, str8fromcstr(frag_filename));
+ shader.id = glCreateProgram();
- tmp = arena_alloc(0);
+ if (vfname) {
+ vert = compile_glsl_shader(GL_VERTEX_SHADER, vfname);
+ glAttachShader(shader.id, vert);
+ }
+ if (gfname) {
+ geom = compile_glsl_shader(GL_GEOMETRY_SHADER, gfname);
+ glAttachShader(shader.id, geom);
+ }
+ if (ffname) {
+ frag = compile_glsl_shader(GL_FRAGMENT_SHADER, ffname);
+ glAttachShader(shader.id, frag);
+ }
+
+ glLinkProgram(shader.id);
+ glGetProgramiv(shader.id, GL_LINK_STATUS, &success);
- id = glCreateProgram();
- if (vert_filename)
- glAttachShader(id, vert);
- if (geom_filename)
- glAttachShader(id, geom);
- if (frag_filename)
- glAttachShader(id, frag);
- glLinkProgram(id);
- glGetProgramiv(id, GL_LINK_STATUS, &success);
if (success == GL_FALSE) {
char log[512];
- glGetProgramInfoLog(id, 512, 0, log);
- str8print(str8pushf(tmp, "[ERROR] : Failed to link shader program:\n%s", log));
+ glGetProgramInfoLog(shader.id, 512, 0, log);
+ sys_printf("[ERROR] : Failed to link shader program:\n%s", log);
} else {
- str8print(str8pushf(tmp, "[INFO] : Shader linked successfuly.\n\n"));
+ sys_printf("[INFO] : Shader linked successfuly.\n\n");
}
- if (vert_filename)
+
+ if (vfname)
glDeleteShader(vert);
- if (geom_filename)
+ if (gfname)
glDeleteShader(geom);
- if (frag_filename)
+ if (ffname)
glDeleteShader(frag);
- arena_release(tmp);
-
- return id;
+ return shader;
}
-void shader_set_3fv(U32 id, char *name, V3 v)
+void set3fv(U32 id, const char *name, V3 v)
{
- S32 loc;
- loc = glGetUniformLocation(id, name);
+ S32 loc = glGetUniformLocation(id, name);
glUniform3fv(loc, 1, (F32 *)&v);
}
-void shader_set_4fv(U32 id, char *name, V4 v)
+void set4fv(U32 id, const char *name, V4 v)
{
- S32 loc;
- loc = glGetUniformLocation(id, name);
+ S32 loc = glGetUniformLocation(id, name);
glUniform4fv(loc, 1, (F32 *)&v);
}
-void shader_set_mat4fv(U32 id, char *name, MAT4 m)
+void setmat4fv(U32 id, const char *name, MAT4 m)
{
- S32 loc;
- loc = glGetUniformLocation(id, name);
+ S32 loc = glGetUniformLocation(id, name);
glUniformMatrix4fv(loc, 1, 0, (F32 *)&m);
}