零基础 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
五.猜你喜欢
- OpenGL ES 简介
 - OpenGL ES 版本介绍
 - OpenGL ES 2.0 和 3.0区别
 - OpenGL ES 名词解释(一)
 - OpenGL ES 名词解释(二)
 - OpenGL ES GLSL 着色器使用过程
 - OpenGL ES EGL 简介
 - OpenGL ES EGL 名词解释
 - OpenGL ES EGL eglGetDisplay
 - OpenGL ES EGL eglInitialize
 - OpenGL ES EGL eglGetConfigs
 - OpenGL ES EGL eglChooseConfig
 - OpenGL ES EGL eglGetError
 - OpenGL ES EGL eglCreateContext
 - OpenGL ES EGL eglCreateWindowSurface
 - OpenGL ES EGL eglCreatePbufferSurface
 - OpenGL ES EGL eglMakeCurrent
 - OpenGL ES EGL eglSwapBuffer
 - OpenGL ES EGL eglDestroySurface
 - OpenGL ES EGL eglDestroyContext
 - OpenGL ES EGL eglQueryContext
 - OpenGL ES EAGLContext 和 EGLContext
 - OpenGL ES OpenGL WebGL EGL WGL 区别
 - OpenGL ES freeglut 下载和使用
 - OpenGL ES glew 下载和使用
 - OpenGL ES glut 下载和使用
 - OpenGL ES glfw 下载和使用
 - OpenGL ES glad 下载和使用
 - OpenGL ES glut glew glfw glad freeglut
 - OpenGL ES google angle
 - OpenGL Windows 搭建环境(MFC版本)
 - OpenGL ES Windows 搭建环境(MFC版本)
 - OpenGL ES 版本检测
 
ChatGPT 3.5 国内中文镜像站免费使用啦


![模拟真人鼠标轨迹算法(支持C++/Python/易语言)[鼠标轨迹API简介]-猿说编程](https://winsdk.cn/wp-content/uploads/2024/11/image-3.png)














暂无评论内容