Hash :
f21a1080
Author :
Date :
2015-01-09T14:41:27
Generate the full EGL configs in the Renderers. Specify the default framebuffer formats in GL formats but still use BGRA and ANGLEX formats for now. BUG=angle:658 Change-Id: I7192db4ca76ab4b0b42daa43785a7ddd9528a9ca Reviewed-on: https://chromium-review.googlesource.com/239902 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
//
// Copyright (c) 2002-2010 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 <EGL/egl.h>
#include <GLES2/gl2.h>
#include <map>
#include <vector>
namespace egl
{
struct Config
{
Config();
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 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
};
class ConfigSet
{
public:
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<const Config*> filter(const AttributeMap &attributeMap) const;
private:
typedef std::map<EGLint, const Config> ConfigMap;
ConfigMap mConfigs;
};
}
#endif // INCLUDE_CONFIG_H_