gpt4 book ai didi

java - 每帧通过 OpenGL 渲染两次,不同的库

转载 作者:行者123 更新时间:2023-12-02 11:06:22 26 4
gpt4 key购买 nike

我们正在尝试为我们的 java 框架制作内置游戏编辑器,它使用 GLFW 来渲染游戏。

我们想在它的基础上构建编辑器,使用 imgui

它也使用 OpenGL,与 GLFW 相同。我们不能触及 java 框架中的任何代码。

技术上是否可以使用 imgui 渲染游戏,然后让我们的框架再次通过 OpenGL 渲染自身?

在其他情况下,我们需要采取任何必要的步骤才能使其发挥作用吗?由于每个渲染调用都会交换缓冲区等...

最佳答案

您还有另一个非常相关的问题 here 。我会同时回答。

让我重新表述一下您的问题:“我有一个窗口,已在另一个应用程序中(或在我的应用程序的不可触摸代码部分中)使用 OpenGL 渲染。我怎样才能将我自己的渲染添加到此窗口,添加或替换像素?”

另一个应用程序(我们称之为“appA”)已经完成了一些任务:创建一个窗口,创建一个 gl-context(ctxA),将该上下文设置为某个线程的当前上下文(thrA),完成渲染并最终使用SwapBuffers 在屏幕上查看结果。

最简单的情况是,appA 代码是 appB 代码的一部分,并且 appA 尚未调用 SwapBuffers,并且您拥有窗口句柄和 ctxA。然后您可以执行相同的过程:将 ctxA 设置为当前线程(thrB 甚至 thrA,如果您有权访问它,例如是相同的主线程),进行渲染并调用 SwapBuffers。
==>但是你必须知道appA使用的是哪个OpenGL版本,并使用相同的版本来完成你的OpenGL工作。
==>您还必须确保当您的 appB 将 ctxA 设置为线程的当前线程时,appA 不会执行任何 OpenGL 命令。

一个更困难的情况是,您无法确定 appA 是否会在 appB 渲染的同时进行渲染。您可以使用共享上下文 ctxB (因此它与 ctxA most data 共享),您将其设置为您自己的线程 thrB 的当前上下文。
==>问题是无法知道谁先渲染,appA 还是 appB。

如果您了解了整个情况,那么您会发现主要问题是您需要阻止 appA 调用 SwapBuffers。如果您有这种可能性,那么可以在同一窗口中使用您自己的 ctx、线程和 OpenGL 内容。您应该能够通过 ReadPixels 读取默认帧缓冲区。

最坏的情况是当你只有窗口而没有其他东西时,或者当 SwapBuffers 已经被调用时。您仍然有机会:使用代码注入(inject)。该技术从图形驱动程序中获取对 SwapBuffers 的调用。然后,当它被调用时,进行像素修改,并让 SwapBuffers 像抓取之前一样运行。

关于java - 每帧通过 OpenGL 渲染两次,不同的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50930087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com