GLX visual和FBconfig有什么区别?

问题描述 投票:3回答:2

我正在使用xcb在X11下学习OpenGL,我很难搞清楚visuals和fbconfigs(你在glxinfo中找到的那些)之间的区别

就我所见,视觉是一组与深度缓冲,模板缓冲,帧缓冲等相关的属性。与fbconfigs有什么不同,为什么一个优于另一个?

linux opengl x11
2个回答
3
投票

在X Window系统中,Visual封装了Display的颜色映射(颜色类型,颜色深度)。可以使用不同的Visuals配置相同的Display。

当OpenGL诞生时,在X System之后大约十年,在OGL部分创建了一个结构XVisualInfo,而不是在X系统中。这种新结构通过添加更多功能扩展了Visual类型,例如辅助缓冲区,双缓冲区和立体声。这个XVisualInfo用于创建gl-context。

1998年,GLX 1.3规范(在Khronos page找到它)增加了更多的功能,特别是GLXPbuffer用于屏幕外渲染,但比GLXPixmap更容易。还添加了透明度,多次采样和样品缓冲液。 GLXDrawable(Window或GLXPixmap,或者现在也是GLXWindow和GLXPbuffer)的配置与Visual能力差别太大,因此引入了GLXFBConfig

出于向后兼容性原因,当前的GLX 1.4规范允许使用XVisualInfo,如果您不使用GLX> 1.2功能。但是创建上下文的首选方式是GLXFBConfig。

请注意,渲染到GLXPbuffer不使用X Visual。另请注意,使用Framebuffer objects,因为OGL 3.0使得过时使用GLXPbuffer。


2
投票

视觉是X11本身的概念。它描述了颜色编码属性。一个特定的X11服务器我的晚餐有一组不同的视觉效果,而X11客户端(图形应用程序)可能会选择一个最适合它的用例。每个X11窗口都是针对一个视觉创建的。有关详细信息,请参阅the documentation about X11 visual types

在具有glX扩展的X11服务器上,有一些这样的视觉效果,通过OpenGL提供硬件加速渲染。在创建要用于GL渲染的X11窗口之前,需要查询合适的视觉效果。在传统的glX中,你可以使用例如glXChooseVisual来做到这一点。

另一方面,GLXFBConfig是一个仅与GLX本身相关的实体,经典X服务器对此一无所知。 GLXFBconfigs可用于创建名为P-Buffers的屏幕外渲染缓冲区(尽管如此,它现在已经过时了)。

可以将FBConfigs分为两组:

  1. GLXFBConfigs,你可以使用它来创建一个X11窗口。在这种情况下,FBConfig引用一些X11视觉ID,您可以使用glXGetVisualFromFBConfig来查询。
  2. GLXFBConfigs,可单独用于离屏渲染。没有关联的可视ID,因此您无法使用这些ID来创建X11窗口。

FBConfigs通过glxChooseFBConfig提供更新,更灵活的界面,因此即使你想要一个离屏窗口,最好使用FBConfig API。

典型的GL实现将为它支持的每种可视类型提供FBconfig,因此您应该在glxinfo输出中找到两次:作为实际视觉效果,以及或多或少相同的fbconfigs。此外,它还将提供更多fbconfig格式,这些格式对于X11窗口来说是不典型的(例如超过32位色深)。

© www.soinside.com 2019 - 2024. All rights reserved.