Name
eglDestroySurface
- destroy an EGL surfaceC Specification
EGLBoolean eglDestroySurface(EGLDisplay display, EGLSurface surface)
Parameters
display
- Specifies the EGL display connection.
surface
- Specifies the EGL surface to be destroyed.
Description
If the EGL surfacesurface
is not current to any thread, eglDestroySurface
destroys it immediately. Otherwise, surface
is destroyed when it becomes not current to any thread.Errors of eglDestroySurface
EGL_FALSE
is returned if destruction of the surface 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 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
eglCreatePbufferSurface
, eglCreatePixmapSurface
, eglCreateWindowSurface
, eglMakeCurrent
Example of eglDestroySurface
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.cpp
BOOL
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.cpp
BEGIN_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;
}