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

Tuesday, May 24, 2011

eglGetDisplay example c c++ objc

Another 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;
}

eglGetDisplay example c c++ objc

Name

eglGetDisplay - return an EGL display connection

C Specification

EGLDisplay eglGetDisplay(NativeDisplayType native_display)

Parameters

native_display
Specifies the display to connect to. EGL_DEFAULT_DISPLAY indicates the default display.

Description

eglGetDisplay obtains the EGL display connection for the native display native_display.
If display_id is EGL_DEFAULT_DISPLAY, a default display connection is returned.
If no display connection matching native_display is available, EGL_NO_DISPLAY is returned. No error is generated.
Use eglInitialize to initialize the display connection.

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/.

<Example Code> - eglGetDisplay

static EGLint attribute_list[] = {
    EGL_NATIVE_VISUAL_ID, 0,
    EGL_RED_SIZE, 5,
    EGL_GREEN_SIZE, 5,
    EGL_BLUE_SIZE, 5,
    EGL_DEPTH_SIZE, 16,
    EGL_NONE
};

...

    gf_dev_t                gf_dev;
    gf_dev_info_t           info;


    /* initialize the graphics device */
    if (gf_dev_attach(&gf_dev, NULL, &info) != GF_ERR_OK) {
            perror("gf_dev_attach()");
            return -1;
    }

...

    /* get an EGL display connection */
    display = eglGetDisplay(gf_dev);

    if (display == EGL_NO_DISPLAY || eglGetError() != EGL_SUCCESS) {
            fprintf(stderr, "eglGetDisplay() failed\n");
            return -1;
    }