发布于 2015-06-25 22:03:44
首先要理解的是,OpenGL只是与GPU交互的一组方法的规范。然后,如果您在windows或linux上,您的GPU供应商将提供该规范的实现附带的驱动程序。如果您在OSX上,则随操作系统一起提供执行程序。
要使用OpenGL,您需要一个OpenGL上下文。本质上是一些内存将保存OpenGL内部状态机的当前状态。要创建这样的上下文,您应该使用绑定库,比如格福或自由式。
然后,您需要访问OpenGL方法。在Windows上,您有只允许访问遗留OpenGL1.1的opengl32.dll库!如果您想要使用现代的OpenGL,您需要获得指向驱动程序公开的函数的指针。为此有几个加载库。我认为最常见的是格鲁。
OpenGL允许GPU供应商为规范提供自定义扩展。您可以像检索普通OpenGL函数一样检索这些函数。我再次建议使用glew,它也是一个扩展库。
然后,您需要一个标头来拥有所有这些函数的原型。但实际上glew也会处理这个问题。
发布于 2015-06-25 21:19:25
对于为特定操作系统定义的每个OpenGL支持,只有非常特定的OpenGL子集或版本被定义为严格的需求。对于Windows来说,它是OpenGL-1.1,对于Linux,根据LSB-4,它是OpenGL-1.2 (根据LSB-5,它是OpenGL-2.1),对于MacOS-X,每一个主要版本通常都会把它撞到最先进的OpenGL版本,当OS-X的特定版本的开发开始时(这就解释了OpenGL版本发布和它在OS-X中的支持之间的滞后)。
除了被固定在OS规范中的版本之外,不需要任何程序可用。这意味着,运行在Windows上的程序可能不会期望看到除了OpenGL-1.1被支持的其他任何东西。或者在Linux上使用OpenGL-1.2。超出这些版本的任何内容都是纯可选的,必须在运行时检查可用性,并且必须在运行时动态解析所需的所有函数入口点。
OpenGL加载器正是这样做的:它们检查哪个OpenGL版本配置文件实际上是受支持的,并将所有实际可用的函数加载到程序员可以访问的符号中;当然,如果在初始化后发现了这些函数,并且不支持它们,那么就不能使用这些函数。
https://stackoverflow.com/questions/31060640
复制相似问题