【问题标题】:Accessing data on the GPU from a dll?从 dll 访问 GPU 上的数据?
【发布时间】:2014-08-18 00:16:14
【问题描述】:

这就是问题所在:一个为 3D 应用程序修改顶点坐标(很多)的插件。 所有顶点都已经在 GPU 内存中,因此发送另一个副本到那里,进行计算,将结果发送回主内存,最后让主机应用程序再次将它们发送到 GPU 进行更新,这似乎很浪费。我确实需要在某个时候返回计算值,但性能问题是显示的快速更新。变形完成后,我并不关心更新后的坐标需要多长时间才能进入主内存。

这有可能吗? 我刚刚开始学习 OpenGL/OpenCL,所以我不要求详细解释该过程。仅以正常方式可行,或者仅通过一些深奥的破解可行,或者根本不可行。

感谢您的帮助!

【问题讨论】:

    标签: memory dll gpu


    【解决方案1】:

    是的,可以使用 OpenGL 和 OpenCL。您首先需要在 OpenGL 中创建顶点缓冲区。然后,您可以创建一个可以与 OpenGL 共享数据的 OpenCL 上下文。您可以使用clEnqueueAcquireGLObjects 获取指向缓​​冲区的指针。显然还有更多,谷歌 OpenGL OpenCL 互操作或 OpenGL OpenCL 共享上下文以获取必要的代码。

    注意:如果这是针对封闭源代码和预构建的应用程序,您可能无法获取 GL 上下文。

    【讨论】:

    • 抱歉,我应该说得更具体一些(而不是那么晚才发布)。插件 (dll) 通过其 SDK 连接到应用程序,该 SDK 不提供对其发送到 GPU 的内容的访问。因此我想知道它可能需要一些黑客攻击。
    • 我认为没有上下文和缓冲区对象的 OpenGL 句柄是不可能的。它们保存数据的内存位置和大小。没有它们,就像在 RAM 中搜索某些东西一样,您将不知道从哪里开始/停止查找、大小等,而且在 VRAM 上增加了复杂性。顺便说一句,既然您说的是 .dll,我假设您在 Windows 上,该应用程序有可能使用 DirectX。它还具有 OpenCL 互操作性,但我从未研究过它
    • 感谢您的回答。你在证实我害怕什么。 3D 应用程序有 Windows 和 Mac 版本,并使用 OpenGL(并用 C 编写)。目前,我只在 Windows 上工作。在他们的 SDK 的粗略文档中搜索了更多内容后,没有关于在 GPU 端访问数据的内容。当我知道更多时,我将不得不回到它。再次感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2014-10-15
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多