aboutsummaryrefslogtreecommitdiff
path: root/libs/preview_nif/src/ShaderManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/preview_nif/src/ShaderManager.h')
-rw-r--r--libs/preview_nif/src/ShaderManager.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/libs/preview_nif/src/ShaderManager.h b/libs/preview_nif/src/ShaderManager.h
new file mode 100644
index 0000000..3c38ba1
--- /dev/null
+++ b/libs/preview_nif/src/ShaderManager.h
@@ -0,0 +1,48 @@
+#pragma once
+
+#include <imoinfo.h>
+#include <QOpenGLShaderProgram>
+
+enum VertexAttrib
+{
+ AttribPosition = 0,
+ AttribNormal = 1,
+ AttribTangent = 2,
+ AttribBitangent = 3,
+ AttribTexCoord = 4,
+ AttribColor = 5,
+
+ ATTRIB_COUNT,
+};
+
+class ShaderManager
+{
+public:
+ enum ShaderType
+ {
+ None = -1,
+ SKDefault,
+ SKMSN,
+ SKMultilayer,
+ SKEffectShader,
+ FO4Default,
+ FO4EffectShader,
+
+ SHADER_COUNT,
+ };
+
+ ShaderManager(MOBase::IOrganizer* moInfo);
+ ~ShaderManager() = default;
+ ShaderManager(const ShaderManager&) = delete;
+ ShaderManager(ShaderManager&&) = delete;
+ ShaderManager& operator=(const ShaderManager&) = delete;
+ ShaderManager& operator=(ShaderManager&&) = delete;
+
+ QOpenGLShaderProgram* getProgram(ShaderType type);
+
+private:
+ QOpenGLShaderProgram* loadProgram(ShaderType type);
+
+ MOBase::IOrganizer* m_MOInfo;
+ QOpenGLShaderProgram* m_Programs[SHADER_COUNT] { nullptr };
+};