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 <jonas.rabbe@nokia.com>
This commit is contained in:
Gareth Stockwell
2012-02-10 14:09:59 +00:00
committed by Qt by Nokia
parent f21c62394e
commit 1ee21da63e

View File

@@ -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;
#else
QString pathInInstallDir;
const QString applicationDirPath = QCoreApplication::applicationDirPath();
pathInInstallDir = QString::fromAscii("%1/../%2").arg(applicationDirPath, path);
if (QFileInfo(pathInInstallDir).exists())
return pathInInstallDir;
#endif
#endif
return path;
}
QString FileReader::readFile(const QString &fileName)
{
qtTrace() << "FileReader::readFile" << "fileName" << fileName;
QString content;
QFile file(fileName);
QFile file(adjustPath(fileName));
if (file.open(QIODevice::ReadOnly)) {
QTextStream stream(&file);
content = stream.readAll();