Flutter Impeller
impeller::SurfaceGLES Class Referencefinal

#include <surface_gles.h>

Inheritance diagram for impeller::SurfaceGLES:
impeller::Surface

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 ISizeGetSize () const
 
bool IsValid () const
 
const RenderTargetGetRenderTarget () const
 

Static Public Member Functions

static std::unique_ptr< SurfaceWrapFBO (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 ( )
overridedefault

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 }
static ContextGLES & Cast(Context &base)
Definition: backend_cast.h:13
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.
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....
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: