What does GLEW do and why do I need it?

主宰稳场 提交于 2019-12-03 10:50:04

问题


Okay, so I already know why I need GLEW, but only up to a point.

If I am using modern OpenGL stuff, probably from version 3.0 onwards, and/or am using the Core Profile, then GLEW is required as without it compilation produced error such as glGenVertexArrays was not declared.

So GLEW does a bit of background work including the modern OpenGL functions we would like to use, probably.

Apart from that, does it do anything else? Also, how does it work.

As an example, does it improve cross-platform compilation? (Require less modifications to code if moving from Linux to Windows or OS X for example?

Does it also improved the "cross-platform-ness" of graphics hardware? For example, say we had two identical computers, including the OS. A program is compiled using OpenGL 4.3 commands on one system. If the other system has a graphics card or driver which only supports OpenGL 3.3, does GLEW help with that? (Compiling shaders for an older version of OpenGL, perhaps?)

So you can probably see I don't actually know what GLEW does or how it does it.

One last point; does anyone know how to use GLEW with GLFW? I might post that as a separate question actually.


回答1:


GLEW isn't 'required', as you put it. You could use glcorearb.h header, or anything like that. However, if you link with some function - it must exist on target platform, or your program wouldn't launch. GLEW and others are exactly to handle that - you're not linking with GL functions directly, but instead getting function pointers after initialization phase. It allows you to check at runtime which extensions are present and which functions may be used.

The only thing it helps with portability is getting function pointers - it may be wglGetProcAddress/glxGetProcAddress and it's analog for apple OSes. So no, it's not a case. However, the variety of available GL extensions is.

GLEW requires no touch points with your preferred GL initialization library - just call glewInit after creating GL context.




回答2:


To correctly init glew an OpenGL context must be created and wglMakeCurrent() must be called before calling glewInit();

I would put this into the comments of keltar's answer, but I don't see how.



来源:https://stackoverflow.com/questions/17809237/what-does-glew-do-and-why-do-i-need-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!