fie*_*sor 5 linux windows opengl macos osx-lion
当我发现现在让我害怕使用的东西glext.h时,我只是在浏览OS X Lion上的OpenGL更新.
所以,这是错误.Lion的OpenGL.framework具有glext.h以下定义.
typedef void *GLhandleARB;
Run Code Online (Sandbox Code Playgroud)
但是glext.h来自OpenGL注册表的内容却是以下内容.
typedef unsigned int GLhandleARB;
Run Code Online (Sandbox Code Playgroud)
现在,麻烦的是,在Lion上为x86_64构建时,我们有sizeof(void*)==8,但是sizeof(unsigned int)==4.那么你信任什么?狮子头?还是OpenGL注册表的标题?好吧,当然你信任系统头,因为显然他们声称知道64位Lion上的ABI有64位GLhandleARB类型.
现在,这引发了一些关于各种平台的问题:
如果您必须使用Apple glext.h,但Apple glext.h不提供访问OpenGL 2.1之后的任何内容,那么如何在新卡上获得3.0+功能?
glext.h在Linux上使用OpenGL注册表是不安全的吗?或者你glext.h也必须在那里使用系统吗?在这种情况下,问题#1也适用于此.
如何赫克你处理Windows的事情,那里是从来没有一个glext.h系统上?您显然无法使用驱动程序供应商glext.h,因为不同的供应商可能不同意各种类型的大小.(或者这不是真的吗?)这里的交易是什么?
您应该使用官方 OpenGL 函数来获取您正在运行的 OpenGL 实例支持的扩展:glGetString(GL_EXTENSIONS)
至于你应该使用哪种类型,我认为苹果的邮件列表已经回答了这个问题:http://lists.apple.com/archives/mac-opengl/2005/Nov/msg00182.html
两个都; 该规范没有对 GLhandleARB 是什么做出任何声明,只是说它至少有 32 位宽。请注意,在 OpenGL 2.0 着色语言 API 中,没有 GLhandle 类型,它使用类似 GLuint 的纹理。另请注意,GLuint 在 Mac OS X 上不是一个 unsigned int,它是一个 unsigned long,所以你仍然被搞砸了:)