我正在使用xcb在X11下学习OpenGL,并且很难弄清视觉效果与fbconfig(在glxinfo
中发现的视觉效果)之间的区别
据我所见,视觉效果是与深度缓冲区,模板缓冲区,帧缓冲区等相关的一组属性。fbconfigs有何区别?为什么一个比另一个更可取?
答案 0 :(得分:3)
在 X窗口系统中, Visual 封装了 Display 的颜色映射(颜色类型,颜色深度)。可以为同一台显示器配置不同的视觉效果。
当OpenGL诞生时,大约在X System之后的十年,结构XVisualInfo
是在OGL部分而不是X System中创建的。这种新结构通过添加更多功能(例如辅助缓冲区,双缓冲区和立体声)扩展了Visual
类型。这个XVisualInfo
用于创建gl上下文。
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。还请注意,由于OGL 3.0起使用Framebuffer objects,因此已不再使用GLXPbuffer。
答案 1 :(得分:2)
visual 是X11本身的概念。它描述了颜色编码属性。特定的X11服务器可以提供一系列不同的视觉效果,并且X11客户端(图形应用程序)可以选择最适合其用例的服务器。每个X11窗口都是针对一个视觉对象创建的。有关详细信息,请参见the documentation about X11 visual types。
在具有glX扩展名的X11服务器上,有一些这样的视觉效果可以通过OpenGL提供硬件加速渲染。在创建要用于GL渲染的X11窗口之前,需要查询合适的视觉对象。在传统的glX中,您可以使用glXChooseVisual
来做到这一点。
另一方面,GLXFBConfig
是仅与GLX本身相关的实体,传统X服务器对此一无所知。 GLXFBconfigs可用于创建称为P-Buffers的屏幕外渲染缓冲区(不过现在已经过时了)。
一个人可以将FBConfig分为两类:
glXGetVisualFromFBConfig
进行查询。 FBConfig通过glxChooseFBConfig
提供了一个更新且更灵活的界面,因此,即使您希望使用屏幕外的窗口,也最好使用FBConfig API。
典型的GL实现所要做的就是为其支持的每种视觉类型提供一个FBconfig,因此您应该在glxinfo
输出中找到两次:作为实际视觉,或多或少相同的fbconfig 。此外,它将提供更多的fbconfig,其格式对于X11窗口来说是不典型的(例如超过32位的色彩深度)。