diff options
-rw-r--r-- | faqe.c | 4 | ||||
-rw-r--r-- | glfunc.h | 1 | ||||
-rw-r--r-- | glprog.c | 6 | ||||
-rw-r--r-- | glprog.h | 4 | ||||
-rw-r--r-- | model.c | 12 | ||||
-rw-r--r-- | vertex.h | 5 |
6 files changed, 20 insertions, 12 deletions
@@ -81,10 +81,10 @@ int main(int argc, char **argv) gl_load((gl_loadfunc *)SDL_GL_GetProcAddress); - loadmodel(&mdl, "assets/utah.fmd"); - glprog_init(); + loadmodel(&mdl, "assets/utah.fmd"); + gl_prog_use(prog.main.prog); viewport(prog.main.uni.proj, WIDTH, HEIGHT); gl_uni_set1i(prog.main.tex.tdiff, 0); @@ -52,3 +52,4 @@ GL_FUNC(glBindTexture, void, gl_tex_bind, GLenum target, GLuint texture) GL_FUNC(glTexImage2D, void, gl_tex_img2d, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *data) GL_FUNC(glTexParameteri, void, gl_tex_parami, GLenum target, GLenum pname, GLint param) GL_FUNC(glGenerateMipmap, void, gl_tex_genmip, GLenum target) +GL_FUNC(glBindAttribLocation, void, gl_attr_bindloc, GLuint program, GLuint index, const char *name) @@ -107,7 +107,7 @@ static void detach_shaders(GLuint prog) static void load_shader(struct shader *s, const char *path) { GLuint prog; - GLint success; + GLint success, pos = 0; char log[LOGSIZE], *full, *src = NULL; size_t srclen = 0, fullsz; @@ -133,6 +133,8 @@ static void load_shader(struct shader *s, const char *path) } free(src); free(full); +#define SH_IN(_, name) gl_attr_bindloc(prog, pos++, #name); +#include "shaders/data.h" gl_prog_link(prog); gl_prog_param(prog, GL_LINK_STATUS, &success); if (!success) { @@ -150,6 +152,8 @@ static void load_shader(struct shader *s, const char *path) void glprog_init(void) { + GLint pos = 0; #define SH_PROG(name) load_shader(&prog.name, "shaders/" #name); +#define SH_IN(_, name) prog.attr.name = pos++; #include "shaders/data.h" } @@ -22,6 +22,10 @@ struct shader { struct glprog_progs { #define SH_PROG(name) struct shader name; #include "shaders/data.h" + struct { +#define SH_IN(_0, name) GLint name; +#include "shaders/data.h" + } attr; }; extern struct glprog_progs prog; @@ -5,6 +5,7 @@ #include <assert.h> #include "eprintf.h" +#include "glprog.h" #include "linmath.h" #include "model.h" #include "nelem.h" @@ -30,12 +31,11 @@ void model_load(struct model *mdl, const struct fmd *fmd) gl_buf_data(GL_ELEMENT_ARRAY_BUFFER, fmd->ntris * sizeof *fmd->tris, fmd->tris, GL_STATIC_DRAW); v = &fmd->verts[0]; - gl_va_define(0, NELEM(v->pos), GL_FLOAT, GL_FALSE, sizeof *v, (void *)offsetof(struct vertex, pos)); - gl_va_enable(0); - gl_va_define(1, NELEM(v->norm), GL_FLOAT, GL_FALSE, sizeof *v, (void *)offsetof(struct vertex, norm)); - gl_va_enable(1); - gl_va_define(2, NELEM(v->uv), GL_FLOAT, GL_FALSE, sizeof *v, (void *)offsetof(struct vertex, uv)); - gl_va_enable(2); + +#define SH_IN(_0, name) \ + gl_va_define(prog.attr.name, NELEM(v->name), GL_FLOAT, GL_FALSE, sizeof *v, (void *)offsetof(struct vertex, name)); \ + gl_va_enable(prog.attr.name); +#include "shaders/data.h" // TODO: materials, use a shared material set @@ -8,9 +8,8 @@ #include "linmath.h" struct vertex { - vec3 pos; - vec3 norm; - vec2 uv; +#define SH_IN(type, name) type name; +#include "shaders/data.h" }; #endif // VERTEX_H |