diff options
author | Gatis Paeglis <gatis.paeglis@digia.com> | 2014-09-09 18:04:15 +0200 |
---|---|---|
committer | Lasse Räihä <lasse.raiha@digia.com> | 2014-09-10 12:59:56 +0300 |
commit | 469e638157c710d7035af8f202c933cac99e1279 (patch) | |
tree | 92bd7b026b07e7948e9e5dc2eb916667efb2aea4 | |
parent | f23aa49107895155132e174dc5752721bb0c622f (diff) |
Read shader files from qml
Move reading of shader files from c++ to qml.
Change-Id: I60bd958f58b3e152187989a1429289fd364f8cc2
Reviewed-by: Lasse Räihä <lasse.raiha@digia.com>
-rw-r--r-- | QtDemo/QtDemo.pro | 5 | ||||
-rw-r--r-- | QtDemo/main.cpp | 4 | ||||
-rwxr-xr-x | QtDemo/qml/QtDemo/demos/shaders/Effects/Effect.qml | 33 | ||||
-rw-r--r-- | QtDemo/shaderfilereader.cpp | 20 | ||||
-rw-r--r-- | QtDemo/shaderfilereader.h | 14 |
5 files changed, 28 insertions, 48 deletions
diff --git a/QtDemo/QtDemo.pro b/QtDemo/QtDemo.pro index 3c376ff..b4c175d 100644 --- a/QtDemo/QtDemo.pro +++ b/QtDemo/QtDemo.pro @@ -2,10 +2,7 @@ TEMPLATE = app QT += qml quick xmlpatterns sql svg multimedia -HEADERS += shaderfilereader.h - -SOURCES += main.cpp \ - shaderfilereader.cpp +SOURCES += main.cpp RESOURCES += qml.qrc diff --git a/QtDemo/main.cpp b/QtDemo/main.cpp index 5accb61..e3572ea 100644 --- a/QtDemo/main.cpp +++ b/QtDemo/main.cpp @@ -1,16 +1,12 @@ #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQmlContext> -#include "shaderfilereader.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); - ShaderFileReader fileReader; - QQmlApplicationEngine engine; - engine.rootContext()->setContextProperty("shaderFileReader", &fileReader); engine.load(QUrl(QStringLiteral("qrc:///qml/QtDemo/main.qml"))); return app.exec(); diff --git a/QtDemo/qml/QtDemo/demos/shaders/Effects/Effect.qml b/QtDemo/qml/QtDemo/demos/shaders/Effects/Effect.qml index 5ec282c..872540e 100755 --- a/QtDemo/qml/QtDemo/demos/shaders/Effects/Effect.qml +++ b/QtDemo/qml/QtDemo/demos/shaders/Effects/Effect.qml @@ -42,6 +42,7 @@ import QtQuick 2.2 ShaderEffect { + id: shaderEffect property variant source property ListModel parameters: ListModel { } property bool divider: false @@ -65,11 +66,31 @@ ShaderEffect { } // The following is a workaround for the fact that ShaderEffect - // doesn't provide a way for shader programs to be read from a file, - // rather than being inline in the QML file + // doesn't provide a way for shader programs to be read from a file. + QtObject { + id: shaderFileReader + + signal fileReady(string shader, string shaderType) + + function readFile(shaderFile, shaderType) + { + var xhr = new XMLHttpRequest + xhr.open("GET", "../" + shaderFile, true) + xhr.onreadystatechange = function() { + if (xhr.readyState == XMLHttpRequest.DONE) + shaderFileReader.fileReady(xhr.responseText, shaderType) + } + xhr.send() + } + + onFileReady: { + if (shaderType == "fragment") + shaderEffect.fragmentShader = d.fragmentShaderCommon + shader + if (shaderType == "vertex") + shaderEffect.vertexShader = shader + } + } - onFragmentShaderFilenameChanged: - fragmentShader = d.fragmentShaderCommon + shaderFileReader.readFile("qml/QtDemo/demos/shaders/" + fragmentShaderFilename) - onVertexShaderFilenameChanged: - vertexShader = shaderFileReader.readFile("qml/QtDemo/demos/shaders/" + vertexShaderFilename) + onFragmentShaderFilenameChanged: shaderFileReader.readFile(fragmentShaderFilename, "fragment") + onVertexShaderFilenameChanged: shaderFileReader.readFile(vertexShaderFilename, "vertex") } diff --git a/QtDemo/shaderfilereader.cpp b/QtDemo/shaderfilereader.cpp deleted file mode 100644 index e394682..0000000 --- a/QtDemo/shaderfilereader.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "shaderfilereader.h" -#include <QtCore/QDir> -#include <QtCore/QFile> -#include <QtCore/QFileInfo> -#include <QtCore/QTextStream> -#include <QtCore/QDebug> - -QString ShaderFileReader::readFile(const QString &fileName) -{ - QString content; - QFile file(QString(QStringLiteral(":/%1")).arg(fileName)); - - if (file.open(QIODevice::ReadOnly)) { - QTextStream stream(&file); - content = stream.readAll(); - file.close(); - } - return content; -} - diff --git a/QtDemo/shaderfilereader.h b/QtDemo/shaderfilereader.h deleted file mode 100644 index 74b7779..0000000 --- a/QtDemo/shaderfilereader.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef SHADERFILEREADER_H -#define SHADERFILEREADER_H - -#include <QObject> - -class ShaderFileReader : public QObject -{ - Q_OBJECT - -public: - Q_INVOKABLE QString readFile(const QString &fileName); -}; - -#endif // SHADERFILEREADER_H |