2013-08-26 103 views
0

THIS LINK如下因素在DirectX中的代码,我可以简单地添加此行:的OpenGL如何确定最新版本

#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?

回答

5

这不是OpenGL的工作原理; OpenGL不是你静态链接的东西(或者说,你不得不这样做,全部是)。你必须(一般来说)dynamically load the OpenGL functions you work with。这通常是通过使用某种OpenGL loading library来完成的,因此在初始化过程中(在创建OpenGL上下文之后)将其减少到#include头部并调用一个函数。

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

有几种方法可以运行ask which OpenGL version of OpenGL is being provided,但这是一个运行时查询,而不是编译时构造。您可以在上下文创建时明确请求一个版本(大于或等于您要求的版本),如果该版本不受实现支持,则会导致上下文创建失败。

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