}
-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);
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);
definition.scale_factor = scale_factor;
definition.name = name;
definition.format = format;
+ definition.clear = clear;
}
void TextureBuffer::reset(PipelineContext &context)
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;
}
* @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
* @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;
bool valid { false };
bool fixed_size { false };
bool dirty { false };
+ bool clear { false };
v2f scale_factor;
core::dimension2du size;
std::string name;
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