windows EGL环境初始化

  1. bool CEglClass::InitGLES(void *hwnd)

  2. {

  3.   EGLConfig configs[10];

  4.   EGLint matchingConfigs;

  5.   EGLint        configAttribs[] = {

  6.     EGL_SURFACE_TYPE, EGL_PIXMAP_BIT,

  7.     EGL_CONFORMANT, EGL_OPENGL_ES_BIT,

  8.     EGL_NONE

  9.   };

  10.   EGLint        aEGLContextAttributes[] = {

  11.     EGL_CONTEXT_CLIENT_VERSION, 1,

  12.     EGL_NONE

  13.   };

  14.   m_hwnd = hwnd;

  15.   m_hdc = ::GetDC((HWND)m_hwnd);

  16.   EGLDisplay glesDisplay = eglGetDisplay((NativeDisplayType)m_hdc);  if(!eglInitialize(glesDisplay, NULL, NULL))

  17.   {

  18.     timeLogger.Log(_T("eglInitialize Failed!"));return false;

  19.   }

  20.   EGLint buffersize = 0;

  21.   EGLint config_num = 0;

  22.   eglGetConfigs(glesDisplay, configs, 10, &config_num);

  23.   eglGetConfigAttrib(glesDisplay, configs[0], EGL_BUFFER_SIZE, &buffersize);

  24.   timeLogger.Log(_T("display buffer size is %d\n"), buffersize);

  25.   eglChooseConfig(glesDisplay, configAttribs, NULL, 10, &matchingConfigs);  if(!eglChooseConfig(glesDisplay, configAttribs, &configs[0], 10, &matchingConfigs))

  26.   {return false;

  27.   }

  28.   

  29.   EGLint surfaceAttr[] = 

  30.   {//EGL_RENDER_BUFFER,

  31.  EGL_SINGLE_BUFFER, //EGL1.1不支持,支持的话开了这个直接用glFlush就可以了

  32.   EGL_NONE

  33.   };

  34.   EGLSurface glesSurface = eglCreateWindowSurface(glesDisplay, configs[0], (NativeWindowType)m_hwnd, surfaceAttr);  if(!glesSurface)

  35.   {

  36.     EGLint errCode = eglGetError();

  37.     tstring err;switch (errCode)

  38.     {case EGL_NO_SURFACE:

  39.       err = _T("no surface");break;case EGL_BAD_DISPLAY:

  40.       err = _T("bad display");      break;case EGL_BAD_CONFIG:

  41.       err = _T("bad config");      break;case EGL_BAD_ATTRIBUTE:

  42.       err = _T("bad ATTRIBUTE");      break;case EGL_BAD_MATCH:

  43.       err = _T("bad Match");      break;

  44.     }

  45.     timeLogger.Log(err.c_str());

  46.     glesSurface = eglCreateWindowSurface(glesDisplay, configs[0], (NativeWindowType)m_hwnd, NULL);if (!glesSurface)

  47.     {      return false;

  48.     }

  49.   }

  50.   EGLContext glesContext = eglCreateContext(glesDisplay, configs[0], EGL_NO_CONTEXT, aEGLContextAttributes);  if(!glesContext)

  51.   {

  52.     glesContext = eglCreateContext(glesDisplay, configs[0], EGL_NO_CONTEXT, NULL);if (!glesContext)

  53.     {

  54.       

  55.       timeLogger.Log(_T("eglCreateContext Failed!"));      return false;

  56.     }

  57.   }  if (!eglMakeCurrent(glesDisplay, glesSurface, glesSurface, glesContext))

  58.   {

  59.     EGLint errCode = eglGetError();

  60.     tstring err;switch (errCode)

  61.     {case EGL_BAD_ALLOC  :

  62.       err = _T(" EGL_BAD_ALLOC  ");      break;case EGL_BAD_DISPLAY:

  63.       err = _T("bad display");      break;case EGL_BAD_CONFIG:

  64.       err = _T("bad config");      break;case EGL_BAD_NATIVE_PIXMAP :

  65.       err = _T("bad EGL_BAD_NATIVE_PIXMAP ");      break;case EGL_BAD_NATIVE_WINDOW  :

  66.       err = _T(" EGL_BAD_NATIVE_WINDOW  ");      break;case EGL_BAD_CURRENT_SURFACE   :

  67.       err = _T(" EGL_BAD_CURRENT_SURFACE   ");      break;case EGL_BAD_MATCH:

  68.       err = _T("bad Match");      break;case EGL_CONTEXT_LOST :

  69.       err = _T("EGL_CONTEXT_LOST ");      break;

  70.     }

  71.     timeLogger.Log(err.c_str());

  72.     timeLogger.Log(_T("eglMakeCurrent Failed!"));return false;

  73.   }

  74.   m_display = glesDisplay;

  75.   m_surface = glesSurface;

  76. }

猜你喜欢

转载自blog.csdn.net/qq_21743659/article/details/129196930