gfx/angle/src/libEGL/Config.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:a883df8bd122
1 //
2 // Copyright (c) 2002-2010 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.4] section 3.4 page 15.
10
11 #ifndef INCLUDE_CONFIG_H_
12 #define INCLUDE_CONFIG_H_
13
14 #define EGLAPI
15 #include <EGL/egl.h>
16
17 #include <set>
18
19 #include "libGLESv2/renderer/Renderer.h"
20 #include "common/angleutils.h"
21
22 namespace egl
23 {
24 class Display;
25
26 class Config
27 {
28 public:
29 Config(rx::ConfigDesc desc, EGLint minSwapInterval, EGLint maxSwapInterval, EGLint texWidth, EGLint texHeight);
30
31 EGLConfig getHandle() const;
32
33 const GLenum mRenderTargetFormat;
34 const GLenum mDepthStencilFormat;
35 const GLint mMultiSample;
36
37 EGLint mBufferSize; // Depth of the color buffer
38 EGLint mRedSize; // Bits of Red in the color buffer
39 EGLint mGreenSize; // Bits of Green in the color buffer
40 EGLint mBlueSize; // Bits of Blue in the color buffer
41 EGLint mLuminanceSize; // Bits of Luminance in the color buffer
42 EGLint mAlphaSize; // Bits of Alpha in the color buffer
43 EGLint mAlphaMaskSize; // Bits of Alpha Mask in the mask buffer
44 EGLBoolean mBindToTextureRGB; // True if bindable to RGB textures.
45 EGLBoolean mBindToTextureRGBA; // True if bindable to RGBA textures.
46 EGLenum mColorBufferType; // Color buffer type
47 EGLenum mConfigCaveat; // Any caveats for the configuration
48 EGLint mConfigID; // Unique EGLConfig identifier
49 EGLint mConformant; // Whether contexts created with this config are conformant
50 EGLint mDepthSize; // Bits of Z in the depth buffer
51 EGLint mLevel; // Frame buffer level
52 EGLBoolean mMatchNativePixmap; // Match the native pixmap format
53 EGLint mMaxPBufferWidth; // Maximum width of pbuffer
54 EGLint mMaxPBufferHeight; // Maximum height of pbuffer
55 EGLint mMaxPBufferPixels; // Maximum size of pbuffer
56 EGLint mMaxSwapInterval; // Maximum swap interval
57 EGLint mMinSwapInterval; // Minimum swap interval
58 EGLBoolean mNativeRenderable; // EGL_TRUE if native rendering APIs can render to surface
59 EGLint mNativeVisualID; // Handle of corresponding native visual
60 EGLint mNativeVisualType; // Native visual type of the associated visual
61 EGLint mRenderableType; // Which client rendering APIs are supported.
62 EGLint mSampleBuffers; // Number of multisample buffers
63 EGLint mSamples; // Number of samples per pixel
64 EGLint mStencilSize; // Bits of Stencil in the stencil buffer
65 EGLint mSurfaceType; // Which types of EGL surfaces are supported.
66 EGLenum mTransparentType; // Type of transparency supported
67 EGLint mTransparentRedValue; // Transparent red value
68 EGLint mTransparentGreenValue; // Transparent green value
69 EGLint mTransparentBlueValue; // Transparent blue value
70 };
71
72 // Function object used by STL sorting routines for ordering Configs according to [EGL] section 3.4.1 page 24.
73 class SortConfig
74 {
75 public:
76 explicit SortConfig(const EGLint *attribList);
77
78 bool operator()(const Config *x, const Config *y) const;
79 bool operator()(const Config &x, const Config &y) const;
80
81 private:
82 void scanForWantedComponents(const EGLint *attribList);
83 EGLint wantedComponentsSize(const Config &config) const;
84
85 bool mWantRed;
86 bool mWantGreen;
87 bool mWantBlue;
88 bool mWantAlpha;
89 bool mWantLuminance;
90 };
91
92 class ConfigSet
93 {
94 friend Display;
95
96 public:
97 ConfigSet();
98
99 void add(rx::ConfigDesc desc, EGLint minSwapInterval, EGLint maxSwapInterval, EGLint texWidth, EGLint texHeight);
100 size_t size() const;
101 bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig);
102 const egl::Config *get(EGLConfig configHandle);
103
104 private:
105 DISALLOW_COPY_AND_ASSIGN(ConfigSet);
106
107 typedef std::set<Config, SortConfig> Set;
108 typedef Set::iterator Iterator;
109 Set mSet;
110
111 static const EGLint mSortAttribs[];
112 };
113 }
114
115 #endif // INCLUDE_CONFIG_H_

mercurial