| // Copyright 2016 The SwiftShader Authors. All Rights Reserved. | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //    http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 |  | 
 | // Config.h: Defines the egl::Config class, describing the format, type | 
 | // and size for an egl::Surface. Implements EGLConfig and related functionality. | 
 | // [EGL 1.4] section 3.4 page 15. | 
 |  | 
 | #ifndef INCLUDE_CONFIG_H_ | 
 | #define INCLUDE_CONFIG_H_ | 
 |  | 
 | #include "Renderer/Surface.hpp" | 
 |  | 
 | #include <EGL/egl.h> | 
 |  | 
 | #include <set> | 
 |  | 
 | namespace egl | 
 | { | 
 | class Display; | 
 |  | 
 | class Config | 
 | { | 
 | public: | 
 | 	Config(sw::Format displayFormat, EGLint minSwapInterval, EGLint maxSwapInterval, sw::Format renderTargetFormat, sw::Format depthStencilFormat, EGLint multiSample); | 
 |  | 
 | 	EGLConfig getHandle() const; | 
 |  | 
 | 	const sw::Format mRenderTargetFormat; | 
 | 	const sw::Format mDepthStencilFormat; | 
 | 	const EGLint mMultiSample; | 
 |  | 
 | 	EGLint mBufferSize;              // Depth of the color buffer | 
 | 	EGLint mRedSize;                 // Bits of Red in the color buffer | 
 | 	EGLint mGreenSize;               // Bits of Green in the color buffer | 
 | 	EGLint mBlueSize;                // Bits of Blue in the color buffer | 
 | 	EGLint mLuminanceSize;           // Bits of Luminance in the color buffer | 
 | 	EGLint mAlphaSize;               // Bits of Alpha in the color buffer | 
 | 	EGLint mAlphaMaskSize;           // Bits of Alpha Mask in the mask buffer | 
 | 	EGLBoolean mBindToTextureRGB;    // True if bindable to RGB textures. | 
 | 	EGLBoolean mBindToTextureRGBA;   // True if bindable to RGBA textures. | 
 | 	EGLenum mColorBufferType;        // Color buffer type | 
 | 	EGLenum mConfigCaveat;           // Any caveats for the configuration | 
 | 	EGLint mConfigID;                // Unique EGLConfig identifier | 
 | 	EGLint mConformant;              // Whether contexts created with this config are conformant | 
 | 	EGLint mDepthSize;               // Bits of Z in the depth buffer | 
 | 	EGLint mLevel;                   // Frame buffer level | 
 | 	EGLBoolean mMatchNativePixmap;   // Match the native pixmap format | 
 | 	EGLint mMaxPBufferWidth;         // Maximum width of pbuffer | 
 | 	EGLint mMaxPBufferHeight;        // Maximum height of pbuffer | 
 | 	EGLint mMaxPBufferPixels;        // Maximum size of pbuffer | 
 | 	EGLint mMaxSwapInterval;         // Maximum swap interval | 
 | 	EGLint mMinSwapInterval;         // Minimum swap interval | 
 | 	EGLBoolean mNativeRenderable;    // EGL_TRUE if native rendering APIs can render to surface | 
 | 	EGLint mNativeVisualID;          // Handle of corresponding native visual | 
 | 	EGLint mNativeVisualType;        // Native visual type of the associated visual | 
 | 	EGLint mRenderableType;          // Which client rendering APIs are supported. | 
 | 	EGLint mSampleBuffers;           // Number of multisample buffers | 
 | 	EGLint mSamples;                 // Number of samples per pixel | 
 | 	EGLint mStencilSize;             // Bits of Stencil in the stencil buffer | 
 | 	EGLint mSurfaceType;             // Which types of EGL surfaces are supported. | 
 | 	EGLenum mTransparentType;        // Type of transparency supported | 
 | 	EGLint mTransparentRedValue;     // Transparent red value | 
 | 	EGLint mTransparentGreenValue;   // Transparent green value | 
 | 	EGLint mTransparentBlueValue;    // Transparent blue value | 
 |  | 
 | 	EGLBoolean mRecordableAndroid;          // EGL_ANDROID_recordable | 
 | 	EGLBoolean mFramebufferTargetAndroid;   // EGL_ANDROID_framebuffer_target | 
 | }; | 
 |  | 
 | struct CompareConfig | 
 | { | 
 | 	bool operator()(const Config &x, const Config &y) const; | 
 | }; | 
 |  | 
 | class ConfigSet | 
 | { | 
 | 	friend class Display; | 
 |  | 
 | public: | 
 | 	ConfigSet(); | 
 |  | 
 | 	void add(sw::Format displayFormat, EGLint minSwapInterval, EGLint maxSwapInterval, sw::Format renderTargetFormat, sw::Format depthStencilFormat, EGLint multiSample); | 
 | 	size_t size() const; | 
 | 	bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig); | 
 | 	const egl::Config *get(EGLConfig configHandle); | 
 |  | 
 | private: | 
 | 	typedef std::set<Config, CompareConfig> Set; | 
 | 	typedef Set::iterator Iterator; | 
 | 	Set mSet; | 
 | }; | 
 | } | 
 |  | 
 | #endif   // INCLUDE_CONFIG_H_ |