我想用功能暴露下载的扩展。我在窗户,我该怎么做这个?

有帮助吗?

解决方案

简单的解决方案:使用 GLEW.怎么看 在这里,.

很难解决方案:如果你有一个 真正强大的理由 不用GLEW,这是如何实现同样的没有它:

确定所载的延伸和扩展Api你想要使用的。载的扩展都列在 载扩展登记册.

例如:我希望使用的能力 EXT_framebuffer_object 扩展。Api我希望使用从这种扩展是:

glGenFramebuffersEXT()
glBindFramebufferEXT()
glFramebufferTexture2DEXT()
glCheckFramebufferStatusEXT()
glDeleteFramebuffersEXT()

检查你的图形卡支持扩展你希望使用。如果是这样,那么你的工作是几乎完成了!下载并安装最新的驱动程序和软件开发工具包进你的绘图卡片。

例如:显卡在我的电脑是 更6600GT.因此,我访问 独载扩展的规范 网页和发现的 EXT_framebuffer_object 扩展的支持。然后我下载最新的 独载SDK 并安装。

你的图形卡制造商提供了一个 glext.h 头文件(或类似的标题命名的文件)与所有声明需要使用的支持载的扩展。(注意并非所有的扩展可能的支持。) 要么把这个头文件的某个地方你的编译器可以把它捡起来,或包括其目录中的编译器的包括的目录清单。

增加一个 #include <glext.h> 线在代码中包括该标题的文件进入代码。

打开 glext.h, ,找到API你想使用,并抓住它的对应 丑陋的 《宣言》。

例如:我寻找上述帧缓冲区Api和找到它们相应的丑陋的声明:

typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); for GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *);

这一切都意味着这是你的头文件具有API宣言》2的形式。一个是wgl-喜欢丑陋的功能,指的声明。其他的是一个理智的查找功能的声明。

每个extension API你希望使用,添加在你的代码声明的功能,名为类型的丑陋的字符串。

例如:

PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;

虽然它看起来很丑陋,我们所做的是对申报功能的指针的类型相应延长。

初始化这些功能的指针有其应有的职能。这些功能都是由图书馆或驱动程序。我们需要使用 wglGetProcAddress() 功能做到这一点。

例如:

glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) wglGetProcAddress("glGenFramebuffersEXT");
glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) wglGetProcAddress("glBindFramebufferEXT");
glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) wglGetProcAddress("glFramebufferTexture2DEXT");
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) wglGetProcAddress("glCheckFramebufferStatusEXT");
glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) wglGetProcAddress("glDeleteFramebuffersEXT");

别忘了检查功能的指针 .如果通过机会 wglGetProcAddress() 没能找到扩展功能,这将已经进行初始化的指与空。

例如:

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);

参考: 超越载1.1for Windows 由戴维Astle—文章是一个有点过时,但所有你需要的信息,以了解为什么这个可怜的情况存在Windows和如何得到解决。

其他提示

一个非常强有力的理由'不使用GLEW可能的图书馆不是支持你的编译/IDE。例如:Borland C++的建设者。

在这种情况下,你可能希望重建的图书馆从源。如果它的工作,伟大的,否则手册》扩展加载不是那么糟糕,因为它是作出声音。

@Kronikarz:从外观上来看, GLEW 似乎是这样的未来。选已经在船舶及其 载SDK.及其最新发布的是2007年相比,到高兴,这是在2006年。

但是,使用的这两个图书馆看起来几乎相同的我。(GLEW有一个 init() 这需要任何东西之前虽然。) 所以,你不需要开除非你找到一些延不是被支持下高兴。

GL3W是一个公共领域的脚本,创建一个图书馆加载只有核心功能对照片的3/4。它可以在审查:

https://github.com/skaslev/gl3w

GL3W需要Python2.6产生的图书馆和信息载;它不需要蟒蛇之后。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top