mudlet/src/ShaderManager.cpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

250 lines
8.7 KiB
C++
Raw Permalink Normal View History

Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
/***************************************************************************
* Copyright (C) 2025 by Vadim Peretokin - vadim.peretokin@mudlet.org *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "ShaderManager.h"
#include "ResourceManager.h"
#include <QDebug>
#include <QDir>
#include <QFile>
#include <QStandardPaths>
#include <QCoreApplication>
#include <chrono>
#include "utils.h"
ShaderManager::ShaderManager(ResourceManager* resourceManager, QObject* parent)
: QObject(parent)
, mDevelopmentMode(false)
, mInitialized(false)
, mUniformMVP(-1)
, mUniformModel(-1)
, mUniformNormalMatrix(-1)
, mResourceManager(resourceManager)
{
mReloadTimer = new QTimer(this);
mReloadTimer->setSingleShot(true);
mReloadTimer->setInterval(std::chrono::milliseconds(50));
connect(mReloadTimer, &QTimer::timeout, this, &ShaderManager::delayedReload);
}
ShaderManager::~ShaderManager()
{
cleanup();
}
bool ShaderManager::initialize()
{
if (mInitialized) {
return true;
}
initializeOpenGLFunctions();
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
mDevelopmentMode = detectDevelopmentMode();
qDebug() << "ShaderManager: Hot-reload" << (mDevelopmentMode ? "enabled" : "disabled (using embedded shaders)");
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
if (mDevelopmentMode) {
// Try multiple well-known locations for shader files
QStringList possiblePaths = {// CMake build from build/src/
qsl("../src/shaders/"),
// CMake build from build/
qsl("src/shaders/"),
// In-source build
qsl("../../src/shaders/"),
// Qt Creator build
qsl("../../../src/shaders/"),
// Relative to current directory
qsl("shaders/")};
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
QString appDir = QCoreApplication::applicationDirPath();
QString foundPath;
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
for (const QString& relativePath : possiblePaths) {
QString testPath = QDir(appDir).filePath(relativePath);
QDir testDir(testPath);
if (testDir.exists() && QFile::exists(testDir.filePath(qsl("vertex.glsl"))) && QFile::exists(testDir.filePath(qsl("fragment.glsl")))) {
foundPath = testPath;
break;
}
}
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
if (foundPath.isEmpty()) {
qWarning() << "ShaderManager: Could not find shader directory, trying fallback locations";
mVertexShaderPath = QDir(appDir).canonicalPath() + qsl("/../src/shaders/vertex.glsl");
mFragmentShaderPath = QDir(appDir).canonicalPath() + qsl("/../src/shaders/fragment.glsl");
} else {
mVertexShaderPath = QDir(foundPath).canonicalPath() + qsl("/vertex.glsl");
mFragmentShaderPath = QDir(foundPath).canonicalPath() + qsl("/fragment.glsl");
}
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
mFileWatcher = new QFileSystemWatcher(this);
if (QFile::exists(mVertexShaderPath)) {
mFileWatcher->addPath(mVertexShaderPath);
}
if (QFile::exists(mFragmentShaderPath)) {
mFileWatcher->addPath(mFragmentShaderPath);
}
connect(mFileWatcher, &QFileSystemWatcher::fileChanged, this, &ShaderManager::onShaderFileChanged);
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
qDebug() << "ShaderManager: Watching shader files:";
qDebug() << " Vertex:" << mVertexShaderPath << "(exists:" << QFile::exists(mVertexShaderPath) << ")";
qDebug() << " Fragment:" << mFragmentShaderPath << "(exists:" << QFile::exists(mFragmentShaderPath) << ")";
}
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
mInitialized = createShaderProgram();
return mInitialized;
}
QOpenGLShaderProgram* ShaderManager::getMainShaderProgram()
{
if (!mInitialized || !mShaderProgram) {
qWarning() << "ShaderManager: Shader program not initialized";
return nullptr;
}
return mShaderProgram.get();
}
bool ShaderManager::reloadShaders()
{
qDebug() << "ShaderManager: Reloading shaders...";
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
mShaderProgram.reset();
mUniformMVP = -1;
mUniformModel = -1;
mUniformNormalMatrix = -1;
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
bool success = createShaderProgram();
if (success) {
qDebug() << "ShaderManager: Shaders reloaded successfully";
emit shadersReloaded();
} else {
qWarning() << "ShaderManager: Failed to reload shaders";
}
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
return success;
}
void ShaderManager::cleanup()
{
mShaderProgram.reset();
mInitialized = false;
}
void ShaderManager::onShaderFileChanged(const QString& path)
{
qDebug() << "ShaderManager: Shader file changed:" << path;
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
if (mFileWatcher) {
mFileWatcher->addPath(path);
}
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
mReloadTimer->start();
}
void ShaderManager::delayedReload()
{
reloadShaders();
}
QString ShaderManager::loadShaderSource(const QString& shaderName)
{
QString source;
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
if (mDevelopmentMode) {
QString filePath = (shaderName == qsl("vertex")) ? mVertexShaderPath : mFragmentShaderPath;
QFile file(filePath);
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
source = file.readAll();
qDebug() << "ShaderManager: Loaded" << shaderName << "shader from file:" << filePath;
} else {
qWarning() << "ShaderManager: Failed to load" << shaderName << "shader from file:" << filePath;
}
} else {
QString resourcePath = qsl(":/shaders/%1.glsl").arg(shaderName);
QFile file(resourcePath);
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
source = file.readAll();
qDebug() << "ShaderManager: Loaded" << shaderName << "shader from resource:" << resourcePath;
} else {
qWarning() << "ShaderManager: Failed to load" << shaderName << "shader from resource:" << resourcePath;
}
}
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
return source;
}
bool ShaderManager::createShaderProgram()
{
mShaderProgram = std::make_unique<QOpenGLShaderProgram>();
QString vertexSource = loadShaderSource(qsl("vertex"));
QString fragmentSource = loadShaderSource(qsl("fragment"));
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
if (vertexSource.isEmpty() || fragmentSource.isEmpty()) {
qWarning() << "ShaderManager: Empty shader sources";
return false;
}
if (!mShaderProgram->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexSource)) {
qWarning() << "ShaderManager: Failed to compile vertex shader:" << mShaderProgram->log();
return false;
}
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
if (mResourceManager) {
mResourceManager->onShaderCreated();
}
if (!mShaderProgram->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentSource)) {
qWarning() << "ShaderManager: Failed to compile fragment shader:" << mShaderProgram->log();
return false;
}
Improve: add a new, experimental 3D mapper (#8087) <!-- Keep the title short & concise so anyone non-technical can understand it, the title appears in PTB changelogs --> #### Brief overview of PR changes/additions This adds an experimental, new 3D mapper that uses shaders, more modern openGL, and a far better code reorganization that makes it an easier foundation to build upon. The new 3D mapper is here side by side with the original and can be toggled on for experimentation. There's a lot of work to be done, so I'd rather merge it early instead of making a mega-PR. #### Motivation for adding to Mudlet So we have a new foundation to build upon and improve. #### Other info (issues closed, discussion etc) Old and new mapper can be toggled dynamically with: ```lua -- this can be a keybinding setConfig("experiment.3dmap.modernmapper", not getConfig("experiment.3dmap.modernmapper")) ``` Smooth movement is one experiment in the new mapper, and it can be enabled with: ```lua lua setConfig("experiment.rendering.smooth-camera", true) ``` As you notice an experiments system has been added so we can implement things at once and experiment to choose the one that works best. This system can be used in other places in Mudlet as well. <details><summary>Details</summary> <p> ## Experiments System ### Overview Allows enabling/disabling experimental features via `setConfig`/`getConfig` with validation against a predefined whitelist. ### Usage ```lua -- Enable experiment setConfig("experiment.rendering.more-transparent", true) -- Check if enabled local enabled = getConfig("experiment.rendering.more-transparent") -- returns true/false -- Get active experiment in group local active = getConfig("experiment.rendering.active") -- returns "more-transparent" -- List all valid experiments local experiments = getConfig("experiment.list") -- returns table of valid keys ``` ### Behavior - Grouped experiments: Mutually exclusive (enabling one disables others in same group) - Validation: Only predefined experiments allowed, invalid keys return errors - Persistence: Experiment states saved/loaded with profiles ### Adding New Experiments Edit Host::mValidExperiments in src/Host.cpp: ```cpp const QSet<QString> Host::mValidExperiments = { qsl("experiment.rendering.originalish"), qsl("experiment.rendering.more-transparent"), qsl("experiment.newfeature.option1"), // Add here }; ``` ### Current Experiments - experiment.rendering.originalish - experiment.rendering.more-transparent </p> </details> --------- Co-authored-by: Vadim Peretokin <vadi2@users.noreply.github.com>
2025-08-29 12:15:48 +02:00
if (mResourceManager) {
mResourceManager->onShaderCreated();
}
if (!mShaderProgram->link()) {
qWarning() << "ShaderManager: Failed to link shader program:" << mShaderProgram->log();
return false;
}
mUniformMVP = mShaderProgram->uniformLocation(qsl("uMVP"));
mUniformModel = mShaderProgram->uniformLocation(qsl("uModel"));
mUniformNormalMatrix = mShaderProgram->uniformLocation(qsl("uNormalMatrix"));
if (mUniformMVP == -1) {
qWarning() << "ShaderManager: Failed to get MVP uniform location";
return false;
}
qDebug() << "ShaderManager: Shaders compiled successfully. Uniform locations - MVP:" << mUniformMVP << "Model:" << mUniformModel << "Normal:" << mUniformNormalMatrix;
return true;
}
bool ShaderManager::detectDevelopmentMode()
{
#ifdef MUDLET_SHADER_HOT_RELOAD
return true;
#else
return false;
#endif
}