| Flutter Impeller |

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

`#include <surface_gles.h>`

Inheritance diagram for impeller::SurfaceGLES:

## Public Types
using | SwapCallback = std::function< bool(void)>

## Public Member Functions
| ~SurfaceGLES () override
Public Member Functions inherited from impeller::Surface
| Surface ()
| Surface (const RenderTarget &target_desc)
virtual | ~Surface ()
const ISize & | GetSize () const
bool | IsValid () const
const RenderTarget & | GetRenderTarget () const

## Static Public Member Functions
static std::unique_ptr< Surface > | WrapFBO (const std::shared_ptr< Context > &context, SwapCallback swap_callback, GLuint fbo, PixelFormat color_format, ISize fbo_size)

## Detailed Description

Definition at line 17 of file surface_gles.h.

## Member Typedef Documentation

## ◆ SwapCallback

using impeller::SurfaceGLES::SwapCallback = std::function<bool(void)>

Definition at line 19 of file surface_gles.h.

## Constructor & Destructor Documentation

## ◆ ~SurfaceGLES()

impeller::SurfaceGLES::~SurfaceGLES | ( |  | ) |
| override default

## Member Function Documentation

## ◆ WrapFBO()

std::unique_ptr< Surface > impeller::SurfaceGLES::WrapFBO | ( | const std::shared_ptr< Context > & | context,
|  | SwapCallback | swap_callback,
|  | GLuint | fbo,
|  | PixelFormat | color_format,
|  | ISize | fbo_size
| ) |  |
| static

Definition at line 14 of file surface_gles.cc.

19 {
20 TRACE_EVENT0("impeller", "SurfaceGLES::WrapOnScreenFBO");
21
22 if (context == nullptr || !context->IsValid() || !swap_callback) {
23 return nullptr;
24 }
25
26 const auto& gl_context = ContextGLES::Cast(*context);
27
28 TextureDescriptor color0_tex;
29 color0_tex.type = TextureType::kTexture2D;
30 color0_tex.format = color_format;
31 color0_tex.size = fbo_size;
32 color0_tex.usage = TextureUsage::kRenderTarget;
33 color0_tex.sample_count = SampleCount::kCount1;
34 color0_tex.storage_mode = StorageMode::kDevicePrivate;
35
36 ColorAttachment color0;
37 color0.texture =
38 TextureGLES::WrapFBO(gl_context.GetReactor(), color0_tex, fbo);
39 color0.clear_color = Color::DarkSlateGray();
40 color0.load_action = LoadAction::kClear;
41 color0.store_action = StoreAction::kStore;
42
43 TextureDescriptor depth_stencil_texture_desc;
44 depth_stencil_texture_desc.type = TextureType::kTexture2D;
45 depth_stencil_texture_desc.format = color_format;
46 depth_stencil_texture_desc.size = fbo_size;
47 depth_stencil_texture_desc.usage = TextureUsage::kRenderTarget;
48 depth_stencil_texture_desc.sample_count = SampleCount::kCount1;
49
50 auto depth_stencil_tex =
51 TextureGLES::CreatePlaceholder(gl_context.GetReactor(), //
52 depth_stencil_texture_desc //
53 );
54
55 DepthAttachment depth0;
56 depth0.clear_depth = 0;
57 depth0.texture = depth_stencil_tex;
58 depth0.load_action = LoadAction::kClear;
59 depth0.store_action = StoreAction::kDontCare;
60
61 StencilAttachment stencil0;
62 stencil0.clear_stencil = 0;
63 stencil0.texture = depth_stencil_tex;
64 stencil0.load_action = LoadAction::kClear;
65 stencil0.store_action = StoreAction::kDontCare;
66
67 RenderTarget render_target_desc;
68
69 render_target_desc.SetColorAttachment(color0, 0u);
70 render_target_desc.SetDepthAttachment(depth0);
71 render_target_desc.SetStencilAttachment(stencil0);
72
73 #ifdef IMPELLER_DEBUG
74 gl_context.GetGPUTracer()->RecordRasterThread();
75 #endif // IMPELLER_DEBUG
76
77 // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
78 return std::unique_ptr<SurfaceGLES>(
79 new SurfaceGLES(std::move(swap_callback), render_target_desc));
80 }
impeller::BackendCast< ContextGLES, Context >::Cast
static ContextGLES & Cast(Context &base)
Definition: backend_cast.h:13
impeller::TextureGLES::WrapFBO
static std::shared_ptr< TextureGLES > WrapFBO(std::shared_ptr< ReactorGLES > reactor, TextureDescriptor desc, GLuint fbo)
Create a texture by wrapping an external framebuffer object whose lifecycle is owned by the caller.
Definition: texture_gles.cc:146
impeller::TextureGLES::CreatePlaceholder
static std::shared_ptr< TextureGLES > CreatePlaceholder(std::shared_ptr< ReactorGLES > reactor, TextureDescriptor desc)
Create a "texture" that is never expected to be bound/unbound explicitly or initialized in any way....
Definition: texture_gles.cc:178
impeller::StorageMode::kDevicePrivate
@ kDevicePrivate
impeller::TextureType::kTexture2D
@ kTexture2D
impeller::LoadAction::kClear
@ kClear
impeller::StoreAction::kStore
@ kStore
impeller::StoreAction::kDontCare
@ kDontCare
impeller::TextureUsage::kRenderTarget
@ kRenderTarget
impeller::SampleCount::kCount1
@ kCount1
impeller::Color::DarkSlateGray
static constexpr Color DarkSlateGray()
Definition: color.h:418

References impeller::BackendCast< ContextGLES, Context >::Cast(), impeller::ColorAttachment::clear_color, impeller::DepthAttachment::clear_depth, impeller::StencilAttachment::clear_stencil, impeller::TextureGLES::CreatePlaceholder(), impeller::Color::DarkSlateGray(), impeller::TextureDescriptor::format, impeller::kClear, impeller::kCount1, impeller::kDevicePrivate, impeller::kDontCare, impeller::kRenderTarget, impeller::kStore, impeller::kTexture2D, impeller::Attachment::load_action, impeller::TextureDescriptor::sample_count, impeller::RenderTarget::SetColorAttachment(), impeller::RenderTarget::SetDepthAttachment(), impeller::RenderTarget::SetStencilAttachment(), impeller::TextureDescriptor::size, impeller::TextureDescriptor::storage_mode, impeller::Attachment::store_action, impeller::Attachment::texture, impeller::TextureDescriptor::type, impeller::TextureDescriptor::usage, and impeller::TextureGLES::WrapFBO().

The documentation for this class was generated from the following files:

- impeller/renderer/backend/gles/surface_gles.h
- impeller/renderer/backend/gles/surface_gles.cc