Name
eglCreateWindowSurface - create a new EGL window surfaceC Specification
EGLSurface eglCreateWindowSurface(EGLDisplay display,
EGLConfig config,
NativeWindowType native_window,
EGLint const * attrib_list)
Parameters
display- Specifies the EGL display connection.
config- Specifies the EGL frame buffer configuration that defines the frame buffer resource available to the surface.
native_window- Specifies the native window.
attrib_list- Specifies window surface attributes. Must be
NULLor empty (first attribute isEGL_NONE).
Description
eglCreateWindowSurface creates an EGL window surface and returns its handle. If eglCreateWindowSurface fails to create a window surface, EGL_NO_SURFACE is returned.Any EGL rendering context that was created with respect to
config can be used to render into the surface. Use eglMakeCurrent to attach an EGL rendering context to the surface.Use
eglQuerySurface to retrieve the ID of config.Use
eglDestroySurface to destroy the surface.Errors
EGL_NO_SURFACE is returned if creation of the context fails.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_CONFIG is generated if config is not an EGL frame buffer configuration.EGL_BAD_NATIVE_WINDOW may be generated if native_window is not a valid native window.EGL_BAD_ATTRIBUTE is generated if attrib_list contains an invalid window attribute or if an attribute value is not recognized or is out of range.EGL_BAD_ALLOC is generated if there are not enough resources to allocate the new surface.EGL_BAD_MATCH is generated if the attributes of native_window do not correspond to config or if config does not support rendering to windows (the EGL_SURFACE_TYPE attribute does not contain EGL_WINDOW_BIT).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
eglDestroySurface, eglChooseConfig, eglGetConfigs, eglMakeCurrent, eglQuerySurfaceExample of eglCreateWindowSurface
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;}