OpenGL ES 版本检测

OpenGL ES 版本检测

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 特效

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 转场

零基础 OpenGL ES 学习路线推荐 :  OpenGL ES 学习目录 >> OpenGL ES 函数

零基础 OpenGL ES 学习路线推荐 :  OpenGL ES 学习目录 >> OpenGL ES GPUImage 使用

零基础 OpenGL ES 学习路线推荐 :  OpenGL ES 学习目录 >> OpenGL ES GLSL 编程


一.前言

在 Windows OPenGL 使用 WGL,在 Windows OPenGL ES 使用 EGL


OpenGL (ES)版本检测可以通过 GL_VERSION 获取,值得注意的是:在获取 OpenGL (ES)版本 时,OPENGL 上下文已经创建成功,否则返回 NULL;


二.OpenGL 版本检测

//创建上下文
wglCreateContext(...)

//设置当前上下文
wglMakeCurrent(...)

//获取当前 OPENGL 版本
const char* versionStr = (const char*)glGetString(GL_VERSION);
printf("versionStr :%s",versionStr);

// 输出:versionStr :4.6.0 NVIDIA 512.15  

通过上面输出信息可以看出,当前系统的 OPENGL 版本为 4.6,显卡是 NVIDIA;OPENGL 具有向下兼容性,意味着 OpenGL (ES)2.0 / 3.0 都可以使用;


三.OpenGL ES 版本检测

eglInitialize 可以得到系统中 EGL 版本号。了解当前的版本号在向后兼容性方面是非常有价值的。基于平台配置,软件开发可用清楚知道哪些 OpenGL ES API 可用访问,这将会为你的代码提供最大限度的可移植性。


//init EGL
if (!eglInitialize(m_display, &major, &minor)) {   // major = 1  minor = 4
        return -__LINE__;
    }
if (minor >= 4 ) {
        nGLRenderType = EGL_OPENGL_ES3_BIT_KHR;
        nGLVersion  = 3;
    } else {
        nGLRenderType = EGL_OPENGL_ES2_BIT;
        nGLVersion = 2;
    }

//Choose config
eglChooseConfig(...)

//Create a surface
eglCreateWindowSurface(....)


EGLint attribList[]{
            EGL_CONTEXT_CLIENT_VERSION, nGLVersion,
            EGL_NONE
    };
// Create a GL context
m_context = eglCreateContext(m_display, config, sharedContext, attribList);

if (m_eglContext == EGL_NO_CONTEXT)
    return -__LINE__;

// Make the context current
if (!eglMakeCurrent(m_eglDisplay, m_eglSurface,m_eglSurface, m_eglContext))
    return -__LINE__;

//query opengl context version
int clientVersion = 0;
eglQueryContext(m_eglDisplay, m_eglContext, EGL_CONTEXT_CLIENT_VERSION, &clientVersion);
printf("EGLContext created, client version %d\n", clientVersion); 


// 输出:EGLContext created, client version 3


四.检查系统是否支持GLES3.0

在文章《OpenGL ES EGL eglInitialize》中有做说明:要支持 GLES 3.0 要求 EGL 版本在 1.4 以上,如果版本低于 1.4 ,否则只能使用 OpenGL ES 2.0 API;


//init EGL
if (!eglInitialize(m_display, &major, &minor)) {   // major = 1  minor = 4
    return -__LINE__;
}

minor >= 4 支持 GLES 3.0
minor < 4  支持 GLES 2.0

五.猜你喜欢

  1. OpenGL ES 简介
  2. OpenGL ES 版本介绍
  3. OpenGL ES 2.0 和 3.0区别
  4. OpenGL ES 名词解释(一)
  5. OpenGL ES 名词解释(二)
  6. OpenGL ES GLSL 着色器使用过程
  7. OpenGL ES EGL 简介
  8. OpenGL ES EGL 名词解释
  9. OpenGL ES EGL eglGetDisplay
  10. OpenGL ES EGL eglInitialize
  11. OpenGL ES EGL eglGetConfigs
  12. OpenGL ES EGL eglChooseConfig
  13. OpenGL ES EGL eglGetError
  14. OpenGL ES EGL eglCreateContext
  15. OpenGL ES EGL eglCreateWindowSurface
  16. OpenGL ES EGL eglCreatePbufferSurface
  17. OpenGL ES EGL eglMakeCurrent
  18. OpenGL ES EGL eglSwapBuffer
  19. OpenGL ES EGL eglDestroySurface
  20. OpenGL ES EGL eglDestroyContext
  21. OpenGL ES EGL eglQueryContext
  22. OpenGL ES EAGLContext 和 EGLContext
  23. OpenGL ES OpenGL WebGL EGL WGL 区别
  24. OpenGL ES freeglut 下载和使用
  25. OpenGL ES glew 下载和使用
  26. OpenGL ES glut 下载和使用
  27. OpenGL ES glfw 下载和使用
  28. OpenGL ES glad 下载和使用
  29. OpenGL ES glut glew glfw glad freeglut
  30. OpenGL ES google angle
  31. OpenGL Windows 搭建环境(MFC版本)
  32. OpenGL ES Windows 搭建环境(MFC版本)
  33. OpenGL ES 版本检测

推荐文章

发表评论