From 950b3c95590aea7420e7dd4c7ae21ba0a0805ea6 Mon Sep 17 00:00:00 2001 From: Leo Tenenbaum Date: Sat, 5 Dec 2020 23:57:53 -0500 Subject: shader --- sim.h | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) (limited to 'sim.h') diff --git a/sim.h b/sim.h index cb05fb9..e52023a 100644 --- a/sim.h +++ b/sim.h @@ -18,6 +18,84 @@ #define maybe_unused #endif +typedef void (APIENTRY *GLAttachShader)(GLuint program, GLuint shader); +typedef void (APIENTRY *GLCompileShader)(GLuint shader); +typedef GLuint (APIENTRY *GLCreateProgram)(void); +typedef GLuint (APIENTRY *GLCreateShader)(GLenum shaderType); +typedef void (APIENTRY *GLDeleteProgram)(GLuint program); +typedef void (APIENTRY *GLDeleteShader)(GLuint shader); +typedef GLint (APIENTRY *GLGetAttribLocation)(GLuint program, const char *name); +typedef void (APIENTRY *GLGetProgramInfoLog)(GLuint program, GLsizei maxLength, GLsizei *length, char *infoLog); +typedef void (APIENTRY *GLGetProgramiv)(GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRY *GLGetShaderInfoLog)(GLuint shader, GLsizei maxLength, GLsizei *length, char *infoLog); +typedef void (APIENTRY *GLGetShaderiv)(GLuint shader, GLenum pname, GLint *params); +typedef GLint (APIENTRY *GLGetUniformLocation)(GLuint program, char const *name); +typedef void (APIENTRY *GLLinkProgram)(GLuint program); +typedef void (APIENTRY *GLShaderSource)(GLuint shader, GLsizei count, const char *const *string, const GLint *length); +typedef void (APIENTRY *GLUniform1f)(GLint location, GLfloat v0); +typedef void (APIENTRY *GLUniform2f)(GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRY *GLUniform3f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRY *GLUniform4f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRY *GLUniform1i)(GLint location, GLint v0); +typedef void (APIENTRY *GLUniform2i)(GLint location, GLint v0, GLint v1); +typedef void (APIENTRY *GLUniform3i)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRY *GLUniform4i)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRY *GLUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRY *GLUseProgram)(GLuint program); +typedef void (APIENTRY *GLVertexAttrib1f)(GLuint index, GLfloat v0); +typedef void (APIENTRY *GLVertexAttrib2f)(GLuint index, GLfloat v0, GLfloat v1); +typedef void (APIENTRY *GLVertexAttrib3f)(GLuint index, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRY *GLVertexAttrib4f)(GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +typedef struct { + GLAttachShader AttachShader; + GLCompileShader CompileShader; + GLCreateProgram CreateProgram; + GLCreateShader CreateShader; + GLDeleteProgram DeleteProgram; + GLDeleteShader DeleteShader; + GLGetAttribLocation GetAttribLocation; + GLGetProgramInfoLog GetProgramInfoLog; + GLGetProgramiv GetProgramiv; + GLGetShaderInfoLog GetShaderInfoLog; + GLGetShaderiv GetShaderiv; + GLGetUniformLocation GetUniformLocation; + GLLinkProgram LinkProgram; + GLShaderSource ShaderSource; + GLUniform1f Uniform1f; + GLUniform2f Uniform2f; + GLUniform3f Uniform3f; + GLUniform4f Uniform4f; + GLUniform1i Uniform1i; + GLUniform2i Uniform2i; + GLUniform3i Uniform3i; + GLUniform4i Uniform4i; + GLUniformMatrix4fv UniformMatrix4fv; + GLUseProgram UseProgram; + GLVertexAttrib1f VertexAttrib1f; + GLVertexAttrib2f VertexAttrib2f; + GLVertexAttrib3f VertexAttrib3f; + GLVertexAttrib4f VertexAttrib4f; +} GL; + +typedef struct { + GLuint program; +#if DEBUG + char vertex_filename[32]; + char fragment_filename[32]; + struct timespec last_modified; +#endif +} ShaderBase; + +typedef GLuint VertexAttributeLocation; +typedef GLint UniformLocation; + +typedef struct { + ShaderBase base; + VertexAttributeLocation vertex_p1, vertex_p2; + UniformLocation uniform_thickness; +} ShaderPlatform; + typedef struct { v2 center; float size; @@ -28,6 +106,9 @@ typedef struct { bool initialized; i32 win_width, win_height; // width,height of window + GL gl; // gl functions + ShaderPlatform shader_platform; + u32 nplatforms; Platform platforms[1000]; -- cgit v1.2.3