Flutter Impeller
display.h
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
#ifndef FLUTTER_IMPELLER_TOOLKIT_EGL_DISPLAY_H_
6
#define FLUTTER_IMPELLER_TOOLKIT_EGL_DISPLAY_H_
7
8
#include <memory>
9
10
#include "
impeller/toolkit/egl/config.h
"
11
#include "
impeller/toolkit/egl/egl.h
"
12
13
namespace
impeller
{
14
namespace
egl {
15
16
class
Context;
17
class
Surface;
18
19
//------------------------------------------------------------------------------
20
/// @brief A connection to an EGL display. Only one connection per
21
/// application instance is sufficient.
22
///
23
/// The display connection is used to first choose a config from
24
/// among the available, create a context from that config, and then
25
/// use that context with a surface on one (and only one) thread at
26
/// a time.
27
///
28
class
Display
{
29
public
:
30
Display
();
31
32
virtual
~Display
();
33
34
//----------------------------------------------------------------------------
35
/// @return True if the display connection is valid.
36
///
37
virtual
bool
IsValid
()
const
;
38
39
//----------------------------------------------------------------------------
40
/// @brief Choose a config that most closely matches a given descriptor.
41
/// If there are no matches, this method returns `nullptr`.
42
///
43
/// @param[in] config The configuration
44
///
45
/// @return A config that matches a descriptor if one is available.
46
/// `nullptr` otherwise.
47
///
48
virtual
std::unique_ptr<Config>
ChooseConfig
(
ConfigDescriptor
config)
const
;
49
50
//----------------------------------------------------------------------------
51
/// @brief Create a context with a supported config. The supported config
52
/// can be obtained via a successful call to `ChooseConfig`.
53
///
54
/// @param[in] config The configuration.
55
/// @param[in] share_context The share context. Context within the same
56
/// share-group use the same handle table. The
57
/// contexts should still only be used exclusively
58
/// on each thread however.
59
///
60
/// @return A context if one can be created. `nullptr` otherwise.
61
///
62
virtual
std::unique_ptr<Context>
CreateContext
(
const
Config
& config,
63
const
Context
* share_context);
64
65
//----------------------------------------------------------------------------
66
/// @brief Create a window surface. The window is an opaque pointer whose
67
/// value value is platform specific. For instance, ANativeWindow
68
/// on Android.
69
///
70
/// @param[in] config A valid configuration. One can be obtained via
71
/// `ChooseConfig`.
72
/// @param[in] window An opaque pointer to a platform specific window
73
/// handle.
74
///
75
/// @return A valid window surface if one can be created. `nullptr`
76
/// otherwise.
77
///
78
virtual
std::unique_ptr<Surface>
CreateWindowSurface
(
79
const
Config
& config,
80
EGLNativeWindowType window);
81
82
//----------------------------------------------------------------------------
83
/// @brief Create an offscreen pixelbuffer surface. These are of limited
84
/// use except in the context where applications need to render to
85
/// a texture in an offscreen context. In such cases, a 1x1 pixel
86
/// buffer surface is created to obtain a surface that can be used
87
/// to make the context current on the background thread.
88
///
89
/// @param[in] config The configuration
90
/// @param[in] width The width
91
/// @param[in] height The height
92
///
93
/// @return A valid pixel buffer surface if one can be created. `nullptr`
94
/// otherwise.
95
///
96
virtual
std::unique_ptr<Surface>
97
CreatePixelBufferSurface
(
const
Config
& config,
size_t
width,
size_t
height);
98
99
private
:
100
EGLDisplay display_ = EGL_NO_DISPLAY;
101
102
Display
(
const
Display
&) =
delete
;
103
104
Display
& operator=(
const
Display
&) =
delete
;
105
};
106
107
}
// namespace egl
108
}
// namespace impeller
109
110
#endif // FLUTTER_IMPELLER_TOOLKIT_EGL_DISPLAY_H_
impeller::egl::Display::CreateWindowSurface
virtual std::unique_ptr< Surface > CreateWindowSurface(const Config &config, EGLNativeWindowType window)
Create a window surface. The window is an opaque pointer whose value value is platform specific....
Definition:
display.cc:172
egl.h
impeller::egl::Context
An instance of an EGL context.
Definition:
context.h:30
impeller::egl::Display::ChooseConfig
virtual std::unique_ptr< Config > ChooseConfig(ConfigDescriptor config) const
Choose a config that most closely matches a given descriptor. If there are no matches,...
Definition:
display.cc:72
impeller::egl::Display
A connection to an EGL display. Only one connection per application instance is sufficient.
Definition:
display.h:28
impeller::egl::Display::CreateContext
virtual std::unique_ptr< Context > CreateContext(const Config &config, const Context *share_context)
Create a context with a supported config. The supported config can be obtained via a successful call ...
Definition:
display.cc:37
impeller::egl::Display::CreatePixelBufferSurface
virtual std::unique_ptr< Surface > CreatePixelBufferSurface(const Config &config, size_t width, size_t height)
Create an offscreen pixelbuffer surface. These are of limited use except in the context where applica...
Definition:
display.cc:188
impeller::egl::ConfigDescriptor
Definition:
config.h:45
impeller::egl::Display::IsValid
virtual bool IsValid() const
Definition:
display.cc:33
impeller::egl::Config
An EGL config. These are returned by the display to indicate support for a specific config descriptor...
Definition:
config.h:63
impeller::egl::Display::Display
Display()
Definition:
display.cc:15
impeller::egl::Display::~Display
virtual ~Display()
Definition:
display.cc:25
impeller
Definition:
aiks_blend_unittests.cc:18
config.h
impeller
toolkit
egl
display.h
Generated by
1.8.17