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:
committed by
Qt by Nokia
parent
f21c62394e
commit
1ee21da63e
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user