OpenGL : How to set up OpenGL to just render to a FBO, 没有输出到屏幕/窗口/控件?

标签 opengl background initialization rendering fbo

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

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

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

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

最佳答案

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

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

关于OpenGL : How to set up OpenGL to just render to a FBO, 没有输出到屏幕/窗口/控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621024/

相关文章:

c++ - C++中 vector 初始化的性能

linux - 安装 VTK : matching usr/lib/libGL. so 构建系统配置中的路径

opengl - CAD中C2曲面是什么,C2是什么意思?

css - 获取 CSS 背景以覆盖众多 div

html - 如何更改网站不同位置的背景颜色?

swift - NSViewController : use of 'self' in delegating initializer before self. init 的子类被调用错误

c++ - 为什么我在带有 OpenGL 核心配置文件的窗口上看不到红色三角形?

OpenGL 聚光灯与 Cg

php - 使用 CSS 缩小 php 背景图片

variables - 使用 np.zeros 和使用 tf.zeros 初始化 Tensorflow 变量之间的区别