Name
eglSwapBuffers - post EGL surface color buffer to a native windowC Specification
EGLBoolean eglSwapBuffers(EGLDisplay display,
EGLSurface surface)
Parameters
display- Specifies the EGL display connection.
surface- Specifies the EGL drawing surface whose buffers are to be swapped.
Description
Ifsurface is a window surface, eglSwapBuffers posts its color buffer to the associated native window.eglSwapBuffers performs an implicit glFlush before it returns. Subsequent GL commands may be issued immediately after calling eglSwapBuffers, but are not executed until the buffer exchange is completed.If
surface is a pixel buffer or a pixmap, eglSwapBuffers has no effect, and no error is generated.Notes
The color buffer ofsurface is left undefined after calling eglSwapBuffers.Errors
EGL_FALSE is returned if swapping of the surface buffers fails, EGL_TRUE otherwise.EGL_BAD_DISPLAY is generated if display is not an EGL display connection.EGL_NOT_INITIALIZED is generated if display has not been initialized.EGL_BAD_SURFACE is generated if surface is not an EGL drawing surface.Copyright
Copyright © 2003 Silicon Graphics, Inc.This document is licensed under the SGI Free Software B License. For details, see http://oss.sgi.com/projects/FreeB/.
See Also
glFlush, eglCopyBuffersExample of eglswapbuffers
void CXXXView::OnInitialUpdate(){ CView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class if (m_eglDisplay != EGL_NO_DISPLAY) return; const EGLint attrs[] = { EGL_LEVEL, 0, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NATIVE_RENDERABLE, EGL_FALSE, EGL_DEPTH_SIZE, EGL_DONT_CARE, EGL_NONE }; EGLint numConfig =0; m_eglDisplay = eglGetDisplay(GetDC()->GetSafeHdc()); if (m_eglDisplay == EGL_NO_DISPLAY) if ((m_eglDisplay = eglGetDisplay((EGLNativeDisplayType) EGL_DEFAULT_DISPLAY)) == EGL_NO_DISPLAY) return; // Initialize the display EGLint major = 0; EGLint minor = 0; if (!eglInitialize(m_eglDisplay, &major, &minor)) return; if (major < 1 || minor < 3) { // Does not support EGL 1.3 printf("System does not support at least EGL 1.3 \n"); return; } EGLConfig eglConfig; // Obtain the first configuration with a depth buffer if (!eglChooseConfig(m_eglDisplay, attrs, &eglConfig, 1, &numConfig)) return; // Create a surface for the main window if ((m_eglSurface = eglCreateWindowSurface(m_eglDisplay, eglConfig, (EGLNativeWindowType) GetSafeHwnd(), NULL)) == EGL_NO_SURFACE) return; // Bind the API (It could be OpenGLES or OpenVG) // eglBindAPI(EGL_OPENGL_ES_API); EGLint ai32ContextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; // Create an OpenGL ES context if ((m_eglContext = eglCreateContext(m_eglDisplay, eglConfig, EGL_NO_CONTEXT, ai32ContextAttribs)) == EGL_NO_CONTEXT) return; // Make the context and surface current if (!eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext)) return; /// glClearColor(0.5f, 0.5f, 0.5f, 0.0f);}void CXXXView::PostNcDestroy(){ // TODO: Add your specialized code here and/or call the base class eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(m_eglDisplay, m_eglContext); eglDestroySurface(m_eglDisplay, m_eglSurface); eglTerminate(m_eglDisplay); CView::PostNcDestroy();}void CXXXView::onDraw(void){ glClear(GL_COLOR_BUFFER_BIT); /// IGameImporter * gameImport = NULL; auto pDoc = GetDocument(); if (pDoc && pDoc->IsKindOf(RUNTIME_CLASS(CXXXDoc))) gameImport = dynamic_cast<cxxxdoc *=""> (pDoc)->getGameImport(); /// eglSwapBuffers(m_eglDisplay, m_eglSurface);}BOOL CXXXView::OnEraseBkgnd(CDC* pDC){ // TODO: Add your message handler code here and/or call default /// return CView::OnEraseBkgnd(pDC); return FALSE;}void CXXXView::OnSize(UINT nType, int cx, int cy){ CView::OnSize(nType, cx, cy); // TODO: Add your message handler code here glViewport(0, 0, cx, cy);}/// CXXXApp.cppBOOL CXXXApp::OnIdle(LONG lCount){ // TODO: Add your specialized code here and/or call the base class// return CWinAppEx::OnIdle(lCount); CMainFrame * pFrame = (CMainFrame *) AfxGetMainWnd(); CView * pView = pFrame->GetActiveView(); if (pView && pView->IsKindOf(RUNTIME_CLASS(CXXXView))) dynamic_cast<cxxxview *=""> (pView)->onDraw(); return TRUE;}/// CViewTree.h#define WM_TVN_SELCHANGED (WM_USER+3)class CViewTree : public CTreeCtrl{public: afx_msg void OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult);};/// CViewTree.cppBEGIN_MESSAGE_MAP(CViewTree, CTreeCtrl) ON_NOTIFY_REFLECT(TVN_SELCHANGED, &CViewTree::OnTvnSelchanged)END_MESSAGE_MAP()void CViewTree::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult){ LPNMTREEVIEW pNMTreeView = reinterpret_cast<lpnmtreeview>(pNMHDR); // TODO: Add your control notification handler code here GetParent()->SendNotifyMessage(WM_TVN_SELCHANGED, (WPARAM) pNMTreeView, (LPARAM) pResult); *pResult = 0;}