diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.cpp index 4622161b9..089f1dae0 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.cpp @@ -87,88 +87,22 @@ InitConfigStatus FBConfig::initConfigList(FrameBuffer *fb) s_egl.eglGetConfigs(dpy, configs, nConfigs, &nConfigs); // - // Find number of usable configs which support pbuffer rendering - // for each ES and ES2 as well as number of configs supporting - // EGL_BIND_TO_TEXTURE_RGBA for each of ES and ES2. + // copy the config attributes, filter out + // configs we do not want to support. // - const int GL = 0; - const int GL1 = 1; - const int GL2 = 2; - int numPbuf[3] = {0, 0, 0}; - int numBindToTexture[3] = {0, 0, 0}; - for (int i=0; i 0 && stencilSize > 0 && - (surfaceType & EGL_PBUFFER_BIT) != 0) { - - numPbuf[GL]++; - - if ((renderType & EGL_OPENGL_ES_BIT) != 0) { - numPbuf[GL1]++; - } - - if ((renderType & EGL_OPENGL_ES2_BIT) != 0) { - numPbuf[GL2]++; - } - - s_egl.eglGetConfigAttrib(dpy, configs[i], - EGL_BIND_TO_TEXTURE_RGBA, &bindToTexture); - if (bindToTexture) { - numBindToTexture[GL]++; - if ((renderType & EGL_OPENGL_ES_BIT) != 0) { - numBindToTexture[GL1]++; - } - - if ((renderType & EGL_OPENGL_ES2_BIT) != 0) { - numBindToTexture[GL2]++; - } - } - } - } - - bool useOnlyPbuf = false; - bool useOnlyBindToTexture = false; - int numConfigs = nConfigs; - if ( numPbuf[GL1] > 0 && - (!caps.hasGL2 || numPbuf[GL2] > 0)) { - useOnlyPbuf = true; - numConfigs = numPbuf[GL]; - } - if (useOnlyPbuf && - !(caps.has_eglimage_texture_2d && - caps.has_eglimage_renderbuffer) && - numBindToTexture[GL1] > 0 && - (!caps.hasGL2 || numBindToTexture[GL2] > 0)) { - useOnlyBindToTexture = true; - numConfigs = numBindToTexture[GL]; - ret = INIT_CONFIG_HAS_BIND_TO_TEXTURE; - } - else { - ret = INIT_CONFIG_PASSED; - } - int j = 0; s_fbConfigs = new FBConfig*[nConfigs]; for (int i=0; i 0 ? INIT_CONFIG_PASSED : INIT_CONFIG_FAILED; } const FBConfig *FBConfig::get(int p_config) diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.h b/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.h index 8e0356a88..638854958 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.h +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FBConfig.h @@ -23,8 +23,7 @@ class FrameBuffer; enum InitConfigStatus { INIT_CONFIG_FAILED = 0, - INIT_CONFIG_PASSED = 1, - INIT_CONFIG_HAS_BIND_TO_TEXTURE = 2 + INIT_CONFIG_PASSED = 1 }; class FBConfig diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp index 516ae20f6..3609a7768 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.cpp @@ -275,6 +275,18 @@ bool FrameBuffer::initialize(int width, int height) fb->m_caps.has_eglimage_renderbuffer = false; } + // + // Fail initialization if not all of the following extensions + // exist: + // EGL_KHR_gl_texture_2d_image + // GL_OES_EGL_IMAGE (by both GLES implementations [1 and 2]) + // + if (!fb->m_caps.has_eglimage_texture_2d) { + ERR("Failed: Missing egl_image related extension(s)\n"); + delete fb; + return false; + } + // // Initialize set of configs // @@ -316,13 +328,6 @@ bool FrameBuffer::initialize(int width, int height) fb->m_caps.hasGL2 = false; } - // - // update Pbuffer bind to texture capability based on configs - // - fb->m_caps.has_BindToTexture = - (configStatus == INIT_CONFIG_HAS_BIND_TO_TEXTURE); - - // // Initialize some GL state // diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h index 2a3eb5c04..b415efe73 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h +++ b/tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h @@ -35,7 +35,6 @@ struct FrameBufferCaps bool hasGL2; bool has_eglimage_texture_2d; bool has_eglimage_renderbuffer; - bool has_BindToTexture; EGLint eglMajor; EGLint eglMinor; }; diff --git a/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.cpp b/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.cpp index 14f38be33..b8d1bd280 100644 --- a/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.cpp +++ b/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.cpp @@ -35,9 +35,7 @@ WindowSurface::WindowSurface() : m_width(0), m_height(0), m_pbufWidth(0), - m_pbufHeight(0), - m_useEGLImage(false), - m_useBindToTexture(false) + m_pbufHeight(0) { } @@ -64,31 +62,10 @@ WindowSurface *WindowSurface::create(int p_config, int p_width, int p_height) const FrameBufferCaps &caps = fb->getCaps(); // - // We can use eglimage and prevent copies if: - // GL_KHR_gl_texture_2D_image is present. - // and either there is no need for depth or stencil buffer - // or GL_KHR_gl_renderbuffer_image present. + // Create a pbuffer to be used as the egl surface + // for that window. // -#if 0 - //XXX: This path should be implemented - win->m_useEGLImage = - (caps.has_eglimage_texture_2d && - (caps.has_eglimage_renderbuffer || - (fbconf->getDepthSize() + fbconf->getStencilSize() == 0)) ); -#else - win->m_useEGLImage = false; -#endif - - if (win->m_useEGLImage) { - } - else if (0 != (fbconf->getSurfaceType() & EGL_PBUFFER_BIT)) { - if (!win->resizePbuffer(p_width, p_height)) { - delete win; - return NULL; - } - } - else { - // no EGLImage support and not Pbuffer support - fail + if (!win->resizePbuffer(p_width, p_height)) { delete win; return NULL; } @@ -108,20 +85,8 @@ void WindowSurface::flushColorBuffer() { if (m_attachedColorBuffer.Ptr() != NULL) { - if (!m_useEGLImage) { - bool copied = false; - if (m_useBindToTexture) { - copied = m_attachedColorBuffer->blitFromPbuffer(m_eglSurface); - } - - if (!copied) { - //copyToColorBuffer(); - blitToColorBuffer(); - } - } - else { - //TODO: EGLImage - } + //copyToColorBuffer(); + blitToColorBuffer(); } } @@ -175,9 +140,6 @@ void WindowSurface::bind(RenderContextPtr p_ctx, SurfaceBindType p_bindType) return; // bad param } - if (m_useEGLImage) { - // XXX: should be implemented - } } void WindowSurface::copyToColorBuffer() @@ -323,27 +285,14 @@ bool WindowSurface::resizePbuffer(unsigned int p_width, unsigned int p_height) const FrameBufferCaps &caps = fb->getCaps(); // - // Create pbuffer surface, if possible - // set it such that it will be able to be bound to a texture - // later to prevent readback. + // Create pbuffer surface. // - EGLint pbufAttribs[12]; + EGLint pbufAttribs[5]; pbufAttribs[0] = EGL_WIDTH; pbufAttribs[1] = p_width; pbufAttribs[2] = EGL_HEIGHT; pbufAttribs[3] = p_height; - - if (caps.has_BindToTexture) { - pbufAttribs[4] = EGL_TEXTURE_FORMAT; - pbufAttribs[5] = EGL_TEXTURE_RGBA; - pbufAttribs[6] = EGL_TEXTURE_TARGET; - pbufAttribs[7] = EGL_TEXTURE_2D; - pbufAttribs[8] = EGL_NONE; - m_useBindToTexture = true; - } - else { - pbufAttribs[4] = EGL_NONE; - } + pbufAttribs[4] = EGL_NONE; m_eglSurface = s_egl.eglCreatePbufferSurface(fb->getDisplay(), m_fbconf->getEGLConfig(),