Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用OpenGL 1.2版进行屏幕外渲染_Opengl - Fatal编程技术网

使用OpenGL 1.2版进行屏幕外渲染

使用OpenGL 1.2版进行屏幕外渲染,opengl,Opengl,使用新版本的OpenGL,我可以使用FBO进行屏幕外渲染,从FBO中读取像素,然后对数据执行我想执行的操作 如何使用不支持FBO的旧版本OpenGL(如OpenGL 1.2)进行屏幕外渲染 只需使用FBO扩展即可。FBO是一种驱动功能,而不是硬件功能,即使是最古老的GPU(我说的是不支持着色器,只是普通的固定功能管道)也可以做FBO。我仍然有一台旧的GeForce-2(1998年推出的那台)在使用中(在我用于数据考古的一台旧计算机上;它有ZIP驱动器、并行SCSI总线等等),甚至可以做FBO O

使用新版本的OpenGL,我可以使用FBO进行屏幕外渲染,从FBO中读取像素,然后对数据执行我想执行的操作

如何使用不支持FBO的旧版本OpenGL(如OpenGL 1.2)进行屏幕外渲染

只需使用FBO扩展即可。FBO是一种驱动功能,而不是硬件功能,即使是最古老的GPU(我说的是不支持着色器,只是普通的固定功能管道)也可以做FBO。我仍然有一台旧的GeForce-2(1998年推出的那台)在使用中(在我用于数据考古的一台旧计算机上;它有ZIP驱动器、并行SCSI总线等等),甚至可以做FBO

OpenGL中用于屏幕外渲染的传统(预FBO)机制是PBuffer。例如,对于Windows,它们是在中定义的。它们也可以在其他平台上使用,如Mac、Android等

除了pbuffers的古老性之外,它与FBO还有一个根本的区别:pbuffer支持是OpenGL窗口系统界面的扩展,而FBO支持是OpenGL本身的一个特性

这样做的一个推论是,对pbuffer的呈现发生在一个单独的上下文中。对于FBO,您只需创建一个新的OpenGL帧缓冲区对象,并在同一上下文中使用常规OpenGL调用对其进行渲染,这与pbuffer的情况不同。在这里,您可以设置一个要渲染到 屏幕外表面,而不是窗口表面。屏幕外表面是该上下文的主帧缓冲区,您可以在此单独的上下文中对pbuffer进行所有渲染

话虽如此,在使用PBuffer之前请三思。FBO支持,至少是一种扩展形式,已经存在很长时间了。我很难想象写一个新的软件,它需要在旧到不支持FBO的硬件上运行

FBO在几乎所有可能的方面都优于PBUFFER。主要的好处是,可以在没有特定于平台的API的情况下使用,并且它们不需要额外的上下文


FBO不容易支持的PBuffer支持的唯一情况是不希望创建窗口的纯屏幕外渲染。例如,如果要在可能没有显示器的服务器上渲染图像,pbuffer实际上是一种有用的机制。

Extensions?无论如何,你为什么要使用如此古老的东西呢?你可能需要使用窗口管理器来实现这一点。因此,除非你真的必须这样做,否则我建议你不要这样做。除非你也针对古老的CPU,否则软件渲染器将比尝试在古老的GPU上渲染更快、更少麻烦。@user57368你能更具体地描述软件渲染器吗?你是说其他的渲染库吗?@ShaoboZi不,你实际上可以得到一个软件渲染的OpenGL上下文,除非你也使用一个古老的操作系统,否则你会得到一个比OpenGL新的1.2版本高得多的版本,所以。glGenFrameBuffers api在OpenGL 3.0中可用,这使得FBO从v3.0开始可用,对吗?所以,在3.0版本之前。FBO通过扩展提供,而扩展可能不可用。当FBO扩展丢失时,需要回退。我就是这么想的。无论如何,我会尝试pbuffer和FBO扩展解决方案。这是正确的。我相信在FBO在3.0成为标准之前,有多个FBO扩展。我的理解是,FBO功能在3.0之前已经存在了相当长的一段时间,但ARB在如何准确定义标准版本方面存在问题。