93 lines
2.6 KiB
C++
93 lines
2.6 KiB
C++
/*
|
|
* Copyright (C) 2018 The Android Open Source Project
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <vector>
|
|
|
|
#include <EGL/egl.h>
|
|
#include <EGL/eglext.h>
|
|
|
|
typedef EGLBoolean (*PFNEGLGETCONFIGATTRIB)(EGLDisplay, EGLConfig, EGLint, EGLint*);
|
|
|
|
struct EglConfig {
|
|
static std::vector<EglConfig*> vec;
|
|
|
|
// clang-format off
|
|
static constexpr EGLint kAttribs[] = {
|
|
EGL_DEPTH_SIZE,
|
|
EGL_STENCIL_SIZE,
|
|
EGL_RENDERABLE_TYPE,
|
|
EGL_SURFACE_TYPE,
|
|
EGL_CONFIG_ID,
|
|
EGL_BUFFER_SIZE,
|
|
EGL_ALPHA_SIZE,
|
|
EGL_BLUE_SIZE,
|
|
EGL_GREEN_SIZE,
|
|
EGL_RED_SIZE,
|
|
EGL_CONFIG_CAVEAT,
|
|
EGL_LEVEL,
|
|
EGL_MAX_PBUFFER_HEIGHT,
|
|
EGL_MAX_PBUFFER_PIXELS,
|
|
EGL_MAX_PBUFFER_WIDTH,
|
|
EGL_NATIVE_RENDERABLE,
|
|
EGL_NATIVE_VISUAL_ID,
|
|
EGL_NATIVE_VISUAL_TYPE,
|
|
0x3030, // EGL_PRESERVED_RESOURCES
|
|
EGL_SAMPLES,
|
|
EGL_SAMPLE_BUFFERS,
|
|
EGL_TRANSPARENT_TYPE,
|
|
EGL_TRANSPARENT_BLUE_VALUE,
|
|
EGL_TRANSPARENT_GREEN_VALUE,
|
|
EGL_TRANSPARENT_RED_VALUE,
|
|
EGL_BIND_TO_TEXTURE_RGB,
|
|
EGL_BIND_TO_TEXTURE_RGBA,
|
|
EGL_MIN_SWAP_INTERVAL,
|
|
EGL_MAX_SWAP_INTERVAL,
|
|
EGL_LUMINANCE_SIZE,
|
|
EGL_ALPHA_MASK_SIZE,
|
|
EGL_COLOR_BUFFER_TYPE,
|
|
//EGL_MATCH_NATIVE_PIXMAP,
|
|
EGL_RECORDABLE_ANDROID,
|
|
EGL_CONFORMANT
|
|
};
|
|
// clang-format on
|
|
|
|
static constexpr size_t kNumAttribs = sizeof(kAttribs) / sizeof(kAttribs[0]);
|
|
|
|
EglConfig(EGLDisplay dpy, EGLConfig config_, PFNEGLGETCONFIGATTRIB pfnEglGetConfigAttrib)
|
|
: config(config_) {
|
|
for (size_t a = 0; a < kNumAttribs; a++) {
|
|
if (!pfnEglGetConfigAttrib(dpy, config, kAttribs[a], &attribs[a]))
|
|
attribs[a] = 0;
|
|
}
|
|
vec.push_back(this);
|
|
}
|
|
|
|
~EglConfig() {
|
|
for (size_t i = 0; i < EglConfig::vec.size(); i++) {
|
|
if (vec[i] == this) {
|
|
vec.erase(vec.begin() + i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
EGLint attribs[kNumAttribs];
|
|
EGLConfig config;
|
|
};
|