diff --git a/src/plugins/effectmakernew/effectmakermodel.cpp b/src/plugins/effectmakernew/effectmakermodel.cpp index 364a012fe30..293d1311b7d 100644 --- a/src/plugins/effectmakernew/effectmakermodel.cpp +++ b/src/plugins/effectmakernew/effectmakermodel.cpp @@ -44,17 +44,13 @@ static bool writeToFile(const QByteArray &buf, const QString &filename, FileType EffectMakerModel::EffectMakerModel(QObject *parent) : QAbstractListModel{parent} { + m_vertexSourceFile.setFileTemplate(QDir::tempPath() + "/dsem_XXXXXX.vert"); + m_fragmentSourceFile.setFileTemplate(QDir::tempPath() + "/dsem_XXXXXX.frag"); m_vertexShaderFile.setFileTemplate(QDir::tempPath() + "/dsem_XXXXXX.vert.qsb"); m_fragmentShaderFile.setFileTemplate(QDir::tempPath() + "/dsem_XXXXXX.frag.qsb"); - // TODO: Will be revisted later when saving output files - if (m_vertexShaderFile.open()) - qInfo() << "Using temporary vs file:" << m_vertexShaderFile.fileName(); - if (m_fragmentShaderFile.open()) - qInfo() << "Using temporary fs file:" << m_fragmentShaderFile.fileName(); - - // Prepare baker - m_baker.setGeneratedShaderVariants({ QShader::StandardShader }); - updateBakedShaderVersions(); + if (!m_vertexSourceFile.open() || !m_fragmentSourceFile.open() + || !m_vertexShaderFile.open() || !m_fragmentShaderFile.open()) + qWarning() << "Unable to open temporary files"; } QHash EffectMakerModel::roleNames() const @@ -141,21 +137,6 @@ void EffectMakerModel::removeNode(int idx) bakeShaders(); } -void EffectMakerModel::updateBakedShaderVersions() -{ - QList targets; - targets.append({ QShader::SpirvShader, QShaderVersion(100) }); // Vulkan 1.0 - targets.append({ QShader::HlslShader, QShaderVersion(50) }); // Shader Model 5.0 - targets.append({ QShader::MslShader, QShaderVersion(12) }); // Metal 1.2 - targets.append({ QShader::GlslShader, QShaderVersion(300, QShaderVersion::GlslEs) }); // GLES 3.0+ - targets.append({ QShader::GlslShader, QShaderVersion(410) }); // OpenGL 4.1+ - targets.append({ QShader::GlslShader, QShaderVersion(330) }); // OpenGL 3.3 - targets.append({ QShader::GlslShader, QShaderVersion(140) }); // OpenGL 3.1 - //TODO: Do we need support for legacy shaders 100, 120? - - m_baker.setGeneratedShaders(targets); -} - QString EffectMakerModel::fragmentShader() const { return m_fragmentShader; @@ -813,37 +794,16 @@ void EffectMakerModel::bakeShaders() setVertexShader(generateVertexShader()); QString vs = m_vertexShader; - m_baker.setSourceString(vs.toUtf8(), QShader::VertexStage); - QShader vertShader = m_baker.bake(); - - if (!vertShader.isValid()) { - qWarning() << "Shader baking failed:" << qPrintable(m_baker.errorMessage()); - setEffectError(m_baker.errorMessage().split('\n').first(), ErrorVert); - } else { - QString filename = m_vertexShaderFile.fileName(); - writeToFile(vertShader.serialized(), filename, FileType::Binary); - resetEffectError(ErrorVert); - } + writeToFile(vs.toUtf8(), m_vertexSourceFile.fileName(), FileType::Text); setFragmentShader(generateFragmentShader()); QString fs = m_fragmentShader; - m_baker.setSourceString(fs.toUtf8(), QShader::FragmentStage); + writeToFile(fs.toUtf8(), m_fragmentSourceFile.fileName(), FileType::Text); - QShader fragShader = m_baker.bake(); + //TODO: Compile shaders using external qsb tools - if (!fragShader.isValid()) { - qWarning() << "Shader baking failed:" << qPrintable(m_baker.errorMessage()); - setEffectError(m_baker.errorMessage().split('\n').first(), ErrorFrag); - } else { - QString filename = m_fragmentShaderFile.fileName(); - writeToFile(fragShader.serialized(), filename, FileType::Binary); - resetEffectError(ErrorFrag); - } - - if (vertShader.isValid() && fragShader.isValid()) { - Q_EMIT shadersBaked(); - setShadersUpToDate(true); - } + Q_EMIT shadersBaked(); + setShadersUpToDate(true); // TODO: Mark shaders as baked, required by export later } diff --git a/src/plugins/effectmakernew/effectmakermodel.h b/src/plugins/effectmakernew/effectmakermodel.h index ad315a9c8d1..223656d382e 100644 --- a/src/plugins/effectmakernew/effectmakermodel.h +++ b/src/plugins/effectmakernew/effectmakermodel.h @@ -12,8 +12,6 @@ #include #include -#include - namespace Utils { class Process; } @@ -108,7 +106,6 @@ private: const QString getVSUniforms(); const QString getFSUniforms(); - void updateBakedShaderVersions(); QString detectErrorMessage(const QString &errorMessage); EffectError effectError() const; @@ -150,7 +147,9 @@ private: QString m_vertexShader; QStringList m_defaultRootVertexShader; QStringList m_defaultRootFragmentShader; - QShaderBaker m_baker; // TODO: Remove + // Temp files to store shaders sources and binary data + QTemporaryFile m_fragmentSourceFile; + QTemporaryFile m_vertexSourceFile; QTemporaryFile m_fragmentShaderFile; QTemporaryFile m_vertexShaderFile; // Used in exported QML, at root of the file