diff options
Diffstat (limited to 'host/libs/virglrenderer/EglConfig.h')
-rw-r--r-- | host/libs/virglrenderer/EglConfig.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/host/libs/virglrenderer/EglConfig.h b/host/libs/virglrenderer/EglConfig.h new file mode 100644 index 000000000..3b5cd2b49 --- /dev/null +++ b/host/libs/virglrenderer/EglConfig.h @@ -0,0 +1,92 @@ +/* + * 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; +}; |