• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_
116