Return to the main menu if a shader compilation fails (#14256)

Before this change, if the shaders are broken, only an error message is shown and the player enters the world nonetheless, where he/she sees broken graphics.
This commit is contained in:
HybridDog 2024-01-19 11:51:46 +01:00 committed by GitHub
parent 432988a4ad
commit f08e4bb27d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 15 additions and 3 deletions

View File

@ -278,6 +278,10 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
error_message = gettext("Connection error (timed out?)");
errorstream << error_message << std::endl;
}
catch (ShaderException &e) {
error_message = e.what();
errorstream << error_message << std::endl;
}
#ifdef NDEBUG
catch (std::exception &e) {

View File

@ -35,6 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <IShaderConstantSetCallBack.h>
#include "client/renderingengine.h"
#include "EShaderTypes.h"
#include "gettext.h"
#include "log.h"
#include "gamedef.h"
#include "client/tile.h"
@ -588,8 +589,8 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
video::IVideoDriver *driver = RenderingEngine::get_video_driver();
if (!driver->queryFeature(video::EVDF_ARB_GLSL)) {
errorstream << "Shaders are enabled but GLSL is not supported by the driver\n";
return shaderinfo;
throw ShaderException(gettext("Shaders are enabled but GLSL is not "
"supported by the driver."));
}
video::IGPUProgrammingServices *gpu = driver->getGPUProgrammingServices();
@ -792,7 +793,9 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
dumpShaderProgram(warningstream, "Vertex", vertex_shader);
dumpShaderProgram(warningstream, "Fragment", fragment_shader);
dumpShaderProgram(warningstream, "Geometry", geometry_shader);
return shaderinfo;
throw ShaderException(
fmtgettext("Failed to compile the \"%s\" shader.", name.c_str()) +
strgettext("\nCheck debug.txt for details."));
}
// Apply the newly created material type

View File

@ -92,6 +92,11 @@ public:
PrngException(const std::string &s): BaseException(s) {}
};
class ShaderException : public BaseException {
public:
ShaderException(const std::string &s): BaseException(s) {}
};
class ModError : public BaseException {
public:
ModError(const std::string &s): BaseException(s) {}