0

按照这个链接在 DirectX 中,我可以简单地添加以下行:

#include <d3d11.h>
#include <d3dx11.h>
#include <d3dx10.h>
#pragma comment (lib, "d3d11.lib")
#pragma comment (lib, "d3dx11.lib")
#pragma comment (lib, "d3dx10.lib")
...

指定我要编码的“最新”DX 版本。如何在 OpenGL 中实现这一点,这样我就可以确定我在编码时使用的是最新的 GL 库。我应该#define在代码中使用的东西或我的 GL 函数确定 OpenGL 的版本吗?

c++ 或其他软件中是否有一种方法可以判断我的 .exe 程序使用的是什么版本的 openGL?

4

1 回答 1

5

这不是 OpenGL 的工作方式。OpenGL 不是您静态链接到的东西(或者更确切地说,这不是您所要做的全部)。您必须(一般而言)动态加载您使用的 OpenGL 函数。这通常是通过使用某种类型的OpenGL 加载库来完成的,从而将其减少为 #include 标头并在初始化期间调用函数(在创建 OpenGL 上下文之后)。

您使用的 OpenGL 的“版本”取决于您的实现支持的版本以及您选择使用的函数/枚举。如果您的代码是针对 OpenGL 3.3 编写的,但您的实现支持 4.1,那很好;它向后兼容 3.3。

有很多方法可以询问正在提供哪个 OpenGL 版本的 OpenGL,但这是一个运行时查询,而不是编译时构造。您可以在上下文创建时显式请求一个版本(大于或等于您要求的版本),如果实现不支持该版本,这将导致上下文创建失败。

这使您的代码更加灵活。例如,如果 OpenGL 4.1 可用,您可以编写程序的可选部分以提供更多功能,但默认为 3.3。您不必使用两个(有些)不同的 API,或者构建一个合并它们共同元素的抽象。您只是在代码中的某处有一个条件来验证是否提供了 4.1,如果是,则调用其他一些函数。否则,你做 3.3 的东西。

于 2013-08-26T08:26:12.593 回答