mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Merge remote-tracking branch 'upstream/master' into Visuals-Vol-2
This commit is contained in:
commit
00ef9b14d0
1043 changed files with 44800 additions and 28934 deletions
|
@ -1,22 +1,7 @@
|
|||
/*
|
||||
Minetest
|
||||
Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
Copyright (C) 2013 Kahrl <kahrl@gmx.net>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
// Luanti
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
// Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
// Copyright (C) 2013 Kahrl <kahrl@gmx.net>
|
||||
|
||||
#include <fstream>
|
||||
#include <iterator>
|
||||
|
@ -322,9 +307,6 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
// Are shaders even enabled?
|
||||
bool m_enabled;
|
||||
|
||||
// The id of the thread that is allowed to use irrlicht directly
|
||||
std::thread::id m_main_thread;
|
||||
|
||||
|
@ -363,12 +345,6 @@ ShaderSource::ShaderSource()
|
|||
// Add a dummy ShaderInfo as the first index, named ""
|
||||
m_shaderinfo_cache.emplace_back();
|
||||
|
||||
m_enabled = g_settings->getBool("enable_shaders");
|
||||
if (!m_enabled) {
|
||||
warningstream << "You are running " PROJECT_NAME_C " with shaders disabled, "
|
||||
"this is not a recommended configuration." << std::endl;
|
||||
}
|
||||
|
||||
// Add main global constant setter
|
||||
addShaderConstantSetterFactory(new MainShaderConstantSetterFactory());
|
||||
}
|
||||
|
@ -377,11 +353,9 @@ ShaderSource::~ShaderSource()
|
|||
{
|
||||
MutexAutoLock lock(m_shaderinfo_cache_mutex);
|
||||
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
// Delete materials
|
||||
auto *gpu = RenderingEngine::get_video_driver()->getGPUProgrammingServices();
|
||||
assert(gpu);
|
||||
for (ShaderInfo &i : m_shaderinfo_cache) {
|
||||
if (!i.name.empty())
|
||||
gpu->deleteShaderMaterial(i.material);
|
||||
|
@ -510,11 +484,9 @@ void ShaderSource::rebuildShaders()
|
|||
{
|
||||
MutexAutoLock lock(m_shaderinfo_cache_mutex);
|
||||
|
||||
if (!m_enabled)
|
||||
return;
|
||||
|
||||
// Delete materials
|
||||
auto *gpu = RenderingEngine::get_video_driver()->getGPUProgrammingServices();
|
||||
assert(gpu);
|
||||
for (ShaderInfo &i : m_shaderinfo_cache) {
|
||||
if (!i.name.empty()) {
|
||||
gpu->deleteShaderMaterial(i.material);
|
||||
|
@ -561,14 +533,14 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
|
|||
}
|
||||
shaderinfo.material = shaderinfo.base_material;
|
||||
|
||||
if (!m_enabled)
|
||||
video::IVideoDriver *driver = RenderingEngine::get_video_driver();
|
||||
// The null driver doesn't support shaders (duh), but we can pretend it does.
|
||||
if (driver->getDriverType() == video::EDT_NULL)
|
||||
return shaderinfo;
|
||||
|
||||
video::IVideoDriver *driver = RenderingEngine::get_video_driver();
|
||||
auto *gpu = driver->getGPUProgrammingServices();
|
||||
if (!driver->queryFeature(video::EVDF_ARB_GLSL) || !gpu) {
|
||||
throw ShaderException(gettext("Shaders are enabled but GLSL is not "
|
||||
"supported by the driver."));
|
||||
throw ShaderException(gettext("GLSL is not supported by the driver"));
|
||||
}
|
||||
|
||||
// Create shaders header
|
||||
|
@ -764,19 +736,18 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
|
|||
shaders_header << "#define VOLUMETRIC_DEPTH_ATTENUATION 1\n";
|
||||
}
|
||||
|
||||
shaders_header << "#line 0\n"; // reset the line counter for meaningful diagnostics
|
||||
|
||||
std::string common_header = shaders_header.str();
|
||||
const char *final_header = "#line 0\n"; // reset the line counter for meaningful diagnostics
|
||||
|
||||
std::string vertex_shader = m_sourcecache.getOrLoad(name, "opengl_vertex.glsl");
|
||||
std::string fragment_shader = m_sourcecache.getOrLoad(name, "opengl_fragment.glsl");
|
||||
std::string geometry_shader = m_sourcecache.getOrLoad(name, "opengl_geometry.glsl");
|
||||
|
||||
vertex_shader = common_header + vertex_header + vertex_shader;
|
||||
fragment_shader = common_header + fragment_header + fragment_shader;
|
||||
vertex_shader = common_header + vertex_header + final_header + vertex_shader;
|
||||
fragment_shader = common_header + fragment_header + final_header + fragment_shader;
|
||||
const char *geometry_shader_ptr = nullptr; // optional
|
||||
if (!geometry_shader.empty()) {
|
||||
geometry_shader = common_header + geometry_header + geometry_shader;
|
||||
geometry_shader = common_header + geometry_header + final_header + geometry_shader;
|
||||
geometry_shader_ptr = geometry_shader.c_str();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue