@@ -322,6 +322,9 @@ class ShaderSource : public IWritableShaderSource
322
322
323
323
private:
324
324
325
+ // Are shaders even enabled?
326
+ bool m_enabled;
327
+
325
328
// The id of the thread that is allowed to use irrlicht directly
326
329
std::thread::id m_main_thread;
327
330
@@ -360,6 +363,12 @@ ShaderSource::ShaderSource()
360
363
// Add a dummy ShaderInfo as the first index, named ""
361
364
m_shaderinfo_cache.emplace_back ();
362
365
366
+ m_enabled = g_settings->getBool (" enable_shaders" );
367
+ if (!m_enabled) {
368
+ warningstream << " You are running " PROJECT_NAME_C " with shaders disabled, "
369
+ " this is not a recommended configuration." << std::endl;
370
+ }
371
+
363
372
// Add main global constant setter
364
373
addShaderConstantSetterFactory (new MainShaderConstantSetterFactory ());
365
374
}
@@ -368,9 +377,11 @@ ShaderSource::~ShaderSource()
368
377
{
369
378
MutexAutoLock lock (m_shaderinfo_cache_mutex);
370
379
380
+ if (!m_enabled)
381
+ return ;
382
+
371
383
// Delete materials
372
- video::IGPUProgrammingServices *gpu = RenderingEngine::get_video_driver ()->
373
- getGPUProgrammingServices ();
384
+ auto *gpu = RenderingEngine::get_video_driver ()->getGPUProgrammingServices ();
374
385
for (ShaderInfo &i : m_shaderinfo_cache) {
375
386
if (!i.name .empty ())
376
387
gpu->deleteShaderMaterial (i.material );
@@ -499,9 +510,11 @@ void ShaderSource::rebuildShaders()
499
510
{
500
511
MutexAutoLock lock (m_shaderinfo_cache_mutex);
501
512
513
+ if (!m_enabled)
514
+ return ;
515
+
502
516
// Delete materials
503
- video::IGPUProgrammingServices *gpu = RenderingEngine::get_video_driver ()->
504
- getGPUProgrammingServices ();
517
+ auto *gpu = RenderingEngine::get_video_driver ()->getGPUProgrammingServices ();
505
518
for (ShaderInfo &i : m_shaderinfo_cache) {
506
519
if (!i.name .empty ()) {
507
520
gpu->deleteShaderMaterial (i.material );
@@ -548,12 +561,11 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
548
561
}
549
562
shaderinfo.material = shaderinfo.base_material ;
550
563
551
- bool enable_shaders = g_settings->getBool (" enable_shaders" );
552
- if (!enable_shaders)
564
+ if (!m_enabled)
553
565
return shaderinfo;
554
566
555
567
video::IVideoDriver *driver = RenderingEngine::get_video_driver ();
556
- video::IGPUProgrammingServices *gpu = driver->getGPUProgrammingServices ();
568
+ auto *gpu = driver->getGPUProgrammingServices ();
557
569
if (!driver->queryFeature (video::EVDF_ARB_GLSL) || !gpu) {
558
570
throw ShaderException (gettext (" Shaders are enabled but GLSL is not "
559
571
" supported by the driver." ));
0 commit comments