Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
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 //
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.
11 #ifndef INCLUDE_CONFIG_H_
12 #define INCLUDE_CONFIG_H_
14 #define EGLAPI
15 #include <EGL/egl.h>
17 #include <set>
19 #include "libGLESv2/renderer/Renderer.h"
20 #include "common/angleutils.h"
22 namespace egl
23 {
24 class Display;
26 class Config
27 {
28 public:
29 Config(rx::ConfigDesc desc, EGLint minSwapInterval, EGLint maxSwapInterval, EGLint texWidth, EGLint texHeight);
31 EGLConfig getHandle() const;
33 const GLenum mRenderTargetFormat;
34 const GLenum mDepthStencilFormat;
35 const GLint mMultiSample;
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 };
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);
78 bool operator()(const Config *x, const Config *y) const;
79 bool operator()(const Config &x, const Config &y) const;
81 private:
82 void scanForWantedComponents(const EGLint *attribList);
83 EGLint wantedComponentsSize(const Config &config) const;
85 bool mWantRed;
86 bool mWantGreen;
87 bool mWantBlue;
88 bool mWantAlpha;
89 bool mWantLuminance;
90 };
92 class ConfigSet
93 {
94 friend Display;
96 public:
97 ConfigSet();
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);
104 private:
105 DISALLOW_COPY_AND_ASSIGN(ConfigSet);
107 typedef std::set<Config, SortConfig> Set;
108 typedef Set::iterator Iterator;
109 Set mSet;
111 static const EGLint mSortAttribs[];
112 };
113 }
115 #endif // INCLUDE_CONFIG_H_