diff --git a/src/plugins/glsleditor/CMakeLists.txt b/src/plugins/glsleditor/CMakeLists.txt index b02e95cda74..494c27479b5 100644 --- a/src/plugins/glsleditor/CMakeLists.txt +++ b/src/plugins/glsleditor/CMakeLists.txt @@ -8,7 +8,7 @@ add_qtc_plugin(GLSLEditor glsleditor.cpp glsleditor.h glsleditor.qrc glsleditorconstants.h - glsleditorplugin.cpp glsleditorplugin.h + glsleditorplugin.cpp glsleditortr.h glslhighlighter.cpp glslhighlighter.h glslindenter.cpp glslindenter.h diff --git a/src/plugins/glsleditor/glslcompletionassist.cpp b/src/plugins/glsleditor/glslcompletionassist.cpp index bb72ba9de30..d38b105f997 100644 --- a/src/plugins/glsleditor/glslcompletionassist.cpp +++ b/src/plugins/glsleditor/glslcompletionassist.cpp @@ -2,8 +2,6 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "glslcompletionassist.h" -#include "glsleditorconstants.h" -#include "glsleditorplugin.h" #include #include diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp index 0ccd6f30836..1b789863497 100644 --- a/src/plugins/glsleditor/glsleditor.cpp +++ b/src/plugins/glsleditor/glsleditor.cpp @@ -3,7 +3,6 @@ #include "glsleditor.h" #include "glsleditorconstants.h" -#include "glsleditorplugin.h" #include "glslhighlighter.h" #include "glslautocompleter.h" #include "glslcompletionassist.h" @@ -105,6 +104,93 @@ enum { UPDATE_DOCUMENT_DEFAULT_INTERVAL = 150 }; +class InitFile final +{ +public: + explicit InitFile(const QString &fileName) : m_fileName(fileName) {} + + ~InitFile() { delete m_engine; } + + GLSL::Engine *engine() const + { + if (!m_engine) + initialize(); + return m_engine; + } + + GLSL::TranslationUnitAST *ast() const + { + if (!m_ast) + initialize(); + return m_ast; + } + +private: + void initialize() const + { + // Parse the builtins for any language variant so we can use all keywords. + const int variant = GLSL::Lexer::Variant_All; + + QByteArray code; + QFile file(Core::ICore::resourcePath("glsl").pathAppended(m_fileName).toString()); + if (file.open(QFile::ReadOnly)) + code = file.readAll(); + + m_engine = new GLSL::Engine(); + GLSL::Parser parser(m_engine, code.constData(), code.size(), variant); + m_ast = parser.parse(); + } + + QString m_fileName; + mutable GLSL::Engine *m_engine = nullptr; + mutable GLSL::TranslationUnitAST *m_ast = nullptr; +}; + +static const InitFile *fragmentShaderInit(int variant) +{ + static InitFile glsl_es_100_frag{"glsl_es_100.frag"}; + static InitFile glsl_120_frag{"glsl_120.frag"}; + static InitFile glsl_330_frag{"glsl_330.frag"}; + + if (variant & GLSL::Lexer::Variant_GLSL_400) + return &glsl_330_frag; + + if (variant & GLSL::Lexer::Variant_GLSL_120) + return &glsl_120_frag; + + return &glsl_es_100_frag; +} + +static const InitFile *vertexShaderInit(int variant) +{ + static InitFile glsl_es_100_vert{"glsl_es_100.vert"}; + static InitFile glsl_120_vert{"glsl_120.vert"}; + static InitFile glsl_330_vert{"glsl_330.vert"}; + + if (variant & GLSL::Lexer::Variant_GLSL_400) + return &glsl_330_vert; + + if (variant & GLSL::Lexer::Variant_GLSL_120) + return &glsl_120_vert; + + return &glsl_es_100_vert; +} + +static const InitFile *shaderInit(int variant) +{ + static InitFile glsl_es_100_common{"glsl_es_100_common.glsl"}; + static InitFile glsl_120_common{"glsl_120_common.glsl"}; + static InitFile glsl_330_common{"glsl_330_common.glsl"}; + + if (variant & GLSL::Lexer::Variant_GLSL_400) + return &glsl_330_common; + + if (variant & GLSL::Lexer::Variant_GLSL_120) + return &glsl_120_common; + + return &glsl_es_100_common; +} + class CreateRanges: protected Visitor { QTextDocument *textDocument; diff --git a/src/plugins/glsleditor/glsleditor.qbs b/src/plugins/glsleditor/glsleditor.qbs index e0aefe02a1b..9c1847cce67 100644 --- a/src/plugins/glsleditor/glsleditor.qbs +++ b/src/plugins/glsleditor/glsleditor.qbs @@ -22,7 +22,6 @@ QtcPlugin { "glsleditor.qrc", "glsleditorconstants.h", "glsleditorplugin.cpp", - "glsleditorplugin.h", "glsleditortr.h", "glslhighlighter.cpp", "glslhighlighter.h", diff --git a/src/plugins/glsleditor/glsleditorplugin.cpp b/src/plugins/glsleditor/glsleditorplugin.cpp index ac255fe7089..fcfc999af23 100644 --- a/src/plugins/glsleditor/glsleditorplugin.cpp +++ b/src/plugins/glsleditor/glsleditorplugin.cpp @@ -1,17 +1,11 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 -#include "glsleditorplugin.h" - #include "glslcompletionassist.h" #include "glsleditor.h" #include "glsleditorconstants.h" #include "glsleditortr.h" -#include -#include -#include - #include #include #include @@ -41,89 +35,6 @@ public: static GlslEditorPluginPrivate *dd = nullptr; -InitFile::InitFile(const QString &fileName) - : m_fileName(fileName) -{} - -InitFile::~InitFile() -{ - delete m_engine; -} - -void InitFile::initialize() const -{ - // Parse the builtins for any language variant so we can use all keywords. - const int variant = GLSL::Lexer::Variant_All; - - QByteArray code; - QFile file(ICore::resourcePath("glsl").pathAppended(m_fileName).toString()); - if (file.open(QFile::ReadOnly)) - code = file.readAll(); - - m_engine = new GLSL::Engine(); - GLSL::Parser parser(m_engine, code.constData(), code.size(), variant); - m_ast = parser.parse(); -} - -GLSL::TranslationUnitAST *InitFile::ast() const -{ - if (!m_ast) - initialize(); - return m_ast; -} - -GLSL::Engine *InitFile::engine() const -{ - if (!m_engine) - initialize(); - return m_engine; -} - -const InitFile *fragmentShaderInit(int variant) -{ - static InitFile glsl_es_100_frag{"glsl_es_100.frag"}; - static InitFile glsl_120_frag{"glsl_120.frag"}; - static InitFile glsl_330_frag{"glsl_330.frag"}; - - if (variant & GLSL::Lexer::Variant_GLSL_400) - return &glsl_330_frag; - - if (variant & GLSL::Lexer::Variant_GLSL_120) - return &glsl_120_frag; - - return &glsl_es_100_frag; -} - -const InitFile *vertexShaderInit(int variant) -{ - static InitFile glsl_es_100_vert{"glsl_es_100.vert"}; - static InitFile glsl_120_vert{"glsl_120.vert"}; - static InitFile glsl_330_vert{"glsl_330.vert"}; - - if (variant & GLSL::Lexer::Variant_GLSL_400) - return &glsl_330_vert; - - if (variant & GLSL::Lexer::Variant_GLSL_120) - return &glsl_120_vert; - - return &glsl_es_100_vert; -} - -const InitFile *shaderInit(int variant) -{ - static InitFile glsl_es_100_common{"glsl_es_100_common.glsl"}; - static InitFile glsl_120_common{"glsl_120_common.glsl"}; - static InitFile glsl_330_common{"glsl_330_common.glsl"}; - - if (variant & GLSL::Lexer::Variant_GLSL_400) - return &glsl_330_common; - - if (variant & GLSL::Lexer::Variant_GLSL_120) - return &glsl_120_common; - - return &glsl_es_100_common; -} - class GlslEditorPlugin final : public ExtensionSystem::IPlugin { Q_OBJECT diff --git a/src/plugins/glsleditor/glsleditorplugin.h b/src/plugins/glsleditor/glsleditorplugin.h deleted file mode 100644 index a442db1128a..00000000000 --- a/src/plugins/glsleditor/glsleditorplugin.h +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#pragma once - -#include - -#include - -namespace GlslEditor::Internal { - -class InitFile -{ -public: - explicit InitFile(const QString &m_fileName); - ~InitFile(); - - GLSL::Engine *engine() const; - GLSL::TranslationUnitAST *ast() const; - -private: - void initialize() const; - - QString m_fileName; - mutable GLSL::Engine *m_engine = nullptr; - mutable GLSL::TranslationUnitAST *m_ast = nullptr; -}; - -const InitFile *fragmentShaderInit(int variant); -const InitFile *vertexShaderInit(int variant); -const InitFile *shaderInit(int variant); - -} // GlslEditor