56 GLShader *shader(ShaderTraits traits);
66 bool isShaderBound()
const;
72 GLShader *pushShader(ShaderTraits traits);
99 std::unique_ptr<GLShader> loadShaderFromCode(
const QByteArray &vertexSource,
const QByteArray &fragmentSource);
117 std::unique_ptr<GLShader> generateCustomShader(ShaderTraits traits,
const QByteArray &vertexSource = QByteArray(),
const QByteArray &fragmentSource = QByteArray());
139 std::unique_ptr<GLShader> generateShaderFromFile(ShaderTraits traits,
const QString &vertexFile = QString(),
const QString &fragmentFile = QString());
149 static void cleanup();
152 void bindFragDataLocations(
GLShader *shader);
153 void bindAttributeLocations(
GLShader *shader)
const;
155 std::optional<QByteArray> preprocess(
const QByteArray &src,
int recursionDepth = 0)
const;
156 QByteArray generateVertexSource(ShaderTraits traits)
const;
157 QByteArray generateFragmentSource(ShaderTraits traits)
const;
158 std::unique_ptr<GLShader> generateShader(ShaderTraits traits);
160 QStack<GLShader *> m_boundShaders;
161 std::map<ShaderTraits, std::unique_ptr<GLShader>> m_shaderHash;
162 static std::unique_ptr<ShaderManager> s_shaderManager;