Aki*_*awa 7 c++ opengl version
我想确保我的应用程序符合OpenGL 2.1.我怎么检查这个?
因为我的计算机支持GL4.4,例如,即使我使用glGenVertexArrays()它,它也能成功运行.但glGenVertexArrays()仅适用于GL3 +.
所以,我想验证我的应用程序仅使用GL2.1功能.一种方法是在我只支持GL2.1的旧PC上运行它,但我正在寻找一种更简单的方法.
尝试https://github.com/cginternals/glbinding。它是一个 OpenGL 包装库,完全支持您的要求:
以功能为中心的标头设计
OpenGL API 是迭代开发和发布的版本,内部(针对 API 规范)名为features。OpenGL 的最新功能/版本是 4.5。以前的版本为 1.0、1.1、1.2、1.3、1.4、1.5、2.0、2.1、3.0、3.1、3.2、3.3、4.0、4.1、4.2、4.3 和 4.4。OpenGL 使用弃用模型来删除其 API 的过时部分,从而在目标 OpenGL 上下文中体现出兼容性(与弃用的 API)和核心(不带弃用的 API)使用。最重要的是,新的 API 概念被建议作为可能集成到未来版本中的扩展(通常是特定于供应商的)。所有这些导致您可以在程序中使用 OpenGL API 的许多可能的特定表现形式。
一项艰巨的任务是在您自己的 OpenGL 程序中遵守一组商定的功能(例如,如果您想为过去 4 年来发布的所有 Windows、macOS 和 Linux 进行开发,则使用 OpenGL 3.2 Core)。glbinding 通过通过 OpenGL API 的明确定义/生成的子集提供每个功能的标头来促进这一点。
全功能 OpenGL 标头
如果您不使用每个功能标头,OpenGL 程序可能如下所示:
Run Code Online (Sandbox Code Playgroud)#include <glbinding/gl/gl.h> // draw code gl::glClear(gl::GL_COLOR_BUFFER_BIT | gl::GL_DEPTH_BUFFER_BIT); gl::glUniform1i(u_numcubes, m_numcubes); gl::glDrawElementsInstanced(gl::GL_TRIANGLES, 18, gl::GL_UNSIGNED_BYTE, 0, m_numcubes * m_numcubes);单功能 OpenGL 标头
在安装了最新驱动程序的 Windows 上开发代码时,上面的代码可能会编译并运行。但如果您想将其移植到驱动程序支持不太成熟的系统(例如,使用开源驱动程序的 macOS 或 Linux),您可能想知道是否
glDrawElementsInstanced可用。在这种情况下,只需切换到glbinding的每个功能标头 并选择 OpenGL 3.2 Core 标头(正如您所知,至少此版本在所有目标平台上都可用):Run Code Online (Sandbox Code Playgroud)#include <glbinding/gl32core/gl.h> // draw code gl32core::glClear(gl32core::GL_COLOR_BUFFER_BIT | gl32core::GL_DEPTH_BUFFER_BIT); gl32core::glUniform1i(u_numcubes, m_numcubes); gl32core::glDrawElementsInstanced(gl32core::GL_TRIANGLES, 18, gl32core::GL_UNSIGNED_BYTE, 0, m_numcubes * m_numcubes);如果代码可以编译,那么您可以确定它符合 OpenGL 3.2 Core。防止使用尚不可用的功能或依赖已弃用的功能。
| 归档时间: |
|
| 查看次数: |
1090 次 |
| 最近记录: |