summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGatis Paeglis <gatis.paeglis@digia.com>2014-09-09 18:04:15 +0200
committerLasse Räihä <lasse.raiha@digia.com>2014-09-10 12:59:56 +0300
commit469e638157c710d7035af8f202c933cac99e1279 (patch)
tree92bd7b026b07e7948e9e5dc2eb916667efb2aea4
parentf23aa49107895155132e174dc5752721bb0c622f (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.pro5
-rw-r--r--QtDemo/main.cpp4
-rwxr-xr-xQtDemo/qml/QtDemo/demos/shaders/Effects/Effect.qml33
-rw-r--r--QtDemo/shaderfilereader.cpp20
-rw-r--r--QtDemo/shaderfilereader.h14
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