Flutter Impeller
impeller::TextureMTL Class Referencefinal

#include <texture_mtl.h>

Inheritance diagram for impeller::TextureMTL:
impeller::Texture impeller::BackendCast< TextureMTL, Texture >

Public Types

using AcquireTextureProc = std::function< id< MTLTexture >()>
 This callback needs to always return the same texture when called multiple times. More...
 

Public Member Functions

 TextureMTL (TextureDescriptor desc, const AcquireTextureProc &aquire_proc, bool wrapped=false, bool drawable=false)
 
 ~TextureMTL () override
 
id< MTLTexture > GetMTLTexture () const
 
bool IsWrapped () const
 
bool IsDrawable () const
 Whether or not this texture is wrapping a Metal drawable. More...
 
bool IsValid () const override
 
bool GenerateMipmap (id< MTLBlitCommandEncoder > encoder)
 
- Public Member Functions inherited from impeller::Texture
virtual ~Texture ()
 
bool SetContents (const uint8_t *contents, size_t length, size_t slice=0, bool is_opaque=false)
 
bool SetContents (std::shared_ptr< const fml::Mapping > mapping, size_t slice=0, bool is_opaque=false)
 
bool IsOpaque () const
 
size_t GetMipCount () const
 
const TextureDescriptorGetTextureDescriptor () const
 
void SetCoordinateSystem (TextureCoordinateSystem coordinate_system)
 
TextureCoordinateSystem GetCoordinateSystem () const
 
virtual Scalar GetYCoordScale () const
 
bool NeedsMipmapGeneration () const
 

Static Public Member Functions

static std::shared_ptr< TextureMTLWrapper (TextureDescriptor desc, id< MTLTexture > texture, std::function< void()> deletion_proc=nullptr)
 
static std::shared_ptr< TextureMTLCreate (TextureDescriptor desc, id< MTLTexture > texture)
 
- Static Public Member Functions inherited from impeller::BackendCast< TextureMTL, Texture >
static TextureMTLCast (Texture &base)
 
static const TextureMTLCast (const Texture &base)
 
static TextureMTLCast (Texture *base)
 
static const TextureMTLCast (const Texture *base)
 

Additional Inherited Members

- Protected Member Functions inherited from impeller::Texture
 Texture (TextureDescriptor desc)
 
- Protected Attributes inherited from impeller::Texture
bool mipmap_generated_ = false
 

Detailed Description

Definition at line 16 of file texture_mtl.h.

Member Typedef Documentation

◆ AcquireTextureProc

using impeller::TextureMTL::AcquireTextureProc = std::function<id<MTLTexture>()>

This callback needs to always return the same texture when called multiple times.

Definition at line 21 of file texture_mtl.h.

Constructor & Destructor Documentation

◆ TextureMTL()

impeller::TextureMTL::TextureMTL ( TextureDescriptor  desc,
const AcquireTextureProc aquire_proc,
bool  wrapped = false,
bool  drawable = false 
)

Definition at line 21 of file texture_mtl.mm.

25  : Texture(p_desc), aquire_proc_(aquire_proc), is_drawable_(drawable) {
26  const auto& desc = GetTextureDescriptor();
27 
28  if (!desc.IsValid() || !aquire_proc) {
29  return;
30  }
31 
32  if (desc.size != GetSize()) {
33  VALIDATION_LOG << "The texture and its descriptor disagree about its size.";
34  return;
35  }
36 
37  is_wrapped_ = wrapped;
38  is_valid_ = true;
39 }

References impeller::Texture::GetTextureDescriptor(), impeller::TextureDescriptor::IsValid(), impeller::TextureDescriptor::size, and VALIDATION_LOG.

Referenced by Wrapper().

◆ ~TextureMTL()

impeller::TextureMTL::~TextureMTL ( )
override

Definition at line 63 of file texture_mtl.mm.

63  {
64 #ifdef IMPELLER_DEBUG
65  if (debug_allocator_) {
66  auto desc = GetTextureDescriptor();
67  if (desc.storage_mode == StorageMode::kDeviceTransient) {
68  return;
69  }
70  debug_allocator_->Decrement(desc.GetByteSizeOfBaseMipLevel());
71  }
72 #endif // IMPELLER_DEBUG
73 }

References impeller::TextureDescriptor::GetByteSizeOfBaseMipLevel(), impeller::Texture::GetTextureDescriptor(), impeller::kDeviceTransient, and impeller::TextureDescriptor::storage_mode.

Member Function Documentation

◆ Create()

std::shared_ptr< TextureMTL > impeller::TextureMTL::Create ( TextureDescriptor  desc,
id< MTLTexture >  texture 
)
static

Definition at line 58 of file texture_mtl.mm.

59  {
60  return std::make_shared<TextureMTL>(desc, [texture]() { return texture; });
61 }

Referenced by impeller::WrapTextureWithRenderTarget().

◆ GenerateMipmap()

bool impeller::TextureMTL::GenerateMipmap ( id< MTLBlitCommandEncoder >  encoder)

Definition at line 150 of file texture_mtl.mm.

150  {
151  if (is_drawable_) {
152  return false;
153  }
154 
155  auto texture = aquire_proc_();
156  if (!texture) {
157  return false;
158  }
159 
160  [encoder generateMipmapsForTexture:texture];
161  mipmap_generated_ = true;
162 
163  return true;
164 }

References impeller::Texture::mipmap_generated_.

◆ GetMTLTexture()

id< MTLTexture > impeller::TextureMTL::GetMTLTexture ( ) const

Definition at line 134 of file texture_mtl.mm.

134  {
135  return aquire_proc_();
136 }

Referenced by impeller::ConfigureAttachment(), and impeller::ConfigureResolveTextureAttachment().

◆ IsDrawable()

bool impeller::TextureMTL::IsDrawable ( ) const

Whether or not this texture is wrapping a Metal drawable.

Definition at line 146 of file texture_mtl.mm.

146  {
147  return is_drawable_;
148 }

◆ IsValid()

bool impeller::TextureMTL::IsValid ( ) const
overridevirtual

Implements impeller::Texture.

Definition at line 138 of file texture_mtl.mm.

138  {
139  return is_valid_;
140 }

◆ IsWrapped()

bool impeller::TextureMTL::IsWrapped ( ) const

Definition at line 142 of file texture_mtl.mm.

142  {
143  return is_wrapped_;
144 }

◆ Wrapper()

std::shared_ptr< TextureMTL > impeller::TextureMTL::Wrapper ( TextureDescriptor  desc,
id< MTLTexture >  texture,
std::function< void()>  deletion_proc = nullptr 
)
static

Definition at line 41 of file texture_mtl.mm.

44  {
45  if (deletion_proc) {
46  return std::shared_ptr<TextureMTL>(
47  new TextureMTL(
48  desc, [texture]() { return texture; }, true),
49  [deletion_proc = std::move(deletion_proc)](TextureMTL* t) {
50  deletion_proc();
51  delete t;
52  });
53  }
54  return std::shared_ptr<TextureMTL>(
55  new TextureMTL(desc, [texture]() { return texture; }, true));
56 }

References TextureMTL().

Referenced by impeller::SurfaceMTL::MakeFromTexture(), impeller::WrapperMTL(), and impeller::WrapTextureMTL().


The documentation for this class was generated from the following files:
impeller::Texture::GetTextureDescriptor
const TextureDescriptor & GetTextureDescriptor() const
Definition: texture.cc:57
impeller::TextureMTL::TextureMTL
TextureMTL(TextureDescriptor desc, const AcquireTextureProc &aquire_proc, bool wrapped=false, bool drawable=false)
Definition: texture_mtl.mm:21
impeller::StorageMode::kDeviceTransient
@ kDeviceTransient
impeller::Texture::mipmap_generated_
bool mipmap_generated_
Definition: texture.h:70
VALIDATION_LOG
#define VALIDATION_LOG
Definition: validation.h:91
impeller::Texture::Texture
Texture(TextureDescriptor desc)
Definition: texture.cc:11