Flutter Impeller
impeller::RenderTargetCache Class Reference

An implementation of the [RenderTargetAllocator] that caches all allocated texture data for one frame. More...

#include <render_target_cache.h>

Inheritance diagram for impeller::RenderTargetCache:
impeller::RenderTargetAllocator

Public Member Functions

 RenderTargetCache (std::shared_ptr< Allocator > allocator)
 
 ~RenderTargetCache ()=default
 
void Start () override
 Mark the beginning of a frame workload. More...
 
void End () override
 Mark the end of a frame workload. More...
 
std::shared_ptr< TextureCreateTexture (const TextureDescriptor &desc) override
 Create a new render target texture, or recycle a previously allocated render target texture. More...
 
size_t CachedTextureCount () const
 
- Public Member Functions inherited from impeller::RenderTargetAllocator
 RenderTargetAllocator (std::shared_ptr< Allocator > allocator)
 
virtual ~RenderTargetAllocator ()=default
 

Detailed Description

An implementation of the [RenderTargetAllocator] that caches all allocated texture data for one frame.

Any textures unused after a frame are immediately discarded.

Definition at line 15 of file render_target_cache.h.

Constructor & Destructor Documentation

◆ RenderTargetCache()

impeller::RenderTargetCache::RenderTargetCache ( std::shared_ptr< Allocator allocator)
explicit

Definition at line 10 of file render_target_cache.cc.

11  : RenderTargetAllocator(std::move(allocator)) {}

◆ ~RenderTargetCache()

impeller::RenderTargetCache::~RenderTargetCache ( )
default

Member Function Documentation

◆ CachedTextureCount()

size_t impeller::RenderTargetCache::CachedTextureCount ( ) const

Definition at line 30 of file render_target_cache.cc.

30  {
31  return texture_data_.size();
32 }

◆ CreateTexture()

std::shared_ptr< Texture > impeller::RenderTargetCache::CreateTexture ( const TextureDescriptor desc)
overridevirtual

Create a new render target texture, or recycle a previously allocated render target texture.

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 34 of file render_target_cache.cc.

35  {
36  FML_DCHECK(desc.storage_mode != StorageMode::kHostVisible);
37  FML_DCHECK(desc.usage &
39 
40  for (auto& td : texture_data_) {
41  const auto other_desc = td.texture->GetTextureDescriptor();
42  FML_DCHECK(td.texture != nullptr);
43  if (!td.used_this_frame && desc == other_desc) {
44  td.used_this_frame = true;
45  return td.texture;
46  }
47  }
48  auto result = RenderTargetAllocator::CreateTexture(desc);
49  if (result == nullptr) {
50  return result;
51  }
52  texture_data_.push_back(
53  TextureData{.used_this_frame = true, .texture = result});
54  return result;
55 }

References impeller::RenderTargetAllocator::CreateTexture(), impeller::kHostVisible, impeller::kRenderTarget, impeller::TextureDescriptor::storage_mode, and impeller::TextureDescriptor::usage.

◆ End()

void impeller::RenderTargetCache::End ( )
overridevirtual

Mark the end of a frame workload.

   This may be used to deallocate any unused textures. 

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 19 of file render_target_cache.cc.

19  {
20  std::vector<TextureData> retain;
21 
22  for (const auto& td : texture_data_) {
23  if (td.used_this_frame) {
24  retain.push_back(td);
25  }
26  }
27  texture_data_.swap(retain);
28 }

◆ Start()

void impeller::RenderTargetCache::Start ( )
overridevirtual

Mark the beginning of a frame workload.

  This may be used to reset any tracking state on whether or not a
  particular texture instance is still in use. 

Reimplemented from impeller::RenderTargetAllocator.

Definition at line 13 of file render_target_cache.cc.

13  {
14  for (auto& td : texture_data_) {
15  td.used_this_frame = false;
16  }
17 }

The documentation for this class was generated from the following files:
impeller::TextureUsageMask
uint64_t TextureUsageMask
Definition: formats.h:274
impeller::TextureUsage::kRenderTarget
@ kRenderTarget
impeller::RenderTargetAllocator::RenderTargetAllocator
RenderTargetAllocator(std::shared_ptr< Allocator > allocator)
Definition: render_target.cc:17
impeller::StorageMode::kHostVisible
@ kHostVisible
impeller::RenderTargetAllocator::CreateTexture
virtual std::shared_ptr< Texture > CreateTexture(const TextureDescriptor &desc)
Create a new render target texture, or recycle a previously allocated render target texture.
Definition: render_target.cc:25