summaryrefslogtreecommitdiffstats
path: root/src/render/frontend/qshaderprogram.h
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2014-09-20 15:52:08 +0100
committerSean Harmer <sean.harmer@kdab.com>2014-09-21 13:27:04 +0200
commit1d2aaae6a0e9d832690a7b6b1f872aaeca3ed86a (patch)
tree76a8abea41870d60953a75b4da8a29fe3cd7f1f9 /src/render/frontend/qshaderprogram.h
parent8f8ef078353dd4d96b35804117acf914a93f9412 (diff)
Add support for remaining shader stages and rename some properties
Examples updated to reflect new QShaderProgram property names. Next commit will add a new example to test the handling of tessellation and geometry shader stages. We need to somehow expose buffers and image units to make use of compute shaders. Change-Id: Idf76cef97a42d5829402c8aa8cc4e288678a3407 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend/qshaderprogram.h')
-rw-r--r--src/render/frontend/qshaderprogram.h96
1 files changed, 74 insertions, 22 deletions
diff --git a/src/render/frontend/qshaderprogram.h b/src/render/frontend/qshaderprogram.h
index 444bc33fe..350e25f18 100644
--- a/src/render/frontend/qshaderprogram.h
+++ b/src/render/frontend/qshaderprogram.h
@@ -55,41 +55,93 @@ class QShaderProgramPrivate;
class QT3DRENDERERSHARED_EXPORT QShaderProgram : public QAbstractShader
{
Q_OBJECT
- Q_PROPERTY(QString vertexSourceFile READ vertexSourceFile WRITE setVertexSourceFile NOTIFY vertexSourceFileChanged)
- Q_PROPERTY(QString fragmentSourceFile READ fragmentSourceFile WRITE setFragmentSourceFile NOTIFY fragmentSourceFileChanged)
- Q_PROPERTY(QByteArray vertexShader READ vertexSourceCode WRITE setVertexShader NOTIFY vertexShaderChanged)
- Q_PROPERTY(QByteArray fragmentShader READ fragmentSourceCode WRITE setFragmentShader NOTIFY fragmentShaderChanged)
+
+ Q_PROPERTY(QString vertexShaderSourceFile READ vertexShaderSourceFile WRITE setVertexShaderSourceFile NOTIFY vertexShaderSourceFileChanged)
+ Q_PROPERTY(QString tessellationControlShaderSourceFile READ tessellationControlShaderSourceFile WRITE setTessellationControlShaderSourceFile NOTIFY tessellationControlShaderSourceFileChanged)
+ Q_PROPERTY(QString tessellationEvaluationShaderSourceFile READ tessellationEvaluationShaderSourceFile WRITE setTessellationEvaluationShaderSourceFile NOTIFY tessellationEvaluationShaderSourceFileChanged)
+ Q_PROPERTY(QString geometryShaderSourceFile READ geometryShaderSourceFile WRITE setGeometryShaderSourceFile NOTIFY geometryShaderSourceFileChanged)
+ Q_PROPERTY(QString fragmentShaderSourceFile READ fragmentShaderSourceFile WRITE setFragmentShaderSourceFile NOTIFY fragmentShaderSourceFileChanged)
+ Q_PROPERTY(QString computeShaderSourceFile READ computeShaderSourceFile WRITE setComputeShaderSourceFile NOTIFY computeShaderSourceFileChanged)
+ Q_PROPERTY(QByteArray vertexShaderCode READ vertexShaderCode WRITE setVertexShaderCode NOTIFY vertexShaderCodeChanged)
+ Q_PROPERTY(QByteArray tessellationControlShaderCode READ tessellationControlShaderCode WRITE setTessellationControlShaderCode NOTIFY tessellationControlShaderCodeChanged)
+ Q_PROPERTY(QByteArray tessellationEvaluationShaderCode READ tessellationEvaluationShaderCode WRITE setTessellationEvaluationShaderCode NOTIFY tessellationEvaluationShaderCodeChanged)
+ Q_PROPERTY(QByteArray geometryShaderCode READ geometryShaderCode WRITE setGeometryShaderCode NOTIFY geometryShaderCodeChanged)
+ Q_PROPERTY(QByteArray fragmentShaderCode READ fragmentShaderCode WRITE setFragmentShaderCode NOTIFY fragmentShaderCodeChanged)
+ Q_PROPERTY(QByteArray computeShaderCode READ computeShaderCode WRITE setComputeShaderCode NOTIFY computeShaderCodeChanged)
+ Q_ENUMS(ShaderType)
public:
explicit QShaderProgram(QNode *parent = 0);
+ enum ShaderType {
+ Vertex = 0,
+ Fragment,
+ TessellationControl,
+ TessellationEvaluation,
+ Geometry,
+ Compute
+ };
+
void copy(const QNode *ref) Q_DECL_OVERRIDE;
- void setVertexSourceFile(const QString &vertexSourceFile);
- QString vertexSourceFile() const;
+ // Source from file
+ void setVertexShaderSourceFile(const QString &vertexShaderSourceFile);
+ QString vertexShaderSourceFile() const;
+
+ void setTessellationControlShaderSourceFile(const QString &tessellationControlShaderSourceFile);
+ QString tessellationControlShaderSourceFile() const;
+
+ void setTessellationEvaluationShaderSourceFile(const QString &tessellationEvaluationShaderSourceFile);
+ QString tessellationEvaluationShaderSourceFile() const;
+
+ void setGeometryShaderSourceFile(const QString &geometryShaderSourceFile);
+ QString geometryShaderSourceFile() const;
+
+ void setFragmentShaderSourceFile(const QString &fragmentShaderSourceFile);
+ QString fragmentShaderSourceFile() const;
+
+ void setComputeShaderSourceFile(const QString &computeShaderSourceFile);
+ QString computeShaderSourceFile() const;
+
+ void setShaderSourceFile(ShaderType type, const QString &sourceFile);
+ QString shaderSourceFile(ShaderType type) const;
+
+ // Source code in-line
+ void setVertexShaderCode(const QByteArray &vertexShaderCode);
+ QByteArray vertexShaderCode() const;
+
+ void setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode);
+ QByteArray tessellationControlShaderCode() const;
- void setFragmentSourceFile(const QString &fragmentSource);
- QString fragmentSourceFile() const;
+ void setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode);
+ QByteArray tessellationEvaluationShaderCode() const;
- void setVertexShader(const QByteArray &vertexShader);
- void setFragmentShader(const QByteArray &fragmentShader);
+ void setGeometryShaderCode(const QByteArray &geometryShaderCode);
+ QByteArray geometryShaderCode() const;
- QByteArray vertexSourceCode() const;
- QByteArray fragmentSourceCode() const;
+ void setFragmentShaderCode(const QByteArray &fragmentShaderCode);
+ QByteArray fragmentShaderCode() const;
- bool isLoaded() const;
+ void setComputeShaderCode(const QByteArray &computeShaderCode);
+ QByteArray computeShaderCode() const;
- /**
- * @brief load - call from main / worker thread to do synchronous
- * loading of shader source files
- */
- void load();
+ void setShaderCode(ShaderType type, const QByteArray &shaderCode);
+ QByteArray shaderCode(ShaderType type) const;
Q_SIGNALS:
- void vertexSourceFileChanged();
- void fragmentSourceFileChanged();
- void vertexShaderChanged();
- void fragmentShaderChanged();
+ void vertexShaderSourceFileChanged();
+ void tessellationControlShaderSourceFileChanged();
+ void tessellationEvaluationShaderSourceFileChanged();
+ void geometryShaderSourceFileChanged();
+ void fragmentShaderSourceFileChanged();
+ void computeShaderSourceFileChanged();
+
+ void vertexShaderCodeChanged();
+ void tessellationControlShaderCodeChanged();
+ void tessellationEvaluationShaderCodeChanged();
+ void geometryShaderCodeChanged();
+ void fragmentShaderCodeChanged();
+ void computeShaderCodeChanged();
protected:
Q_DECLARE_PRIVATE(QShaderProgram)