/*!*********************************************************************** @Function ApiRenderComplete @description Perform API operations required after a frame has finished (e.g., flipping). *************************************************************************/ void PVRShellInit::ApiRenderComplete() { bool bRes; if(m_pShell->m_pShellData->bNeedPixmap) { /* "Clients rendering to single buffered surfaces (e.g. pixmap surfaces) should call eglWaitGL before accessing the native pixmap from the client." */ eglWaitGL(); // Pixmap support: Copy the rendered pixmap to the display if(m_pShell->m_pShellData->bNeedPixmapDisableCopy) { bRes = true; } else { bRes = OsPixmapCopy(); } } else { if(m_pShell->m_pShellData->bNoShellSwapBuffer) return; bRes = (eglSwapBuffers (m_EGLDisplay, m_EGLWindow) == EGL_TRUE); } if(!bRes) { // check for context loss #ifdef EGL_VERSION_1_3 if(eglGetError() == EGL_CONTEXT_LOST) #else if((eglGetError() == EGL_CONTEXT_LOST_IMG) && m_bPowerManagementSupported) #endif { m_pShell->ReleaseView(); OsDoReleaseAPI(); if(ApiInitAPI()) { m_pShell->InitView(); } } else { if(m_pShell->m_pShellData->bNeedPixmap) m_pShell->PVRShellOutputDebug("failed to copy pixmap\n"); else m_pShell->PVRShellOutputDebug("eglSwapBuffers failed\n"); } } }
/*!*********************************************************************** @Function OsDoInitAPI @Return true on success @description Perform API initialisation and bring up window / fullscreen *************************************************************************/ bool PVRShellInit::OsDoInitAPI() { if(!ApiInitAPI()) { return false; } // No problem occured return true; }