OpenGL:如何设置 OpenGL 只渲染到 FBO,不输出到屏幕/窗口/控件?

Posted

技术标签:

【中文标题】OpenGL:如何设置 OpenGL 只渲染到 FBO,不输出到屏幕/窗口/控件?【英文标题】:OpenGL : How to set up OpenGL to just render to a FBO, no output to screen / window / control? 【发布时间】:2011-01-06 23:15:03 【问题描述】:

首先,我在 WPF 应用程序中使用 OpenTK,但我认为这更像是一个通用的 OpenGL 的东西。

在我的应用程序中,我希望能够将 3D 内容渲染为纹理。 我不需要输出到屏幕上的窗口或控件 - 我只想渲染到背景纹理。

那么,我应该如何设置 OpenGL 来做到这一点? 通常,应使用 devicecontext 作为参数创建图形上下文。 但在我的情况下,我不想输出到设备上下文,我想使用与窗口或显示无关的设置(例如 1024x1024、32bpp、32 位 ZBuffer)渲染到固定大小的 FrameBufferObject。

我希望有人对这样的设置有任何经验:)

【问题讨论】:

【参考方案1】:

上下文创建超出了 OpenGL API 本身的范围。 GL 上下文由目标图形系统创建,如 Windows GDI、X11/GLX、Quartz/AGL。现在有一个叫做 PBuffers 的概念,它可以用来创建不绑定到窗口的硬件加速 OpenGL 上下文。然而,PBuffers 通常只能作为扩展访问,所以你需要一个 OpenGL 上下文才能做到这一点。解决方案是创建一个虚拟窗口,它永远不需要在屏幕上可见,并创建一个虚拟 GL 上下文来获取扩展。然后使用该 PBuffer 并在该 PBuffer 上创建一个 OpenGL 上下文。

但是,如果您想使用 FBO,则无需跳过 PBuffer 环。带有 OpenGL 上下文的不可见虚拟窗口也可以完成这项工作,因为渲染目标将是 FBO。

【讨论】:

以上是关于OpenGL:如何设置 OpenGL 只渲染到 FBO,不输出到屏幕/窗口/控件?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL渲染管道

OpenGL 3.3 2D 渲染:VAO 配置不正确?

OpenGL - 渲染到单通道纹理?

在渲染纹理上绘制时出现问题。 (OpengL 3.3)

Opengl:渲染到立方体贴图?

openGL 索引渲染问题