我是否需要分别为每个 opengl 上下文加载函数?
Do I need to load functions for every opengl context separately?
我正在尝试使用 glad 在 windows 上加载 opengl 函数。很快我发现我需要有有效的 opengl 上下文来加载函数。一切正常,但我不确定每次创建 window.
时加载 opengl 函数是否是个好主意
这些函数是否在多个 opengl 上下文之间共享,或者我是否需要为我创建的每个上下文加载它们?
您需要有效的 OpenGL 上下文才能建立与驱动程序的连接。只要两个上下文使用相同的驱动程序,一切都应该没问题,因为函数只是该驱动程序的 DLL 的入口点。
现在,如果您使用不同的驱动程序创建两个上下文,可能会出现问题。例如,如果您有两张来自不同供应商的显卡,就会发生这种情况。每个上下文都需要从相应的驱动程序加载功能。
函数加载的语义因环境而异:
WGL (=Win32):函数指针与上下文相关,因此您必须管理每个上下文的函数集并相应地使用它们。
GLX (=X11):函数指针在上下文之间是通用的,分派到实现发生在内部。
macOS:函数指针是通用的,但是少数动态加载的函数是 Apple 特有的,很少使用,所以这不是问题
我正在尝试使用 glad 在 windows 上加载 opengl 函数。很快我发现我需要有有效的 opengl 上下文来加载函数。一切正常,但我不确定每次创建 window.
时加载 opengl 函数是否是个好主意这些函数是否在多个 opengl 上下文之间共享,或者我是否需要为我创建的每个上下文加载它们?
您需要有效的 OpenGL 上下文才能建立与驱动程序的连接。只要两个上下文使用相同的驱动程序,一切都应该没问题,因为函数只是该驱动程序的 DLL 的入口点。
现在,如果您使用不同的驱动程序创建两个上下文,可能会出现问题。例如,如果您有两张来自不同供应商的显卡,就会发生这种情况。每个上下文都需要从相应的驱动程序加载功能。
函数加载的语义因环境而异:
WGL (=Win32):函数指针与上下文相关,因此您必须管理每个上下文的函数集并相应地使用它们。
GLX (=X11):函数指针在上下文之间是通用的,分派到实现发生在内部。
macOS:函数指针是通用的,但是少数动态加载的函数是 Apple 特有的,很少使用,所以这不是问题