| // 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_ |