aboutsummaryrefslogtreecommitdiff
path: root/backends/graphics/opengl/shader.h
diff options
context:
space:
mode:
authorJohannes Schickel2016-01-04 07:07:37 +0100
committerJohannes Schickel2016-03-16 20:29:26 +0100
commit5498982a3754edccb498521587c553e0ecbe7328 (patch)
tree956bfaacf060f28b83af030d3a0063abb2fd72ef /backends/graphics/opengl/shader.h
parentf5f1b6eba0d409abcda2a3c037a177d6f6e41a2e (diff)
downloadscummvm-rg350-5498982a3754edccb498521587c553e0ecbe7328.tar.gz
scummvm-rg350-5498982a3754edccb498521587c553e0ecbe7328.tar.bz2
scummvm-rg350-5498982a3754edccb498521587c553e0ecbe7328.zip
OPENGL: Introduce ShaderManager to handle builtin shaders.
Diffstat (limited to 'backends/graphics/opengl/shader.h')
-rw-r--r--backends/graphics/opengl/shader.h43
1 files changed, 40 insertions, 3 deletions
diff --git a/backends/graphics/opengl/shader.h b/backends/graphics/opengl/shader.h
index 98a2a2859b..e5dbcacfad 100644
--- a/backends/graphics/opengl/shader.h
+++ b/backends/graphics/opengl/shader.h
@@ -28,6 +28,7 @@
#if !USE_FORCED_GLES
#include "common/str.h"
+#include "common/singleton.h"
namespace OpenGL {
@@ -37,9 +38,6 @@ enum {
kColorAttribLocation = 2
};
-extern const char *const g_defaultVertexShader;
-extern const char *const g_defaultFragmentShader;
-
class Shader {
public:
Shader(const Common::String &vertex, const Common::String &fragment);
@@ -121,8 +119,47 @@ protected:
static GLshader compileShader(const char *source, GLenum shaderType);
};
+class ShaderManager : public Common::Singleton<ShaderManager> {
+public:
+ enum ShaderUsage {
+ /** Default shader implementing the GL fixed-function pipeline. */
+ kDefault = 0,
+
+ /** CLUT8 look up shader. */
+ kCLUT8LookUp,
+
+ /** Number of built-in shaders. Should not be used for query. */
+ kMaxUsages
+ };
+
+ /**
+ * Notify shader manager about context destruction.
+ */
+ void notifyDestroy();
+
+ /**
+ * Notify shader manager about context creation.
+ */
+ void notifyCreate();
+
+ /**
+ * Query a built-in shader.
+ */
+ Shader *query(ShaderUsage shader) const;
+
+private:
+ friend class Common::Singleton<SingletonBaseType>;
+ ShaderManager();
+ ~ShaderManager();
+
+ Shader *_builtIn[kMaxUsages];
+};
+
} // End of namespace OpenGL
+/** Shortcut for accessing the font manager. */
+#define ShaderMan (OpenGL::ShaderManager::instance())
+
#endif // !USE_FORCED_GLES
#endif