我现在正在学习OpenGL,并在上面写了一些几何抽象供个人使用。我希望我的代码具有最大的可移植性,并且我希望在调用者代码中初始化GL上下文(通过FLTK、wxWidgets、WinAPI或任何其他支持的平台)。
我现在正在读这篇流行的文章:https://learnopengl.com/Getting-started/Creating-a-window
作者建议在那里使用GLAD库,因为这个库提供了GL上下文的创建(这不适合我),而且它还用于“检索函数的地址”(引用:“由于有许多不同版本的OpenGL驱动程序,它的大多数函数的位置在编译时是未知的,需要在运行时查询”)。
我的问题如下:
编译器真的不能从我在Visual Studio的链接器设置中指定的与GL相关的.obj文件中获取Opengl函数的地址吗?我真的需要使用wglGetProcAddress例程来引用OpenGL函数吗?是否可以像从链接头和.obj文件中使用任何其他函数一样使用OpenGL函数?
发布于 2019-03-21 02:41:34
作者建议在那里使用GLAD库,因为这个库提供了GL上下文的创建(这不适合我)
不,GLAD不会以任何方式创建或管理GL上下文,网站https://learnopengl.com/Getting-started/Creating-a-window也不会另行声明。它们使用GLFW进行上下文和窗口管理。
编译器真的不能从我在Visual Studio的链接器设置中指定的与GL相关的.obj文件中获取Opengl函数的地址吗?
编号:
首先,您没有为链接器指定与OpenGL相关的.obj文件,但是在Windows上,您可以使用opengl32.lib,这是opengl32.dll的导入库文件,它随Windows95以后的每个windows版本一起提供。
然而,这个DLL并不包含您通常使用的OpenGL实现,但它包含了微软的GDI 1.1GDI软件光栅化器。windows上的实际OpenGL实现是由图形驱动程序附带的可安装客户端驱动程序提供的。对于ICD1.0和1.1函数,opengl32.dll将充当trampoline,并将调用转发到实际的ICD。
如果要调用OpenGL 1.1之外的任何OpenGL函数(该函数来自1997年),则必须在所有情况下使用OpenGL扩展机制,因为opengl32.dll 在所有中都不提供这些入口点,编译器/链接器当然找不到它们。
https://stackoverflow.com/questions/55267854
复制相似问题