OpenGL / OpenTK :在 OpenGL 控制中显示在后台线程上渲染的 FBO

发布于 2024-10-13 04:12:33 字数 123 浏览 4 评论 0原文

我通过 OpenTK 使用 OpenGL,并在后台线程中渲染到 FramebufferObject。 现在,在每一渲染帧之后,我想在 UI 中的一个或多个 OpenGL 控件中显示 FBO(部分)。

这是如何运作的?

I'm using OpenGL via OpenTK and I'm rendering to a FramebufferObject in a background thread.
Now after each rendered frame, I want to display (part(s) of) the FBO in one or more OpenGL controls in my UI.

How does that work ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

橪书 2024-10-20 04:12:33

您有两种选择:

  • 如果您的驱动程序支持上下文共享,您可以将 FBO 纹理绑定到 OpenGL 控件上并直接显示(绑定纹理、渲染四边形,完成)。简单而快速 - 只需确保渲染与显示同步即可。
  • 如果您的驱动程序不这样做,则必须通过 GL.ReadPixels 将渲染结果读回位图对象(或等效对象)。然后,您可以将它们作为纹理重新上传到其他 OpenGL 控件,或直接在非 OpenGL 控件上显示它们。

默认情况下,OpenTK 将始终尝试共享上下文。不幸的是,英特尔驱动程序不支持上下文共享,因此您不能使用第一种方法。

You have two choices:

  • If your drivers support context sharing, you can bind the FBO texture on your OpenGL controls and display that directly (bind texture, render quad, done). Simple and fast - just make sure to synchronize your rendering with the display.
  • If your drivers don't, you'll have to readback the results of the rendering into a Bitmap object (or equivalent) via GL.ReadPixels. You can then re-upload them to your other OpenGL controls as textures or display them directly on non-OpenGL controls.

By default, OpenTK will always try to share contexts. Unfortunately, Intel drivers don't support context sharing, so you cannot use the first approach there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文