From d3f47e042aebd5fbf86477abf7058704657e8430 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Sat, 27 Oct 2018 12:41:58 +0100 Subject: Cleanup pass --- camera.c | 5 +++++ faqe.c | 2 +- fmd.c | 5 +++++ gl.c | 3 +++ glfunc.h | 70 +++++++++++++++++++++++++++++----------------------------- glprog.c | 10 +++++++-- glprog.h | 2 +- ieee754.c | 2 +- model.c | 2 +- mtl.c | 7 ++++-- nelem.h | 1 + test_ieee754.c | 2 ++ tex.c | 2 ++ 13 files changed, 70 insertions(+), 43 deletions(-) diff --git a/camera.c b/camera.c index 6335d0e..0e90e61 100644 --- a/camera.c +++ b/camera.c @@ -11,6 +11,7 @@ #define PITCH_LIMIT (PI * 0.99) +// camera_clamp: clamp camera pitch and normalize yaw void camera_clamp(struct camera *cam) { assert(cam != NULL); @@ -21,6 +22,8 @@ void camera_clamp(struct camera *cam) else if (cam->pitch < -PITCH_LIMIT / 2) cam->pitch = -PITCH_LIMIT / 2; } + +// camera_dir: get the camera facing vector void camera_dir(vec3 out, struct camera *cam) { assert(out != NULL); @@ -30,6 +33,8 @@ void camera_dir(vec3 out, struct camera *cam) out[1] = sinf(cam->pitch); out[2] = cosf(cam->pitch) * sinf(cam->yaw); } + +// camera_lookat: get the camera view matrix void camera_lookat(mat4x4 out, struct camera *cam) { vec3 at, dir; diff --git a/faqe.c b/faqe.c index 1973459..e4d4138 100644 --- a/faqe.c +++ b/faqe.c @@ -79,7 +79,7 @@ int main(int argc, char **argv) if (glc == NULL) eprintf("Failed to create OpenGL context: %s", SDL_GetError()); - gl_load((gl_loadfunc *)SDL_GL_GetProcAddress); + gl_load(SDL_GL_GetProcAddress); glprog_init(); diff --git a/fmd.c b/fmd.c index d4aa647..ce08570 100644 --- a/fmd.c +++ b/fmd.c @@ -13,12 +13,14 @@ static const char *MAGIC = "FMD002\r\n"; +// checkmagic: check the fmd magic number static void checkmagic(FILE *f) { for (size_t i = 0; i < strlen(MAGIC); i++) assert(fgetc(f) == MAGIC[i]); } +// betoul: read big endian 32 bit unsigned integer static inline unsigned long betoul(FILE *src) { unsigned long ret = 0; @@ -34,6 +36,7 @@ static inline unsigned long betoul(FILE *src) return ret; } +// readfloats: read ieee754 32 bit floating point numbers void readfloats(float *dest, int count, FILE *src) { assert(dest != NULL); @@ -43,6 +46,7 @@ void readfloats(float *dest, int count, FILE *src) dest[i] = ieee754f(betoul(src)); } +// fmd_load: read a FMD file void fmd_load(struct fmd *fmd, FILE *f) { assert(fmd != NULL); @@ -102,6 +106,7 @@ void fmd_load(struct fmd *fmd, FILE *f) } } +// fmd_free: free a previously loaded FMD file void fmd_free(struct fmd *fmd) { assert(fmd); diff --git a/gl.c b/gl.c index cee215d..99f537e 100644 --- a/gl.c +++ b/gl.c @@ -9,6 +9,7 @@ #include "glfunc.h" #undef GL_FUNC +// load_func: load OpenGL function static void *load_func(const char *name, gl_loadfunc *load) { void *ret; @@ -20,6 +21,7 @@ static void *load_func(const char *name, gl_loadfunc *load) return ret; } +// gl_load: load required OpenGL functions void gl_load(gl_loadfunc *load) { #define GL_FUNC(glname, rtype, name, ...) \ @@ -28,6 +30,7 @@ void gl_load(gl_loadfunc *load) #undef GL_FUNC } +// gl_strerror: format OpenGL error code into a string const char *gl_strerror(GLenum error) { switch (error) { diff --git a/glfunc.h b/glfunc.h index cec32b3..8fa0c58 100644 --- a/glfunc.h +++ b/glfunc.h @@ -2,54 +2,54 @@ * Copyright (C) 2018 Tomasz Kramkowski * SPDX-License-Identifier: MIT */ -GL_FUNC(glGetError, GLenum, gl_error, void) -GL_FUNC(glViewport, void, gl_viewport, GLint x, GLint y, GLsizei width, GLsizei height) -GL_FUNC(glClearColor, void, gl_clearcolor, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -GL_FUNC(glClear, void, gl_clear, GLbitfield mask) -GL_FUNC(glGenBuffers, void, gl_buf_gen, GLsizei n, GLuint *buffers) +GL_FUNC(glBindAttribLocation, void, gl_attr_bindloc, GLuint program, GLuint index, const char *name) GL_FUNC(glBindBuffer, void, gl_buf_bind, GLenum target, GLuint buffer) GL_FUNC(glBufferData, void, gl_buf_data, GLenum target, GLsizeiptr size, const void *data, GLenum usage) -GL_FUNC(glCreateShader, GLuint, gl_shdr_create, GLenum type) -GL_FUNC(glDeleteShader, void, gl_shdr_del, GLuint shader) -GL_FUNC(glShaderSource, void, gl_shdr_source, GLuint shader, GLsizei count, const char * const *string, const GLint *length) -GL_FUNC(glCompileShader, void, gl_shdr_compile, GLuint shader) -GL_FUNC(glGetShaderiv, void, gl_shdr_param, GLuint shader, GLenum pname, GLint *params) -GL_FUNC(glGetShaderInfoLog, void, gl_shdr_infolog, GLuint shader, GLsizei size, GLsizei *len, char *data) +GL_FUNC(glGenBuffers, void, gl_buf_gen, GLsizei n, GLuint *buffers) +GL_FUNC(glClear, void, gl_clear, GLbitfield mask) +GL_FUNC(glClearColor, void, gl_clearcolor, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) +GL_FUNC(glDisable, void, gl_disable, GLenum cap) +GL_FUNC(glDrawArrays, void, gl_draw_arrays, GLenum mode, GLint first, GLsizei count) +GL_FUNC(glDrawElements, void, gl_draw_elems, GLenum mode, GLsizei count, GLenum type, const void *indices) +GL_FUNC(glEnable, void, gl_enable, GLenum cap) +GL_FUNC(glGetError, GLenum, gl_error, void) +GL_FUNC(glGetIntegerv, void, gl_geti, GLenum pname, GLint *data) +GL_FUNC(glPolygonMode, void, gl_poly_mode, GLenum face, GLenum mode) +GL_FUNC(glAttachShader, void, gl_prog_attachshdr, GLuint program, GLuint shader) GL_FUNC(glCreateProgram, GLuint, gl_prog_create, void) GL_FUNC(glDeleteProgram, void, gl_prog_del, GLuint program) -GL_FUNC(glAttachShader, void, gl_prog_attachshdr, GLuint program, GLuint shader) GL_FUNC(glDetachShader, void, gl_prog_detachshdr, GLuint program, GLuint shader) GL_FUNC(glGetAttachedShaders, void, gl_prog_getshdrs, GLuint program, GLsizei max, GLsizei *count, GLuint *shaders) +GL_FUNC(glGetProgramInfoLog, void, gl_prog_infolog, GLuint prog, GLsizei size, GLsizei *len, char *data) GL_FUNC(glLinkProgram, void, gl_prog_link, GLuint program) -GL_FUNC(glUseProgram, void, gl_prog_use, GLuint program) GL_FUNC(glGetProgramiv, void, gl_prog_param, GLuint prog, GLenum pname, GLint *params) -GL_FUNC(glGetProgramInfoLog, void, gl_prog_infolog, GLuint prog, GLsizei size, GLsizei *len, char *data) -GL_FUNC(glVertexAttribPointer, void, gl_va_define, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *data) -GL_FUNC(glEnableVertexAttribArray, void, gl_va_enable, GLuint index) -GL_FUNC(glDisableVertexAttribArray, void, gl_va_disable, GLuint index) -GL_FUNC(glGenVertexArrays, void, gl_va_gen, GLsizei n, GLuint *arrays) -GL_FUNC(glBindVertexArray, void, gl_va_bind, GLuint va) -GL_FUNC(glDrawArrays, void, gl_draw_arrays, GLenum mode, GLint first, GLsizei count) -GL_FUNC(glDrawElements, void, gl_draw_elems, GLenum mode, GLsizei count, GLenum type, const void *indices) -GL_FUNC(glPolygonMode, void, gl_poly_mode, GLenum face, GLenum mode) -GL_FUNC(glGetUniformLocation, GLint, gl_uni_loc, GLuint program, const char *name) +GL_FUNC(glUseProgram, void, gl_prog_use, GLuint program) +GL_FUNC(glCompileShader, void, gl_shdr_compile, GLuint shader) +GL_FUNC(glCreateShader, GLuint, gl_shdr_create, GLenum type) +GL_FUNC(glDeleteShader, void, gl_shdr_del, GLuint shader) +GL_FUNC(glGetShaderInfoLog, void, gl_shdr_infolog, GLuint shader, GLsizei size, GLsizei *len, char *data) +GL_FUNC(glGetShaderiv, void, gl_shdr_param, GLuint shader, GLenum pname, GLint *params) +GL_FUNC(glShaderSource, void, gl_shdr_source, GLuint shader, GLsizei count, const char * const *string, const GLint *length) +GL_FUNC(glActiveTexture, void, gl_tex_active, GLenum texture) +GL_FUNC(glBindTexture, void, gl_tex_bind, GLenum target, GLuint texture) +GL_FUNC(glGenTextures, void, gl_tex_gen, GLsizei n, GLuint *textures) +GL_FUNC(glGenerateMipmap, void, gl_tex_genmip, GLenum target) +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(glGetUniformfv, void, gl_uni_getf, GLuint program, GLint location, GLfloat *params) GL_FUNC(glGetUniformiv, void, gl_uni_geti, GLuint program, GLint location, GLint *params) -GL_FUNC(glUniform1i, void, gl_uni_set1i, GLint location, GLint v0) +GL_FUNC(glGetUniformLocation, GLint, gl_uni_loc, GLuint program, const char *name) GL_FUNC(glUniform1f, void, gl_uni_set1f, GLint location, GLfloat v0) +GL_FUNC(glUniform1i, void, gl_uni_set1i, GLint location, GLint v0) GL_FUNC(glUniform3f, void, gl_uni_set3f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -GL_FUNC(glUniform4f, void, gl_uni_set4f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) GL_FUNC(glUniform3fv, void, gl_uni_set3fv, GLint location, GLsizei count, const GLfloat *value) +GL_FUNC(glUniform4f, void, gl_uni_set4f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) GL_FUNC(glUniform4fv, void, gl_uni_set4fv, GLint location, GLsizei count, const GLfloat *value) GL_FUNC(glUniformMatrix3fv, void, gl_uni_setm3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) GL_FUNC(glUniformMatrix4fv, void, gl_uni_setm4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) -GL_FUNC(glGetIntegerv, void, gl_geti, GLenum pname, GLint *data) -GL_FUNC(glEnable, void, gl_enable, GLenum cap) -GL_FUNC(glDisable, void, gl_disable, GLenum cap) -GL_FUNC(glGenTextures, void, gl_tex_gen, GLsizei n, GLuint *textures) -GL_FUNC(glActiveTexture, void, gl_tex_active, GLenum texture) -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) +GL_FUNC(glBindVertexArray, void, gl_va_bind, GLuint va) +GL_FUNC(glVertexAttribPointer, void, gl_va_define, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *data) +GL_FUNC(glDisableVertexAttribArray, void, gl_va_disable, GLuint index) +GL_FUNC(glEnableVertexAttribArray, void, gl_va_enable, GLuint index) +GL_FUNC(glGenVertexArrays, void, gl_va_gen, GLsizei n, GLuint *arrays) +GL_FUNC(glViewport, void, gl_viewport, GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/glprog.c b/glprog.c index 93dc22c..edb819e 100644 --- a/glprog.c +++ b/glprog.c @@ -39,6 +39,7 @@ static const struct { }, }; +// readfile: read a whole file into a buffer static bool readfile(char **data, size_t *size, const char *name) { FILE *f; @@ -63,17 +64,19 @@ static bool readfile(char **data, size_t *size, const char *name) *data = erealloc(*data, *size); } + fclose(f); + *size = len; *data = erealloc(*data, *size); return true; } +// compile: compile shader component static GLuint compile(const char *src, size_t len, const char *pre, GLuint type) { GLuint id; GLint success; - char log[LOGSIZE]; static const char *common_pre = #define SH_VER(v) "#version " v "\n" #define SH_UNI(type, name) "uniform " #type " " #name ";\n" @@ -88,6 +91,7 @@ static GLuint compile(const char *src, size_t len, const char *pre, GLuint type) gl_shdr_param(id, GL_COMPILE_STATUS, &success); if (!success) { + char log[LOGSIZE]; gl_shdr_infolog(id, sizeof log, NULL, log); eprintf("Failed to compile shader:\n%s", log); } @@ -108,7 +112,7 @@ static void load_shader(struct shader *s, const char *path) { GLuint prog; GLint success, pos = 0; - char log[LOGSIZE], *full, *src = NULL; + char *full, *src = NULL; size_t srclen = 0, fullsz; GLint texture = 0; @@ -139,6 +143,7 @@ static void load_shader(struct shader *s, const char *path) gl_prog_link(prog); gl_prog_param(prog, GL_LINK_STATUS, &success); if (!success) { + char log[LOGSIZE]; gl_prog_infolog(prog, sizeof log, NULL, log); eprintf("Failed to link program\n%s", log); } @@ -153,6 +158,7 @@ static void load_shader(struct shader *s, const char *path) s->prog = prog; } +// glprog_init: compile and link all shader programs void glprog_init(void) { GLint pos = 0; diff --git a/glprog.h b/glprog.h index 8d8f860..7e5fd4a 100644 --- a/glprog.h +++ b/glprog.h @@ -19,7 +19,7 @@ struct glprog_progs { #define SH_PROG(name) struct shader name; #include "shaders/data.h" struct { -#define SH_IN(_0, name) GLint name; +#define SH_IN(_, name) GLint name; #include "shaders/data.h" } attr; }; diff --git a/ieee754.c b/ieee754.c index aa1fb74..789ff29 100644 --- a/ieee754.c +++ b/ieee754.c @@ -28,7 +28,7 @@ float ieee754f(unsigned long b) } } else if (exp == 0) { if (n == 0) - return isneg ? -0 : 0; + return isneg ? -0.0 : 0.0; exp = -126; } else { n += 0x1p23f; diff --git a/model.c b/model.c index 1f07201..63f3f33 100644 --- a/model.c +++ b/model.c @@ -32,7 +32,7 @@ void model_load(struct model *mdl, const struct fmd *fmd) v = &fmd->verts[0]; -#define SH_IN(_0, name) \ +#define SH_IN(_, 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" diff --git a/mtl.c b/mtl.c index 22fc757..7e55af1 100644 --- a/mtl.c +++ b/mtl.c @@ -22,6 +22,7 @@ static struct mtl *mtls; static int lmtls; static size_t nmtls; +// tex_file: Load texture asset from file GLuint tex_file(const char *name, const char *type) { char loc[100]; @@ -38,6 +39,7 @@ GLuint tex_file(const char *name, const char *type) return ret; } +// mtl_load: Load a set of textures as a material int mtl_load(char *name) { struct mtl *m; @@ -57,6 +59,7 @@ int mtl_load(char *name) return lmtls++; } +// mtl_use: Set OpenGL state to use a certain material index void mtl_use(int mtl) { assert(mtl < lmtls); @@ -66,8 +69,8 @@ void mtl_use(int mtl) if (mtl < 0) return; -#define SH_TEX(type, name) \ - gl_tex_active(texture++); \ +#define SH_TEX(type, name) \ + gl_tex_active(texture++); \ gl_tex_bind(GL_TEXTURE_##type, mtls[mtl].name); #include "shaders/data.h" } diff --git a/nelem.h b/nelem.h index 108544e..229db4a 100644 --- a/nelem.h +++ b/nelem.h @@ -5,6 +5,7 @@ #ifndef NELEM_H #define NELEM_H +// NELEM: calculate array element count #define NELEM(a) (sizeof (a) / sizeof (a)[0]) #endif // NELEM_H diff --git a/test_ieee754.c b/test_ieee754.c index 85a1c95..65d0aba 100644 --- a/test_ieee754.c +++ b/test_ieee754.c @@ -9,6 +9,7 @@ #include "ieee754.h" +// naiive: return the binary representation of a float (non portable) static unsigned long naiive(float n) { union { @@ -19,6 +20,7 @@ static unsigned long naiive(float n) return u.u; } +// test: test ieee754f against a certain number void test(float a) { float b = ieee754f(naiive(a)); diff --git a/tex.c b/tex.c index 11c09f7..a24a430 100644 --- a/tex.c +++ b/tex.c @@ -9,6 +9,7 @@ #include "eprintf.h" #include "tex.h" +// png2tex: read a PNG and produce an OpenGL texture out of it GLuint png2tex(FILE *f) { png_image pi = { .version = PNG_IMAGE_VERSION }; @@ -21,6 +22,7 @@ GLuint png2tex(FILE *f) png_image_begin_read_from_stdio(&pi, f); pi.format = PNG_FORMAT_RGB; stride = sizeof *data * PNG_IMAGE_SAMPLE_CHANNELS(pi.format) * pi.width; + // OpenGL alignment requirement stride = (stride + 3) & ~(size_t)3; size = stride * pi.height; data = emalloc(size); -- cgit v1.2.3-54-g00ecf