// // Copyright 2002 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // Config.h: Defines the egl::Config class, describing the format, type // and size for an egl::Surface. Implements EGLConfig and related functionality. // [EGL 1.5] section 3.4 page 19. #ifndef INCLUDE_CONFIG_H_ #define INCLUDE_CONFIG_H_ #include "libANGLE/AttributeMap.h" #include "common/angleutils.h" #include #include #include #include namespace egl { struct Config { Config(); ~Config(); Config(const Config &other); Config &operator=(const Config &other); GLenum renderTargetFormat; // TODO(geofflang): remove this GLenum depthStencilFormat; // TODO(geofflang): remove this EGLint bufferSize; // Depth of the color buffer EGLint redSize; // Bits of Red in the color buffer EGLint greenSize; // Bits of Green in the color buffer EGLint blueSize; // Bits of Blue in the color buffer EGLint luminanceSize; // Bits of Luminance in the color buffer EGLint alphaSize; // Bits of Alpha in the color buffer EGLint alphaMaskSize; // Bits of Alpha Mask in the mask buffer EGLBoolean bindToTextureRGB; // True if bindable to RGB textures. EGLBoolean bindToTextureRGBA; // True if bindable to RGBA textures. EGLenum bindToTextureTarget; // Which texture target should be used for pbuffers EGLenum colorBufferType; // Color buffer type EGLenum configCaveat; // Any caveats for the configuration EGLint configID; // Unique EGLConfig identifier EGLint conformant; // Whether contexts created with this config are conformant EGLint depthSize; // Bits of Z in the depth buffer EGLint level; // Frame buffer level EGLBoolean matchNativePixmap; // Match the native pixmap format EGLint maxPBufferWidth; // Maximum width of pbuffer EGLint maxPBufferHeight; // Maximum height of pbuffer EGLint maxPBufferPixels; // Maximum size of pbuffer EGLint maxSwapInterval; // Maximum swap interval EGLint minSwapInterval; // Minimum swap interval EGLBoolean nativeRenderable; // EGL_TRUE if native rendering APIs can render to surface EGLint nativeVisualID; // Handle of corresponding native visual EGLint nativeVisualType; // Native visual type of the associated visual EGLint renderableType; // Which client rendering APIs are supported. EGLint sampleBuffers; // Number of multisample buffers EGLint samples; // Number of samples per pixel EGLint stencilSize; // Bits of Stencil in the stencil buffer EGLint surfaceType; // Which types of EGL surfaces are supported. EGLenum transparentType; // Type of transparency supported EGLint transparentRedValue; // Transparent red value EGLint transparentGreenValue; // Transparent green value EGLint transparentBlueValue; // Transparent blue value EGLint optimalOrientation; // Optimal window surface orientation EGLenum colorComponentType; // Color component type EGLBoolean recordable; // EGL_TRUE if a surface can support recording on Android EGLBoolean framebufferTarget; // EGL_TRUE if the config supports rendering to a ANativeWindow // for which the buffers are passed to the HWComposer HAL as a // framebuffer target layer. EGLBoolean yInverted; // True if the drawable's framebuffer is y-inverted. This can be used to // determine if y-inverted texture coordinates need to be used when // texturing from this drawable when it is bound to a texture target. EGLint matchFormat; // LockSurface match format. }; class ConfigSet { private: typedef std::map ConfigMap; public: ConfigSet(); ConfigSet(const ConfigSet &other); ~ConfigSet(); ConfigSet &operator=(const ConfigSet &other); EGLint add(const Config &config); const Config &get(EGLint id) const; void clear(); size_t size() const; bool contains(const Config *config) const; // Filter configurations based on the table in [EGL 1.5] section 3.4.1.2 page 29 std::vector filter(const AttributeMap &attributeMap) const; ConfigMap::iterator begin(); ConfigMap::iterator end(); private: ConfigMap mConfigs; }; } // namespace egl #endif // INCLUDE_CONFIG_H_