从cl_context创建OpenCL上下文而不取得所有权

时间:2017-10-18 15:30:10

标签: c++ c plugins opencl openfx

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

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

然而 - 我们的代码使用C ++ API(cl :: Context),他们提供的扩展为我提供了一个指向C cl_context的指针。

有没有办法让我从cl_context创建一个cl :: Context而不取得后者的所有权? (和cl_command_queue中的cl :: CommandQueue相同)。在线API文档表明,复制构造函数和赋值运算符都具有所有权。

1 个答案:

答案 0 :(得分:3)

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