diff options
authorGareth Stockwell <>2012-02-10 14:09:59 +0000
committerQt by Nokia <>2012-02-13 03:01:49 +0100
commit1ee21da63e3d6091a6c31d05af3268c5d0cccca0 (patch)
parentf21c62394eaba1687eb2d81fb6b188ba256f41ba (diff)
Fix shader file loading in qmlvideofx example
Each effect is implemented as a QML element, whose fragment/vertexShaderFilename properties specify paths from which shader programs are loaded. These paths are relative to the application installation directory, e.g. "shaders/billboard.fsh". If the current directory from which the application is launched does not match the installation directory, shader program loading fails. This patch converts the relative filename provided by the QML element into an absolute path before attempting to open the file. Change-Id: I8ed39d271c4f1f59180588843e500ed73a93a543 Reviewed-by: Jonas Rabbe <>
1 files changed, 23 insertions, 1 deletions
diff --git a/examples/video/qmlvideofx/filereader.cpp b/examples/video/qmlvideofx/filereader.cpp
index 26997d7f..1d6b0327 100644
--- a/examples/video/qmlvideofx/filereader.cpp
+++ b/examples/video/qmlvideofx/filereader.cpp
@@ -41,14 +41,36 @@
#include "filereader.h"
#include "trace.h"
+#include <QtCore/QCoreApplication>
+#include <QtCore/QDir>
#include <QtCore/QFile>
+#include <QtCore/QFileInfo>
#include <QtCore/QTextStream>
+QString adjustPath(const QString &path)
+#ifdef Q_OS_UNIX
+#ifdef Q_OS_MAC
+ if (!QDir::isAbsolutePath(path))
+ return QCoreApplication::applicationDirPath()
+ + QLatin1String("/../Resources/") + path;
+ QString pathInInstallDir;
+ const QString applicationDirPath = QCoreApplication::applicationDirPath();
+ pathInInstallDir = QString::fromAscii("%1/../%2").arg(applicationDirPath, path);
+ if (QFileInfo(pathInInstallDir).exists())
+ return pathInInstallDir;
+ return path;
QString FileReader::readFile(const QString &fileName)
qtTrace() << "FileReader::readFile" << "fileName" << fileName;
QString content;
- QFile file(fileName);
+ QFile file(adjustPath(fileName));
if ( {
QTextStream stream(&file);
content = stream.readAll();