| Flutter Impeller |

Public Types | Public Member Functions | Static Public Member Functions | List of all members
impeller::TextureMTL Class Referencefinal

`#include <texture_mtl.h>`

Inheritance diagram for impeller::TextureMTL:

## 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 TextureDescriptor & | GetTextureDescriptor () const
void | SetCoordinateSystem (TextureCoordinateSystem coordinate_system)
TextureCoordinateSystem | GetCoordinateSystem () const
virtual Scalar | GetYCoordScale () const
bool | NeedsMipmapGeneration () const

## Static Public Member Functions
static std::shared_ptr< TextureMTL > | Wrapper (TextureDescriptor desc, id< MTLTexture > texture, std::function< void()> deletion_proc=nullptr)
static std::shared_ptr< TextureMTL > | Create (TextureDescriptor desc, id< MTLTexture > texture)
Static Public Member Functions inherited from impeller::BackendCast< TextureMTL, Texture >
static TextureMTL & | Cast (Texture &base)
static const TextureMTL & | Cast (const Texture &base)
static TextureMTL * | Cast (Texture *base)
static const TextureMTL * | Cast (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/renderer/backend/metal/texture_mtl.h
- impeller/renderer/backend/metal/texture_mtl.mm

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