2

我正在创建一个 OpenFX 插件来为 VR 系统进行一些图像处理。

由于我们现有的处理代码和插件所针对的主机都基于 OpenCL,因此主机开发人员为我提供了 OFX 的扩展以共享 OpenCL 环境。

但是 - 我们的代码使用 C++ API (cl::Context),并且他们提供的扩展给了我一个指向 C cl_context 的指针。

有什么方法可以让我从 cl_context 创建一个 cl::Context ,而不获取后者的所有权?(对于来自 cl_command_queue 的 cl::CommandQueue 也是如此)。API 文档在线建议复制构造函数和赋值运算符都拥有所有权。

4

1 回答 1

3

幸运的是,您可以检查 OpenCL C++ 标头以确切了解它的作用(在底部它只是进行 C API 调用),并且您可以单步执行代码来验证它。在同时使用 C 和 C++ API 时,您必须注意 OpenCL 对象的保留/释放计数,特别是如果 C++ 构造函数不保留但析构函数确实释放,那么您就会遇到问题(因为您会释放主机的上下文从他们下面)。但是,它很容易修复,因为您可以在构造后调用在对象上保留自己以平衡事情。我在 OpenCL 中混合了 C API 和 C++ API,这也是 C++ 标头的保留/发布理念让我感到困惑,所以我感受到了你的痛苦。好奇,OpenFX 主机是 Resolve、Vegas、Catalyst 还是其他?那里'

于 2017-10-18T23:08:00.393 回答