[core] always create a pixelbuffer surface in the EGL backend

We need a surface to activate a context. Some implementation don't seem to error when passing EGL_NO_SURFACE, but it doesn't seem standards compliant.
This commit is contained in:
Konstantin Käfer
2017-04-05 15:57:47 +02:00
parent 7c69cfa6de
commit 6fcac0f580
2 changed files with 6 additions and 9 deletions

View File

@@ -14,11 +14,13 @@ struct EGLImpl : public HeadlessBackend::Impl {
: glContext(glContext_),
display(display_),
config(config_) {
#if __ANDROID__
// Create a pixel buffer surface (in conjunction with EGL_SURFACE_TYPE, EGL_PBUFFER_BIT).
// Create a dummy pbuffer. We will render to framebuffers anyway, but we need a pbuffer to
// activate the context.
// Note that to be able to create pbuffer surfaces, we need to choose a config that
// includes EGL_SURFACE_TYPE, EGL_PBUFFER_BIT in HeadlessDisplay.
const EGLint surfAttribs[] = {
EGL_WIDTH, 512,
EGL_HEIGHT, 512,
EGL_WIDTH, 8,
EGL_HEIGHT, 8,
EGL_LARGEST_PBUFFER, EGL_TRUE,
EGL_NONE
};
@@ -27,7 +29,6 @@ struct EGLImpl : public HeadlessBackend::Impl {
if (glSurface == EGL_NO_SURFACE) {
throw std::runtime_error("Could not create surface: " + std::to_string(eglGetError()));
}
#endif // __ANDROID__
}
~EGLImpl() {

View File

@@ -32,11 +32,7 @@ HeadlessDisplay::Impl::Impl() {
}
const EGLint attribs[] = {
#if __ANDROID__
// Android emulator requires a pixel buffer to generate renderable unit
// test results.
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
#endif // __ANDROID__
EGL_NONE
};