Flutter Impeller
surface_gles.cc
Go to the documentation of this file.
1
// Copyright 2013 The Flutter Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#include "
impeller/renderer/backend/gles/surface_gles.h
"
6
7
#include "flutter/fml/trace_event.h"
8
#include "
impeller/base/config.h
"
9
#include "
impeller/renderer/backend/gles/context_gles.h
"
10
#include "
impeller/renderer/backend/gles/texture_gles.h
"
11
12
namespace
impeller
{
13
14
std::unique_ptr<Surface>
SurfaceGLES::WrapFBO
(
15
const
std::shared_ptr<Context>& context,
16
SwapCallback
swap_callback,
17
GLuint fbo,
18
PixelFormat
color_format,
19
ISize
fbo_size) {
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
= std::make_shared<TextureGLES>(
38
gl_context.GetReactor(), color0_tex,
TextureGLES::IsWrapped::kWrapped
);
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 = std::make_shared<TextureGLES>(
51
gl_context.GetReactor(), depth_stencil_texture_desc,
52
TextureGLES::IsWrapped::kWrapped
);
53
54
DepthAttachment
depth0;
55
depth0.
clear_depth
= 0;
56
depth0.
texture
= depth_stencil_tex;
57
depth0.
load_action
=
LoadAction::kClear
;
58
depth0.
store_action
=
StoreAction::kDontCare
;
59
60
StencilAttachment
stencil0;
61
stencil0.
clear_stencil
= 0;
62
stencil0.
texture
= depth_stencil_tex;
63
stencil0.
load_action
=
LoadAction::kClear
;
64
stencil0.
store_action
=
StoreAction::kDontCare
;
65
66
RenderTarget
render_target_desc;
67
68
render_target_desc.
SetColorAttachment
(color0, 0u);
69
render_target_desc.
SetDepthAttachment
(depth0);
70
render_target_desc.
SetStencilAttachment
(stencil0);
71
72
#ifdef IMPELLER_DEBUG
73
gl_context.GetGPUTracer()->RecordRasterThread();
74
#endif // IMPELLER_DEBUG
75
76
return
std::unique_ptr<SurfaceGLES>(
77
new
SurfaceGLES
(std::move(swap_callback), render_target_desc));
78
}
79
80
SurfaceGLES::SurfaceGLES(SwapCallback swap_callback,
81
const
RenderTarget
& target_desc)
82
:
Surface
(target_desc), swap_callback_(
std
::move(swap_callback)) {}
83
84
// |Surface|
85
SurfaceGLES::~SurfaceGLES
() =
default
;
86
87
// |Surface|
88
bool
SurfaceGLES::Present()
const
{
89
return
swap_callback_ ? swap_callback_() : false;
90
}
91
92
}
// namespace impeller
impeller::Attachment::store_action
StoreAction store_action
Definition:
formats.h:642
impeller::ColorAttachment
Definition:
formats.h:647
impeller::TextureDescriptor::format
PixelFormat format
Definition:
texture_descriptor.h:40
impeller::RenderTarget::SetColorAttachment
RenderTarget & SetColorAttachment(const ColorAttachment &attachment, size_t index)
Definition:
render_target.cc:169
texture_gles.h
context_gles.h
impeller::StoreAction::kDontCare
@ kDontCare
impeller::TextureUsage::kRenderTarget
@ kRenderTarget
impeller::TextureDescriptor::sample_count
SampleCount sample_count
Definition:
texture_descriptor.h:44
impeller::TextureDescriptor::usage
TextureUsageMask usage
Definition:
texture_descriptor.h:43
surface_gles.h
impeller::Surface
Definition:
surface.h:18
impeller::PixelFormat
PixelFormat
The Pixel formats supported by Impeller. The naming convention denotes the usage of the component,...
Definition:
formats.h:100
impeller::TextureDescriptor::type
TextureType type
Definition:
texture_descriptor.h:39
impeller::StencilAttachment
Definition:
formats.h:655
impeller::Color::DarkSlateGray
static constexpr Color DarkSlateGray()
Definition:
color.h:410
impeller::TSize< int64_t >
impeller::LoadAction::kClear
@ kClear
impeller::ColorAttachment::clear_color
Color clear_color
Definition:
formats.h:648
impeller::Attachment::texture
std::shared_ptr< Texture > texture
Definition:
formats.h:639
impeller::StorageMode::kDevicePrivate
@ kDevicePrivate
impeller::RenderTarget
Definition:
render_target.h:38
impeller::StoreAction::kStore
@ kStore
impeller::StencilAttachment::clear_stencil
uint32_t clear_stencil
Definition:
formats.h:656
impeller::TextureType::kTexture2D
@ kTexture2D
impeller::TextureDescriptor::size
ISize size
Definition:
texture_descriptor.h:41
impeller::RenderTarget::SetStencilAttachment
RenderTarget & SetStencilAttachment(std::optional< StencilAttachment > attachment)
Definition:
render_target.cc:188
std
Definition:
comparable.h:95
impeller::SurfaceGLES::SwapCallback
std::function< bool(void)> SwapCallback
Definition:
surface_gles.h:20
impeller::BackendCast< ContextGLES, Context >::Cast
static ContextGLES & Cast(Context &base)
Definition:
backend_cast.h:13
impeller::Attachment::load_action
LoadAction load_action
Definition:
formats.h:641
impeller::SurfaceGLES
Definition:
surface_gles.h:18
impeller::TextureGLES::IsWrapped::kWrapped
@ kWrapped
impeller::DepthAttachment::clear_depth
double clear_depth
Definition:
formats.h:652
impeller::SampleCount::kCount1
@ kCount1
impeller::TextureDescriptor::storage_mode
StorageMode storage_mode
Definition:
texture_descriptor.h:38
impeller::SurfaceGLES::WrapFBO
static std::unique_ptr< Surface > WrapFBO(const std::shared_ptr< Context > &context, SwapCallback swap_callback, GLuint fbo, PixelFormat color_format, ISize fbo_size)
Definition:
surface_gles.cc:14
impeller::DepthAttachment
Definition:
formats.h:651
impeller::TextureDescriptor
A lightweight object that describes the attributes of a texture that can then used an allocator to cr...
Definition:
texture_descriptor.h:37
impeller::RenderTarget::SetDepthAttachment
RenderTarget & SetDepthAttachment(std::optional< DepthAttachment > attachment)
Definition:
render_target.cc:178
impeller::SurfaceGLES::~SurfaceGLES
~SurfaceGLES() override
config.h
impeller
Definition:
aiks_blur_unittests.cc:20
impeller
renderer
backend
gles
surface_gles.cc
Generated by
1.8.17