Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要使用外部OpenGL加载器函数而不是GLAD';什么是内置装载机?_Opengl_Glfw_Glad - Fatal编程技术网

为什么要使用外部OpenGL加载器函数而不是GLAD';什么是内置装载机?

为什么要使用外部OpenGL加载器函数而不是GLAD';什么是内置装载机?,opengl,glfw,glad,Opengl,Glfw,Glad,我已经在SFML中使用了一段时间了,并且一直在使用GLAD的内置函数加载器,gladLoadGL,它对我来说工作得很好。现在我在看GLFW,它在他们的指南和Khronos opengl wiki上都说,您应该使用gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)。有什么特别的原因吗 有什么特别的原因吗 例如,将gladLoadGL与GLFW结合使用会导致在同一程序中有两个代码部分,它们基本上做相同的事情,而没有任何好处 例如,看看(在其他平台上类

我已经在SFML中使用了一段时间了,并且一直在使用GLAD的内置函数加载器,
gladLoadGL
,它对我来说工作得很好。现在我在看GLFW,它在他们的指南和Khronos opengl wiki上都说,您应该使用
gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)
。有什么特别的原因吗

有什么特别的原因吗

例如,将gladLoadGL与GLFW结合使用会导致在同一程序中有两个代码部分,它们基本上做相同的事情,而没有任何好处

例如,看看(在其他平台上类似):

它会在您背后动态加载GL库。它还提供了查询OpenGL函数指针的抽象(核心指针和扩展指针,使用
wglGetProcAddress
和原始
getprocAddress

GL加载程序将生成:

现在有人可能会争辩说,两次加载同一个共享库并不是什么大问题,因为这会导致重复使用相同的内部句柄,并通过引用计数进行处理,但即便如此,这只是不必要的代码,并且在初始化过程中仍会消耗内存和一些时间

因此,除非您有一些非常具体的原因来解释为什么需要glad的代码——可能是以修改后的形式来真正执行其他操作(例如使用不同的GL库,而不是您的系统默认使用的库),否则此代码没有使用案例——并且不包含不需要的代码似乎是一个合理的建议

作为旁注:我经常看到使用GLFW和GL加载程序的项目,如GLAD或GLEW链接
opengl32.lib
libGL.so
在链接时-这也是绝对不必要的,因为代码总是在运行时手动加载库,并且在链接时不应该留下任何链接器可以从GL库解析的GL符号

_glfw.wgl.instance = LoadLibraryA("opengl32.dll");
    libGL = LoadLibraryW(L"opengl32.dll");