Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/libANGLE/Config.h
1693 views
1
//
2
// Copyright 2002 The ANGLE Project Authors. All rights reserved.
3
// Use of this source code is governed by a BSD-style license that can be
4
// found in the LICENSE file.
5
//
6
7
// Config.h: Defines the egl::Config class, describing the format, type
8
// and size for an egl::Surface. Implements EGLConfig and related functionality.
9
// [EGL 1.5] section 3.4 page 19.
10
11
#ifndef INCLUDE_CONFIG_H_
12
#define INCLUDE_CONFIG_H_
13
14
#include "libANGLE/AttributeMap.h"
15
16
#include "common/angleutils.h"
17
18
#include <EGL/egl.h>
19
#include <GLES2/gl2.h>
20
21
#include <map>
22
#include <vector>
23
24
namespace egl
25
{
26
27
struct Config
28
{
29
Config();
30
~Config();
31
Config(const Config &other);
32
Config &operator=(const Config &other);
33
34
GLenum renderTargetFormat; // TODO(geofflang): remove this
35
GLenum depthStencilFormat; // TODO(geofflang): remove this
36
37
EGLint bufferSize; // Depth of the color buffer
38
EGLint redSize; // Bits of Red in the color buffer
39
EGLint greenSize; // Bits of Green in the color buffer
40
EGLint blueSize; // Bits of Blue in the color buffer
41
EGLint luminanceSize; // Bits of Luminance in the color buffer
42
EGLint alphaSize; // Bits of Alpha in the color buffer
43
EGLint alphaMaskSize; // Bits of Alpha Mask in the mask buffer
44
EGLBoolean bindToTextureRGB; // True if bindable to RGB textures.
45
EGLBoolean bindToTextureRGBA; // True if bindable to RGBA textures.
46
EGLenum bindToTextureTarget; // Which texture target should be used for pbuffers
47
EGLenum colorBufferType; // Color buffer type
48
EGLenum configCaveat; // Any caveats for the configuration
49
EGLint configID; // Unique EGLConfig identifier
50
EGLint conformant; // Whether contexts created with this config are conformant
51
EGLint depthSize; // Bits of Z in the depth buffer
52
EGLint level; // Frame buffer level
53
EGLBoolean matchNativePixmap; // Match the native pixmap format
54
EGLint maxPBufferWidth; // Maximum width of pbuffer
55
EGLint maxPBufferHeight; // Maximum height of pbuffer
56
EGLint maxPBufferPixels; // Maximum size of pbuffer
57
EGLint maxSwapInterval; // Maximum swap interval
58
EGLint minSwapInterval; // Minimum swap interval
59
EGLBoolean nativeRenderable; // EGL_TRUE if native rendering APIs can render to surface
60
EGLint nativeVisualID; // Handle of corresponding native visual
61
EGLint nativeVisualType; // Native visual type of the associated visual
62
EGLint renderableType; // Which client rendering APIs are supported.
63
EGLint sampleBuffers; // Number of multisample buffers
64
EGLint samples; // Number of samples per pixel
65
EGLint stencilSize; // Bits of Stencil in the stencil buffer
66
EGLint surfaceType; // Which types of EGL surfaces are supported.
67
EGLenum transparentType; // Type of transparency supported
68
EGLint transparentRedValue; // Transparent red value
69
EGLint transparentGreenValue; // Transparent green value
70
EGLint transparentBlueValue; // Transparent blue value
71
EGLint optimalOrientation; // Optimal window surface orientation
72
EGLenum colorComponentType; // Color component type
73
EGLBoolean recordable; // EGL_TRUE if a surface can support recording on Android
74
EGLBoolean framebufferTarget; // EGL_TRUE if the config supports rendering to a ANativeWindow
75
// for which the buffers are passed to the HWComposer HAL as a
76
// framebuffer target layer.
77
EGLBoolean yInverted; // True if the drawable's framebuffer is y-inverted. This can be used to
78
// determine if y-inverted texture coordinates need to be used when
79
// texturing from this drawable when it is bound to a texture target.
80
};
81
82
class ConfigSet
83
{
84
private:
85
typedef std::map<EGLint, Config> ConfigMap;
86
87
public:
88
ConfigSet();
89
ConfigSet(const ConfigSet &other);
90
~ConfigSet();
91
ConfigSet &operator=(const ConfigSet &other);
92
93
EGLint add(const Config &config);
94
const Config &get(EGLint id) const;
95
96
void clear();
97
98
size_t size() const;
99
100
bool contains(const Config *config) const;
101
102
// Filter configurations based on the table in [EGL 1.5] section 3.4.1.2 page 29
103
std::vector<const Config *> filter(const AttributeMap &attributeMap) const;
104
105
ConfigMap::iterator begin();
106
ConfigMap::iterator end();
107
108
private:
109
ConfigMap mConfigs;
110
};
111
112
} // namespace egl
113
114
#endif // INCLUDE_CONFIG_H_
115
116