Showing posts with label eglInitialize example. Show all posts
Showing posts with label eglInitialize example. Show all posts

Tuesday, May 24, 2011

eglInitialize example c c++ objc java

Another eglInitialize example. Not that eglInitialize is called to initialize the display connection created by eglGetDisplay().

Example)
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;
}

eglInitialize example c c++ objc

Name:  
eglInitialize - initialize an EGL display connection

C Specification
EGLBoolean eglInitialize(EGLDisplay display,
    EGLint * major,
    EGLint * minor)

Parameters
display
Specifies the EGL display connection to initialize.
major
Returns the major version number of the EGL implementation. May be NULL.
minor
Returns the minor version number of the EGL implementation. May be NULL.

Description
eglInitialize initialized the EGL display connection obtained with eglGetDisplay. Initializing an already initialized EGL display connection has no effect besides returning the version numbers.
major and minor do not return values if they are specified as NULL.
Use eglTerminate to release resources associated with an EGL display connection.

Errors
EGL_FALSE is returned if eglInitialize fails, EGL_TRUE otherwise. major and minor are not modified when EGL_FALSE is returned.
EGL_BAD_DISPLAY is generated if display is not an EGL display connection.
EGL_NOT_INITIALIZED is generated if display cannot be initialized.

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
eglGetDisplay, eglTerminate

Examples

Example 4.1 shows a default display:
EGLDisplay sEGLDisplay;
// EGL init.
sEGLDisplay = eglGetDisplay((EGLNativeDisplayType) EGL_DEFAULT_DISPLAY);
eglInitialize(sEGLDisplay, NULL, NULL);

Example 4.2 shows a default display:
EGLDisplay sEGLDisplay;
// Window
...
// Create Window
sWindow = CreateWindowEx(... 
// EGL init.
sEGLDisplay = eglGetDisplay(GetDC(sWindow));
eglInitialize(sEGLDisplay, NULL, NULL);