如何在OpenGL 3.1中正确渲染到纹理

这将是我第一次渲染除默认帧缓冲区之外的任何内容,并且我的搜索表明FBO是完成此任务的途径。 实际上,它们似乎是我所见过的唯一方法 - 请纠正我,如果我错了。

我特意试图限制自己从3.1开始就是核心的OpenGL功能。 根据OpenGL wiki,自从3.0以来,FBO一直是核心。

我发现在建立宗教组织,以及如何纹理附加到他们大量的资源,但他们是(按OpenGL的维基)所有使用功能仅获核心自从3.2(例如,glFrameBufferTexture和glFrameBufferTextureLayer)。

使用OpenGL 3.1或更低版本渲染到纹理的正确/推荐的方法是什么? 应该指出的是,我将需要一个深度缓冲区来显示我正在渲染的内容(FBO提供的一个功能)。

注意:我最初的标题是“如何将纹理附加到OpenGL 3.1中的帧缓冲区对象”,但是如果还有其他选项,则会使用更通用的标题。


实际上,它们似乎是我所见过的唯一方法 - 请纠正我,如果我错了。

还有PBuffers,但你不想使用这些。 他们工作繁琐,难以设置,并可能在不方便的时候使其内容失效。 供参考:PBuffers是一种不可见的窗口。 他们自己无用,因为他们无法渲染成纹理; 即你必须在渲染到PBuffer后复制到纹理。 然后引入一个扩展来允许绑定一个PBuffer作为纹理。

不要打扰他们。

我特意试图限制自己从3.1开始就是核心的OpenGL功能

实际上Framebuffer Objects已经存在了很多很长的时间。 而且由于它们大部分都是内存管理,所以即使是最老的GPU也可以支持它们。 至少如果你让他们的格式类似于一个典型的屏幕帧缓冲。

在OpenGL-3 Framebuffer Objects是一个所谓的扩展之前,如果你看看framebuffer对象扩展的规范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之前不会找到任何核心的原因

链接地址: http://www.djcxy.com/p/34057.html

上一篇: How to properly render to a texture in OpenGL 3.1

下一篇: passing transformation matrix into shader