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