summaryrefslogtreecommitdiff
path: root/src/gl/rwgl3shader.h
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
committerclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
commit847962910f0bff071f3bf07c9abb87764fb6cac3 (patch)
treeddcd429e134c7fd5f72ddc97ced175de8d66fcd0 /src/gl/rwgl3shader.h
downloadlibrw-847962910f0bff071f3bf07c9abb87764fb6cac3.tar.gz
librw-847962910f0bff071f3bf07c9abb87764fb6cac3.zip
Import aap/librw @ masterHEADmaster
Snapshot for re3/reVC vendoring, per @lzcnt. Source: https://github.com/aap/librw (master).
Diffstat (limited to 'src/gl/rwgl3shader.h')
-rw-r--r--src/gl/rwgl3shader.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/gl/rwgl3shader.h b/src/gl/rwgl3shader.h
new file mode 100644
index 0000000..890f12b
--- /dev/null
+++ b/src/gl/rwgl3shader.h
@@ -0,0 +1,69 @@
+#ifdef RW_OPENGL
+
+namespace rw {
+namespace gl3 {
+
+// TODO: make this dynamic
+enum {
+ MAX_UNIFORMS = 40,
+ MAX_BLOCKS = 20
+};
+
+enum UniformType
+{
+ UNIFORM_NA, // managed by the user
+ UNIFORM_VEC4,
+ UNIFORM_IVEC4,
+ UNIFORM_MAT4
+};
+
+struct Uniform
+{
+ char *name;
+ UniformType type;
+ //bool dirty;
+ uint32 serialNum;
+ int32 num;
+ void *data;
+};
+
+struct UniformRegistry
+{
+ int32 numUniforms;
+ Uniform uniforms[MAX_UNIFORMS];
+
+ int32 numBlocks;
+ char *blockNames[MAX_BLOCKS];
+};
+
+int32 registerUniform(const char *name, UniformType type = UNIFORM_NA, int32 num = 1);
+int32 findUniform(const char *name);
+int32 registerBlock(const char *name);
+int32 findBlock(const char *name);
+
+void setUniform(int32 id, void *data);
+void flushUniforms(void);
+
+extern UniformRegistry uniformRegistry;
+
+struct Shader
+{
+ GLuint program;
+ // same number of elements as UniformRegistry::numUniforms
+ GLint *uniformLocations;
+ uint32 *serialNums;
+ int32 numUniforms; // just to be sure!
+
+ static Shader *create(const char **vsrc, const char **fsrc);
+// static Shader *fromFiles(const char *vs, const char *fs);
+// static Shader *fromStrings(const char *vsrc, const char *fsrc);
+ void use(void);
+ void destroy(void);
+};
+
+extern Shader *currentShader;
+
+}
+}
+
+#endif