summaryrefslogtreecommitdiff
path: root/sim.h
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2020-12-05 23:57:53 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2020-12-05 23:57:53 -0500
commit950b3c95590aea7420e7dd4c7ae21ba0a0805ea6 (patch)
tree3fe285820ef7bce254fbd0b22f3f3c7bbb6c3a7d /sim.h
parent50fb1482f6dd3d738ba5fd23dfa6789c0f397c92 (diff)
shader
Diffstat (limited to 'sim.h')
-rw-r--r--sim.h81
1 files changed, 81 insertions, 0 deletions
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];