forked from Mirrorlandia_minetest/minetest
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:
parent
432988a4ad
commit
f08e4bb27d
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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) {}
|
||||
|
Loading…
Reference in New Issue
Block a user