从 cl_context 创建 OpenCL 上下文而不取得所有权
Create OpenCL Context from cl_context without taking ownership
我正在创建一个 OpenFX 插件来为 VR 系统做一些图像处理。
由于我们现有的处理代码和插件适用的主机都是基于 OpenCL 的,因此主机开发人员为我提供了 OFX 的扩展以共享 OpenCL 环境。
但是 - 我们的代码使用 C++ API (cl::Context),他们提供的扩展为我提供了指向 C cl_context.
的指针
有什么方法可以让我从 cl_context 创建一个 cl::Context,而无需取得后者的所有权? (cl_command_queue 中的 cl::CommandQueue 也是如此)。 API 在线文档建议复制构造函数和赋值运算符都拥有所有权。
幸运的是,您可以检查 OpenCL C++ header 以确切了解它的作用(在底部它只是进行 C API 调用),并且您可以进入代码以验证它。当同时使用 C 和 C++ API 时,您必须注意 OpenCL object retain/release 计数,特别是如果 C++ 构造函数不保留但析构函数确实释放,那么您有问题(因为你会从它们下面释放主机的上下文)。但是,它很容易修复,因为您可以在构建之后在 object 上调用 retain yourself 来平衡事情。我在 OpenCL 中混合使用了 C API 和 C++ API,而 C++ header 的 retain/release 哲学也让我很感动,所以我感受到了你的痛苦。好奇,OpenFX主机是Resolve、Vegas、Catalyst,还是别的? OpenFX 即将推出统一的 OpenCL 扩展。
我正在创建一个 OpenFX 插件来为 VR 系统做一些图像处理。
由于我们现有的处理代码和插件适用的主机都是基于 OpenCL 的,因此主机开发人员为我提供了 OFX 的扩展以共享 OpenCL 环境。
但是 - 我们的代码使用 C++ API (cl::Context),他们提供的扩展为我提供了指向 C cl_context.
的指针有什么方法可以让我从 cl_context 创建一个 cl::Context,而无需取得后者的所有权? (cl_command_queue 中的 cl::CommandQueue 也是如此)。 API 在线文档建议复制构造函数和赋值运算符都拥有所有权。
幸运的是,您可以检查 OpenCL C++ header 以确切了解它的作用(在底部它只是进行 C API 调用),并且您可以进入代码以验证它。当同时使用 C 和 C++ API 时,您必须注意 OpenCL object retain/release 计数,特别是如果 C++ 构造函数不保留但析构函数确实释放,那么您有问题(因为你会从它们下面释放主机的上下文)。但是,它很容易修复,因为您可以在构建之后在 object 上调用 retain yourself 来平衡事情。我在 OpenCL 中混合使用了 C API 和 C++ API,而 C++ header 的 retain/release 哲学也让我很感动,所以我感受到了你的痛苦。好奇,OpenFX主机是Resolve、Vegas、Catalyst,还是别的? OpenFX 即将推出统一的 OpenCL 扩展。