// 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 #include 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 Set; typedef Set::iterator Iterator; Set mSet; }; } #endif // INCLUDE_CONFIG_H_