GLX 视觉和 FBconfig 之间有什么区别?
What's the difference between a GLX visual and a FBconfig?
我正在使用 xcb 在 X11 下学习 OpenGL,我很难弄清楚视觉效果和 fbconfigs(您在 glxinfo
中找到的)之间的区别
据我所知,视觉效果是一组与深度缓冲区、模板缓冲区、帧缓冲区等相关的属性。与 fbconfigs 有什么区别,为什么一个比另一个更可取?
在X Window System a Visual 封装颜色映射(颜色类型,颜色深度)为显示。同一个 Display 可以配置不同的 Visuals。
当 OpenGL 诞生时,大约在 X System 之后十年,在 OGL 部分创建了一个结构 XVisualInfo
,而不是在 X System 中。这个新结构通过添加更多功能扩展了 Visual
类型,例如辅助缓冲区、双缓冲区和立体声。此 XVisualInfo
用于创建 gl-context。
1998 年的 GLX 1.3 规范(可在 Khronos page 找到它)添加了更多功能,特别是 GLXPbuffer
用于离屏渲染,但比 GLXPixmap
更容易。还添加了透明度、多重采样和样本缓冲区。 GLXDrawable
(Window 或 GLXPixmap,或者现在还有 GLXWindow 和 GLXPbuffer)的配置与视觉功能相去甚远,因此引入了 GLXFBConfig
。
当前的 GLX 1.4 规范允许,出于向后兼容性的原因,如果您不使用 GLX>1.2 的功能,则可以使用 XVisualInfo
。但是创建上下文的首选方法是使用 GLXFBConfig。
请注意,渲染到 GLXPbuffer 不使用 X Visual。另请注意,自 OGL 3.0 以来使用 Framebuffer objects 使 GLXPbuffer 的使用过时。
visual是X11本身的一个概念。它描述了颜色编码属性。一个特定的 X11 服务器我的晚餐是一组不同的视觉效果,而 X11 客户端(图形应用程序)可以选择最适合其用例的一个。每个 X11 window 都是针对一个视觉对象创建的。有关详细信息,请参阅 the documentation about X11 visual types。
在带有 glX 扩展的 X11 服务器上,有几个这样的视觉效果通过 OpenGL 提供硬件加速渲染。在创建要用于 GL 渲染的 X11 window 之前,您需要查询合适的视觉对象。在传统的 glX 中,您可以使用 glXChooseVisual
来做到这一点。
A GLXFBConfig
另一方面是一个只与 GLX 本身相关的实体,经典的 X 服务器对它一无所知。 GLXFBconfigs 可用于创建称为 P-Buffers 的屏幕外渲染缓冲区(不过现在有点过时了)。
可以将 FBConfig 分为两组:
- GLXFBConfigs,您可以使用它来创建 X11 window。在这种情况下,FBConfig 引用了一些 X11 视觉 ID,您可以使用
glXGetVisualFromFBConfig
来查询它。
- GLXFBConfigs,只能用于离屏渲染。没有关联的视觉 ID,因此您不能使用这些来创建 X11 windows with.
FBConfigs 通过 glxChooseFBConfig
提供更新和更灵活的界面,因此最好始终使用 FBConfig API,即使您想要屏幕外 window。
典型的 GL 实现会为它支持的每种视觉类型提供 FBconfig,因此您应该在 glxinfo
输出中找到两次:作为实际视觉效果,或多或少相同的 fbconfigs。此外,它将提供更多 fbconfigs,其格式对于 X11 windows(例如超过 32 位颜色深度)来说是不典型的。
我正在使用 xcb 在 X11 下学习 OpenGL,我很难弄清楚视觉效果和 fbconfigs(您在 glxinfo
中找到的)之间的区别
据我所知,视觉效果是一组与深度缓冲区、模板缓冲区、帧缓冲区等相关的属性。与 fbconfigs 有什么区别,为什么一个比另一个更可取?
在X Window System a Visual 封装颜色映射(颜色类型,颜色深度)为显示。同一个 Display 可以配置不同的 Visuals。
当 OpenGL 诞生时,大约在 X System 之后十年,在 OGL 部分创建了一个结构 XVisualInfo
,而不是在 X System 中。这个新结构通过添加更多功能扩展了 Visual
类型,例如辅助缓冲区、双缓冲区和立体声。此 XVisualInfo
用于创建 gl-context。
1998 年的 GLX 1.3 规范(可在 Khronos page 找到它)添加了更多功能,特别是 GLXPbuffer
用于离屏渲染,但比 GLXPixmap
更容易。还添加了透明度、多重采样和样本缓冲区。 GLXDrawable
(Window 或 GLXPixmap,或者现在还有 GLXWindow 和 GLXPbuffer)的配置与视觉功能相去甚远,因此引入了 GLXFBConfig
。
当前的 GLX 1.4 规范允许,出于向后兼容性的原因,如果您不使用 GLX>1.2 的功能,则可以使用 XVisualInfo
。但是创建上下文的首选方法是使用 GLXFBConfig。
请注意,渲染到 GLXPbuffer 不使用 X Visual。另请注意,自 OGL 3.0 以来使用 Framebuffer objects 使 GLXPbuffer 的使用过时。
visual是X11本身的一个概念。它描述了颜色编码属性。一个特定的 X11 服务器我的晚餐是一组不同的视觉效果,而 X11 客户端(图形应用程序)可以选择最适合其用例的一个。每个 X11 window 都是针对一个视觉对象创建的。有关详细信息,请参阅 the documentation about X11 visual types。
在带有 glX 扩展的 X11 服务器上,有几个这样的视觉效果通过 OpenGL 提供硬件加速渲染。在创建要用于 GL 渲染的 X11 window 之前,您需要查询合适的视觉对象。在传统的 glX 中,您可以使用 glXChooseVisual
来做到这一点。
A GLXFBConfig
另一方面是一个只与 GLX 本身相关的实体,经典的 X 服务器对它一无所知。 GLXFBconfigs 可用于创建称为 P-Buffers 的屏幕外渲染缓冲区(不过现在有点过时了)。
可以将 FBConfig 分为两组:
- GLXFBConfigs,您可以使用它来创建 X11 window。在这种情况下,FBConfig 引用了一些 X11 视觉 ID,您可以使用
glXGetVisualFromFBConfig
来查询它。 - GLXFBConfigs,只能用于离屏渲染。没有关联的视觉 ID,因此您不能使用这些来创建 X11 windows with.
FBConfigs 通过 glxChooseFBConfig
提供更新和更灵活的界面,因此最好始终使用 FBConfig API,即使您想要屏幕外 window。
典型的 GL 实现会为它支持的每种视觉类型提供 FBconfig,因此您应该在 glxinfo
输出中找到两次:作为实际视觉效果,或多或少相同的 fbconfigs。此外,它将提供更多 fbconfigs,其格式对于 X11 windows(例如超过 32 位颜色深度)来说是不典型的。