summaryrefslogtreecommitdiffstats
path: root/src/render/frontend/qshaderprogram.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/frontend/qshaderprogram.cpp')
-rw-r--r--src/render/frontend/qshaderprogram.cpp159
1 files changed, 16 insertions, 143 deletions
diff --git a/src/render/frontend/qshaderprogram.cpp b/src/render/frontend/qshaderprogram.cpp
index 8139e38a8..ccf98472c 100644
--- a/src/render/frontend/qshaderprogram.cpp
+++ b/src/render/frontend/qshaderprogram.cpp
@@ -44,6 +44,7 @@
#include <Qt3DCore/qscenepropertychange.h>
#include <QDebug>
#include <QFile>
+#include <QUrl>
QT_BEGIN_NAMESPACE
@@ -58,12 +59,6 @@ void QShaderProgram::copy(const QNode *ref)
{
QNode::copy(ref);
const QShaderProgram *prog = static_cast<const QShaderProgram*>(ref);
- d_func()->m_vertexSourceFile = prog->d_func()->m_vertexSourceFile;
- d_func()->m_tessControlSourceFile = prog->d_func()->m_tessControlSourceFile;
- d_func()->m_tessEvalSourceFile = prog->d_func()->m_tessEvalSourceFile;
- d_func()->m_geometrySourceFile = prog->d_func()->m_geometrySourceFile;
- d_func()->m_fragmentSourceFile = prog->d_func()->m_fragmentSourceFile;
- d_func()->m_computeSourceFile = prog->d_func()->m_computeSourceFile;
d_func()->m_vertexShaderCode = prog->d_func()->m_vertexShaderCode;
d_func()->m_tessControlShaderCode = prog->d_func()->m_tessControlShaderCode;
@@ -83,143 +78,6 @@ QShaderProgram::QShaderProgram(QShaderProgramPrivate &dd, QNode *parent)
{
}
-void QShaderProgram::setVertexShaderSourceFile(const QString& vertexShaderSourceFile)
-{
- Q_D(QShaderProgram);
- if (vertexShaderSourceFile != d->m_vertexSourceFile) {
- d->m_vertexSourceFile = vertexShaderSourceFile;
- emit vertexShaderSourceFileChanged();
- }
-}
-
-QString QShaderProgram::vertexShaderSourceFile() const
-{
- Q_D(const QShaderProgram);
- return d->m_vertexSourceFile;
-}
-
-void QShaderProgram::setTessellationControlShaderSourceFile(const QString &tessellationControlShaderSourceFile)
-{
- Q_D(QShaderProgram);
- if (tessellationControlShaderSourceFile != d->m_tessControlSourceFile) {
- d->m_tessControlSourceFile = tessellationControlShaderSourceFile;
- emit tessellationControlShaderSourceFileChanged();
- }
-}
-
-QString QShaderProgram::tessellationControlShaderSourceFile() const
-{
- Q_D(const QShaderProgram);
- return d->m_tessControlSourceFile;
-}
-
-void QShaderProgram::setTessellationEvaluationShaderSourceFile(const QString &tessellationEvaluationShaderSourceFile)
-{
- Q_D(QShaderProgram);
- if (tessellationEvaluationShaderSourceFile != d->m_tessEvalSourceFile) {
- d->m_tessEvalSourceFile = tessellationEvaluationShaderSourceFile;
- emit tessellationEvaluationShaderSourceFileChanged();
- }
-}
-
-QString QShaderProgram::tessellationEvaluationShaderSourceFile() const
-{
- Q_D(const QShaderProgram);
- return d->m_tessEvalSourceFile;
-}
-
-void QShaderProgram::setGeometryShaderSourceFile(const QString &geometryShaderSourceFile)
-{
- Q_D(QShaderProgram);
- if (geometryShaderSourceFile != d->m_geometrySourceFile) {
- d->m_geometrySourceFile = geometryShaderSourceFile;
- emit geometryShaderSourceFileChanged();
- }
-}
-
-QString QShaderProgram::geometryShaderSourceFile() const
-{
- Q_D(const QShaderProgram);
- return d->m_geometrySourceFile;
-}
-
-void QShaderProgram::setFragmentShaderSourceFile(const QString& fragmentShaderSourceFile)
-{
- Q_D(QShaderProgram);
- if (fragmentShaderSourceFile != d->m_fragmentSourceFile) {
- d->m_fragmentSourceFile = fragmentShaderSourceFile;
- emit fragmentShaderSourceFileChanged();
- }
-}
-
-QString QShaderProgram::fragmentShaderSourceFile() const
-{
- Q_D(const QShaderProgram);
- return d->m_fragmentSourceFile;
-}
-
-void QShaderProgram::setComputeShaderSourceFile(const QString &computeShaderSourceFile)
-{
- Q_D(QShaderProgram);
- if (computeShaderSourceFile != d->m_computeSourceFile) {
- d->m_computeSourceFile = computeShaderSourceFile;
- emit computeShaderSourceFileChanged();
- }
-}
-
-QString QShaderProgram::computeShaderSourceFile() const
-{
- Q_D(const QShaderProgram);
- return d->m_computeSourceFile;
-}
-
-void QShaderProgram::setShaderSourceFile(ShaderType type, const QString &sourceFile)
-{
- switch (type) {
- case Vertex:
- setVertexShaderSourceFile(sourceFile);
- break;
- case TessellationControl:
- setTessellationControlShaderSourceFile(sourceFile);
- break;
- case TessellationEvaluation:
- setTessellationEvaluationShaderSourceFile(sourceFile);
- break;
- case Geometry:
- setGeometryShaderSourceFile(sourceFile);
- break;
- case Fragment:
- setFragmentShaderSourceFile(sourceFile);
- break;
- case Compute:
- setComputeShaderSourceFile(sourceFile);
- break;
- default:
- Q_UNREACHABLE();
- }
-}
-
-QString QShaderProgram::shaderSourceFile(ShaderType type) const
-{
- Q_D(const QShaderProgram);
- switch (type) {
- case Vertex:
- return d->m_vertexSourceFile;
- case TessellationControl:
- return d->m_tessControlSourceFile;
- case TessellationEvaluation:
- return d->m_tessEvalSourceFile;
- case Geometry:
- return d->m_geometrySourceFile;
- case Fragment:
- return d->m_fragmentSourceFile;
- case Compute:
- return d->m_computeSourceFile;
- default:
- Q_UNREACHABLE();
- }
-}
-
/*!
* Sets the vertexShader from raw data in \a vertexShader.
*/
@@ -365,6 +223,21 @@ QByteArray QShaderProgram::shaderCode(ShaderType type) const
}
}
+QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)
+{
+ // TO DO: Handle remote path
+ // Expect a file for now
+ // Resources file are a bit tricky to handle, there may be a nicer way to do that.
+ QString filePath = sourceUrl.toString().replace(QStringLiteral("qrc"), QStringLiteral(""));
+
+ QFile f(filePath);
+ if (!f.exists())
+ qWarning() << "Couldn't read shader source file:" << sourceUrl;
+ else
+ f.open(QIODevice::ReadOnly | QIODevice::Text);
+ return f.readAll();
+}
+
} // of namespace Qt3D
QT_END_NAMESPACE