1

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

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

我找到了大量关于设置 FBO 以及如何将纹理附加到它们的资源,但它们都使用自 3.2 以来仅作为核心的函数(根据 OpenGL wiki)(例如glFrameBufferTextureglFrameBufferTextureLayer)。

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

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

4

2 回答 2

2

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

还有 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 之前你不会找到任何核心的原因

于 2013-11-09T11:48:13.793 回答
0

您使用什么 Windows 版本?如果您至少有 Intel HD 3000 并使用 Windows 10,那么请考虑降级到 Windows 7 并重新安装驱动程序,因为 Windows 7 可以很好地与大多数应用程序配合使用,例如:我使用 Windows 10,当我尝试使用 GZDoom 玩 Doom 时,它说要使用老式版本,因为我没有 OpenGL 3.3,因为英特尔 HD 3000 只支持最高 OpenGL 3.1。虽然这两个 Windows 都使用 OpenGL 3.1,但 Windows 7 往往具有更多的功能兼容性。回到示例,在我降级到 Windows 7 后,我尝试再次安装它,它似乎在没有任何补丁或调整的帮助下启动。所以这可能很有用。

于 2019-03-09T17:33:51.177 回答