2013-07-23 122 views
22

好吧,所以我已经知道为什么我需要GLEW,但只能达到一个点。GLEW是做什么的,为什么我需要它?

如果我使用现代OpenGL的东西,可能从3.0版本开始,和/或使用核心配置文件,那么GLEW是必需的,因为没有编译产生的错误,如glGenVertexArrays没有声明。

所以GLEW确实有点后台工作,包括我们想用,可能是现代的OpenGL函数。

除此之外,它做什么吗?另外,它是如何工作的。

作为一个例子,它提高跨平台编译? (例如,如果从Linux迁移到Windows或OS X,需要对代码进行较少的修改?

它是否也改进了图形硬件的“跨平台性”?例如,假设我们有两台相同的计算机,包括OS。在一个系统上使用OpenGL 4.3命令编译程序,如果另一个系统具有仅支持OpenGL 3.3的图形卡或驱动程序,GLEW是否可以提供帮助(编译旧版OpenGL的着色器,或许?)

所以,你很可能会看到我真的不知道GLEW做什么或它是怎么做的

最后一点;?没有人知道如何使用GLEW与GLFW我会张贴作为一个单独的疑问句实际上。

回答

11

GLEW不是“必要”,因为你把它。你可以使用glcorearb.h头文件或类似的东西。但是,如果您使用某种功能进行链接 - 它必须存在于目标平台上,否则您的程序将无法启动。 GLEW和其他人正好处理这个问题 - 你不直接与GL函数链接,而是在初始化阶段后获取函数指针。它允许您在运行时检查哪些扩展存在以及可以使用哪些功能。

它的便携性越来越函数指针帮助的唯一的事情 - 这可能是wglGetProcAddress/glxGetProcAddress,它是模拟苹果操作系统。所以不,这不是一个案例。但是,可用的GL扩展的种类是。

GLEW无需接触点与你的首选GL初始化库 - 只需拨打glewInit创建GL上下文后。

+0

如果我创建一个窗口,然后调用glewInit()我得到一个segfault错误? – user3728501

+0

@EdwardBird:您是否在该窗口上创建了OpenGL上下文?调用glewInit时OpenGL上下文是否处于活动状态? – datenwolf

+0

是的,我做了,但我已经解决了这个问题 - 无论如何(: – user3728501

5

要正确初始化GLEW OpenGL上下文必须创建wglMakeCurrent()必须调用调用glewInit();

我就要把它放到keltar的答案的评论之前,但我看不出如何。

+0

谢谢你的加入 - upvoted – user3728501

相关问题