在Windows上使用OpenGL扩展
我想使用OpenGL扩展下暴露的功能。我在Windows上,该怎么做?
简单的解决方案:使用
GLEW.查看
here。
硬解决方案: 识别您希望使用的OpenGL扩展和扩展API。 OpenGL扩展在OpenGL Extension Registry中列出。
glGenFramebuffersEXT() glBindFramebufferEXT() glFramebufferTexture2DEXT() glCheckFramebufferStatusEXT() glDeleteFramebuffersEXT() 检查您的图形卡是否支持您希望使用的分机。如果是,那么你的工作几乎完成了!下载并安装您的显卡的最新驱动程序和SDK。
您的图形卡制造商提供了一个glext.h头文件(或类似的命名头文件),其中包含使用支持的OpenGL扩展所需的所有声明。 (请注意,并不是所有的扩展名都可能被支持。)将这个头文件放在某个地方,你的编译器可以把它或者把它的目录包含在编译器的include目录列表中。 添加#include< glext.h>在您的代码中包含头文件到您的代码。 打开glext.h,找到您希望使用的API,并抓取其相应的丑陋的声明。
typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n,GLuint *framebuffers); for GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei,GLuint *); 所有这些意味着您的头文件具有2种形式的API声明。一个是一个wgl般的丑陋的函数指针声明。另一个是一个理智的功能声明。 对于要使用的每个扩展API,将函数名的代码声明添加为丑陋的字符串的类型。
PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT; PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT; PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT; PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT; PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT; 虽然看起来很丑,但我们所做的就是声明与扩展API相对应的类型的函数指针。 初始化这些函数指针与其正确的功能。这些功能由库或驱动程序公开。我们需要使用wglGetProcAddress()函数来做到这一点。
glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) wglGetProcAddress("glGenFramebuffersEXT"); glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) wglGetProcAddress("glBindFramebufferEXT"); glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) wglGetProcAddress("glFramebufferTexture2DEXT"); glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) wglGetProcAddress("glCheckFramebufferStatusEXT"); glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) wglGetProcAddress("glDeleteFramebuffersEXT"); 不要忘记检查函数指针为NULL。如果偶然地wglGetProcAddress()找不到扩展函数,那么它将初始化为NULL的指针。
if (NULL == glGenFramebuffersEXT || NULL == glBindFramebufferEXT || NULL == glFramebufferTexture2DEXT || NULL == glCheckFramebufferStatusEXT || NULL == glDeleteFramebuffersEXT) { // Extension functions not loaded! exit(1); } 就这样,我们完成了!现在可以使用这些函数指针,就像函数调用存在一样。
glGenFramebuffersEXT(1,&fbo); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fbo); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D,colorTex[0],0); 参考:Moving Beyond OpenGL 1.1 for Windows by Dave Astle – 这篇文章有点过时了,但是您需要了解所有的信息,以了解为什么Windows可能存在这种可疑情况以及如何解决这个问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Windows上运行任意的子进程,并且仍然彻底终止?
- windows-server-2008 – 修改Active Directory连接对象
- Windows 10后卫离线扫描日志/结果在哪里?
- windows – Powershell配色方案?
- 在Windows中使用SSH服务器,无法找到共享库
- jboss7.x – 无法登录到windows上的jboss 7.1管理控制台
- windows – 如何为下次重启计划表面扫描(chkdsk),而不是现在
- windows-server-2003 – 保护内部服务器的RDP
- 为什么Windows命令提示符会在执行长批处理文件或程序时按下
- Microsoft Azure 讲座走进吉林大学