这将是我第一次渲染除默认帧缓冲区以外的任何内容,并且我的搜索显示FBO是执行此任务的方法。实际上,从我所见,它们似乎是唯一的方法-如果我在此方面做错了,请纠正我。
我专门试图将自己限制为自3.1以来便已成为核心的OpenGL功能。根据OpenGL Wiki,FBO自3.0以来一直是核心。
我发现了大量关于设置FBO以及如何将纹理附加到它们的资源,但是它们都使用(自OpenGL Wiki以来)从3.2开始才是核心的函数(例如glFrameBufferTexture和glFrameBufferTextureLayer)。
使用OpenGL 3.1或更低版本来渲染纹理的合适/推荐方法是什么?应该注意的是,我将需要一个深度缓冲区来进行渲染(FBO提供的功能)。
注意:我最初的标题为“如何在OpenGL 3.1中将纹理附加到帧缓冲区对象。”,但是在有其他选项的情况下使用了更通用的标题。
实际上,从我所见,它们似乎是唯一的方法-如果我在此方面做错了,请纠正我。
还有PBuffers,但您不想使用它们。它们使用起来很麻烦,难以设置,并且可能在不方便的时候使它们的内容失效。供参考:PBuffers是一种不可见的窗口。它们本身就毫无用处,因为它们无法渲染为纹理。即您必须在渲染到PBuffer之后复制到纹理。然后引入了扩展,以允许将PBuffer绑定为纹理。
不要打扰他们。
我专门试图将自己限制为自3.1以来便已成为核心的OpenGL功能。
实际上,帧缓冲对象已经存在了很多年了。而且由于它们主要是内存管理产品,因此即使是最老的GPU也可以支持它们。至少如果您要使其格式类似于典型的屏幕帧缓冲区。
直到OpenGL-3帧缓冲对象是所谓的扩展,直到您查看帧缓冲对象扩展的规范ARB_framebuffer_object,您就会看到它们当时已被批准使用12年的OpenGL-1.1。它的工作早已以EXT_framebuffer_object扩展的形式开始了。
因此,它们得到了很好的支持。如果您将自己限制为OpenGL-3,则不必理会,但如果您想支持更广泛的硬件(例如我最近的项目,则以OpenGL-2.1为目标),那么您将必须使用该扩展名。
根据OpenGL Wiki
OpenGL Wiki不是权威参考。规格是。根据OpenGL-3.0,这些功能是指定功能的一部分。请注意,OpenGL确实仅在OpenGL-3.2中引入了核心和兼容性配置文件,因此这就是为什么在OpenGL-3.2之前您不会找到任何核心的原因
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句