diff options
author | x2048 <codeforsmile@gmail.com> | 2023-01-23 00:18:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-23 00:18:48 +0100 |
commit | 6f5703baf1737ca1d7dd70982e878fd83d288cdd (patch) | |
tree | 04fee7199605b55dac6b265525127fd1b4e73d9f /src/client/render/pipeline.cpp | |
parent | cf5add14728f6f00eec0cc8221050ba91e6a9646 (diff) | |
download | minetest-6f5703baf1737ca1d7dd70982e878fd83d288cdd.tar.xz |
Clear exposure compensation state textures on creation (#13151)
Diffstat (limited to 'src/client/render/pipeline.cpp')
-rw-r--r-- | src/client/render/pipeline.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/client/render/pipeline.cpp b/src/client/render/pipeline.cpp index cc275a7ef..c6dec2542 100644 --- a/src/client/render/pipeline.cpp +++ b/src/client/render/pipeline.cpp @@ -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; } |