Fix a memleak pointed by @Zeno- in MeshUpdateQueue
[oweals/minetest.git] / src / shader.cpp
index 170b0354d27574a9b386b46c4171b11b9a14f329..66f32c9a1846bc6e6439f63829841bbc72306698 100644 (file)
@@ -340,7 +340,7 @@ IWritableShaderSource* createShaderSource(IrrlichtDevice *device)
 /*
        Generate shader given the shader name.
 */
-ShaderInfo generate_shader(std::string name,
+ShaderInfo generate_shader(const std::string &name,
                u8 material_type, u8 drawtype,
                IrrlichtDevice *device, std::vector<ShaderCallback *> &callbacks,
                const std::vector<IShaderConstantSetterFactory*> &setter_factories,
@@ -525,7 +525,7 @@ void ShaderSource::rebuildShaders()
 }
 
 
-ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
+ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtype,
                IrrlichtDevice *device, std::vector<ShaderCallback *> &callbacks,
                const std::vector<IShaderConstantSetterFactory*> &setter_factories,
                SourceShaderCache *sourcecache)
@@ -543,7 +543,7 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
                        shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
                        break;
                case TILE_MATERIAL_LIQUID_TRANSPARENT:
-                       shaderinfo.base_material = video::EMT_TRANSPARENT_VERTEX_ALPHA;
+                       shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
                        break;
                case TILE_MATERIAL_LIQUID_OPAQUE:
                        shaderinfo.base_material = video::EMT_SOLID;
@@ -557,7 +557,7 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
        }
 
        bool enable_shaders = g_settings->getBool("enable_shaders");
-       if(!enable_shaders)
+       if (!enable_shaders)
                return shaderinfo;
 
        video::IVideoDriver* driver = device->getVideoDriver();
@@ -751,6 +751,10 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
        if (g_settings->getBool("tone_mapping"))
                shaders_header += "#define ENABLE_TONE_MAPPING\n";
 
+       shaders_header += "#define FOG_START ";
+       shaders_header += ftos(rangelim(g_settings->getFloat("fog_start"), 0.0f, 0.99f));
+       shaders_header += "\n";
+
        // Call addHighLevelShaderMaterial() or addShaderMaterial()
        const c8* vertex_program_ptr = 0;
        const c8* pixel_program_ptr = 0;