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

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

这将是我第一次渲染除默认帧缓冲区以外的任何内容,我的搜索表明FBO是执行此任务的方法。实际上,它们似乎是我所看到的唯一方法 - 如果我错了,请纠正我。

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

我已经在设置FBO以及如何为它们附加纹理方面找到了大量资源,但它们都使用了(根据OpenGL wiki)自3.2以来只有核心的函数(例如,glFrameBufferTextureglFrameBufferTextureLayer)。

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

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

opengl textures framebuffer opengl-3 render-to-texture
2个回答
2
投票

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

还有PBuffers,但你不想使用它们。它们使用起来很麻烦,难以设置并且可能在不方便的时候使其内容无效。供参考:PBuffers是一种看不见的窗户。它们本身就没用了,因为它们无法渲染到纹理;即渲染到PBuffer后必须复制到纹理。然后引入扩展以允许将PBuffer绑定为纹理。

不要打扰他们。

我特意试图限制自从3.1以来一直是核心的OpenGL功能

实际上帧缓冲对象已经存在了很长时间。而且因为它们主要是内存管理的东西,即使是最老的GPU也可以实际支持它们;至少如果你使他们的格式类似于典型的屏幕帧缓冲。

直到OpenGL-3 Framebuffer对象都是所谓的扩展,如果你看一下framebuffer对象扩展的规范ARB_framebuffer_object,你会发现它们已被批准当时12岁的OpenGL-1.1;之前已经开始以EXT_framebuffer_object扩展的形式开始工作了。

所以,他们得到了很好的支持。如果你限制自己使用OpenGL-3,你就不必费心了,但是如果你想支持更广泛的硬件(比如我最近的项目确实如此; OpenGL-2.1是目标),那么你将会必须使用该扩展名。

根据OpenGL维基

OpenGL wiki不是授权参考。规格是。根据OpenGL-3.0,这些功能是指定功能的一部分。请注意,OpenGL确实只引入了OpenGL-3.2的核心和兼容性配置文件,这就是为什么在OpenGL-3.2之前你不会找到任何核心的原因。


0
投票

你使用什么Windows版本?如果您至少拥有Intel HD 3000并使用Windows 10,则考虑降级到Windows 7并重新安装驱动程序,因为Windows 7适用于大多数应用程序,例如:我使用Windows 10,当我尝试使用GZDoom播放Doom时,它说要使用复古版本,因为我没有OpenGL 3.3,因为Intel HD 3000只支持OpenGL 3.1。虽然Windows都使用OpenGL 3.1,但Windows 7往往具有更多的功能兼容性。回到示例,在我降级到Windows 7之后,我尝试再次安装它,它似乎在没有任何补丁或调整的帮助下启动。所以这可能有用。

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