我正在创建一个OpenFX插件来为虚拟现实系统做一些图像处理。
由于我们现有的处理代码和插件打算用于的主机都是基于OpenCL的,所以主机开发人员给了我一个扩展到OFX来共享OpenCL环境。
但是,我们的代码使用了C++ API (cl::Context),它们提供的扩展为我提供了一个指向C cl_context的指针。
有什么方法可以让我从cl_context中创建cl::Context,而不占用后者的所有权?(来自cl_command_queue的cl::CommandQueue也是如此)。API文档在线建议复制构造函数和赋值操作符都具有所有权。
发布于 2017-10-18 23:08:00
幸运的是,您可以检查OpenCL C++头,查看它到底做了什么(在底部它只进行can调用),您可以进入代码来验证它。在使用C和C++ API时,您必须小心OpenCL对象的保留/释放计数,特别是如果C++构造函数没有保留,但析构函数确实发布了,那么您就有了问题(因为您将从它们下面释放主机的上下文)。但是,它很容易修复,因为您只需在构造之后调用“在对象上保留自己”来平衡事情。我在C++中混合了C和OpenCL API,我也感受到了C++头的保留/发布理念,所以我感觉到了您的痛苦。奇怪的是,OpenFX主机的决心、维加斯、催化剂还是别的什么?在实现OpenCL的过程中,有一个统一的OpenFX扩展。
https://stackoverflow.com/questions/46813907
复制相似问题