]> git.lizzy.rs Git - minetest.git/commitdiff
Clear exposure compensation state textures on creation (#13151)
authorx2048 <codeforsmile@gmail.com>
Sun, 22 Jan 2023 23:18:48 +0000 (00:18 +0100)
committerGitHub <noreply@github.com>
Sun, 22 Jan 2023 23:18:48 +0000 (00:18 +0100)
src/client/render/pipeline.cpp
src/client/render/pipeline.h
src/client/render/secondstage.cpp

index cc275a7ef0f2c26dc3a503ac92505a40ce6724d1..c6dec2542756811b18f35d60cc5c9cf4f147112b 100644 (file)
@@ -40,7 +40,7 @@ video::ITexture *TextureBuffer::getTexture(u8 index)
 }
 
 
-void TextureBuffer::setTexture(u8 index, core::dimension2du size, const std::string &name, video::ECOLOR_FORMAT format)
+void TextureBuffer::setTexture(u8 index, core::dimension2du size, const std::string &name, video::ECOLOR_FORMAT format, bool clear)
 {
        assert(index != NO_DEPTH_TEXTURE);
 
@@ -54,9 +54,10 @@ void TextureBuffer::setTexture(u8 index, core::dimension2du size, const std::str
        definition.size = size;
        definition.name = name;
        definition.format = format;
+       definition.clear = clear;
 }
 
-void TextureBuffer::setTexture(u8 index, v2f scale_factor, const std::string &name, video::ECOLOR_FORMAT format)
+void TextureBuffer::setTexture(u8 index, v2f scale_factor, const std::string &name, video::ECOLOR_FORMAT format, bool clear)
 {
        assert(index != NO_DEPTH_TEXTURE);
 
@@ -70,6 +71,7 @@ void TextureBuffer::setTexture(u8 index, v2f scale_factor, const std::string &na
        definition.scale_factor = scale_factor;
        definition.name = name;
        definition.format = format;
+       definition.clear = clear;
 }
 
 void TextureBuffer::reset(PipelineContext &context)
@@ -135,10 +137,20 @@ bool TextureBuffer::ensureTexture(video::ITexture **texture, const TextureDefini
        if (*texture)
                m_driver->removeTexture(*texture);
 
-       if (definition.valid)
-               *texture = m_driver->addRenderTargetTexture(size, definition.name.c_str(), definition.format);
-       else
+       if (definition.valid) {
+               if (definition.clear) {
+                       video::IImage *image = m_driver->createImage(definition.format, size);
+                       image->fill(0u);
+                       *texture = m_driver->addTexture(definition.name.c_str(), image);
+                       image->drop();
+               }
+               else {
+                       *texture = m_driver->addRenderTargetTexture(size, definition.name.c_str(), definition.format);
+               }
+       }
+       else {
                *texture = nullptr;
+       }
 
        return true;
 }
index bfdef2931c7c07c1210d31e730274651cb56033b..f446773ba8fb5968852fa74638ab5e40af11f6be 100644 (file)
@@ -126,7 +126,7 @@ class TextureBuffer : public RenderSource
         * @param name unique name of the texture
         * @param format color format
         */
-       void setTexture(u8 index, core::dimension2du size, const std::string& name, video::ECOLOR_FORMAT format);
+       void setTexture(u8 index, core::dimension2du size, const std::string& name, video::ECOLOR_FORMAT format, bool clear = false);
 
        /**
         * Configure relative-size texture for the specific index
@@ -136,7 +136,7 @@ class TextureBuffer : public RenderSource
         * @param name unique name of the texture
         * @param format color format
         */
-       void setTexture(u8 index, v2f scale_factor, const std::string& name, video::ECOLOR_FORMAT format);
+       void setTexture(u8 index, v2f scale_factor, const std::string& name, video::ECOLOR_FORMAT format, bool clear = false);
 
        virtual u8 getTextureCount() override { return m_textures.size(); }
        virtual video::ITexture *getTexture(u8 index) override;
@@ -150,6 +150,7 @@ class TextureBuffer : public RenderSource
                bool valid { false };
                bool fixed_size { false };
                bool dirty { false };
+               bool clear { false };
                v2f scale_factor;
                core::dimension2du size;
                std::string name;
index 395a0fe6bc14fadd6e6c473eb7d1262ea7d2edf6..1575cfb1fff4c7eec2a54cab300e02efc50bd364 100644 (file)
@@ -121,8 +121,8 @@ RenderStep *addPostProcessing(RenderPipeline *pipeline, RenderStep *previousStep
        static const u8 TEXTURE_BLOOM_UP = 20;
 
        buffer->setTexture(TEXTURE_COLOR, scale, "3d_render", color_format);
-       buffer->setTexture(TEXTURE_EXPOSURE_1, core::dimension2du(1,1), "exposure_1", color_format);
-       buffer->setTexture(TEXTURE_EXPOSURE_2, core::dimension2du(1,1), "exposure_2", color_format);
+       buffer->setTexture(TEXTURE_EXPOSURE_1, core::dimension2du(1,1), "exposure_1", color_format, /*clear:*/ true);
+       buffer->setTexture(TEXTURE_EXPOSURE_2, core::dimension2du(1,1), "exposure_2", color_format, /*clear:*/ true);
        buffer->setTexture(TEXTURE_DEPTH, scale, "3d_depthmap", depth_format);
 
        // attach buffer to the previous step