C++ 用于读取的OpenCL OpenGL互操作内核参数+;写

C++ 用于读取的OpenCL OpenGL互操作内核参数+;写,c++,opengl,opencl,C++,Opengl,Opencl,我正在尝试使用OpenGL纹理进行OpenCL/OpenGL互操作,如中所述。我想让我的宿主代码尽可能简单,所以我想使用“方法1”,从而使用clCreateFromGLTexture从OpenGL纹理创建OpenCL图像。本教程还说明了以下内容: 请注意,CL_MEM_WRITE_ONLY标志允许快速丢弃数据。如果内核需要读取当前纹理上下文,请使用CL_MEM_READ_WRITE。另外,在这种情况下,删除内核中映像访问的_write_only限定符 然而,这似乎不起作用。当我从内核中删除\uu

我正在尝试使用OpenGL纹理进行OpenCL/OpenGL互操作,如中所述。我想让我的宿主代码尽可能简单,所以我想使用“方法1”,从而使用
clCreateFromGLTexture
从OpenGL纹理创建OpenCL图像。本教程还说明了以下内容:

请注意,CL_MEM_WRITE_ONLY标志允许快速丢弃数据。如果内核需要读取当前纹理上下文,请使用CL_MEM_READ_WRITE。另外,在这种情况下,删除内核中映像访问的_write_only限定符

然而,这似乎不起作用。当我从内核中删除
\uuuu write\u only
时,使用平台Nvidia OpenCL 1.2 CUDA 10.0.132(驱动程序417.71),我得到一个编译错误:

错误:sust中的图像类型无效

不管那意味着什么。使用Intel OpenCL 2.1 UHD Graphics 620(驱动程序24.20.100.6286)平台,我得到以下信息:

CTHeader.h:1333:38:注意:候选函数不可行:对于第一个参数void u属性((可重载))write u imagef(只写image1d u数组,int2坐标,float4颜色),没有从“只读image2d u t”到“uu写image1d u数组”的已知转换

似乎image2D\u t默认为
\u只读

无论如何,我发现教程中提出的内容不受支持,至少不使用图像对象:

不支持对内核中同一映像内存对象的读映像和写映像调用

所以我想知道,由于本教程没有详细介绍如何设置内核参数,可能首先使用
image2d\u t
是错误的。由于参数的类型是主机端的
cu_mem
,因此我尝试使用
float*
,但迄今为止没有成功

我意识到我可以使用双缓冲或其他方法,比如使用PBO进行互操作,但正如我所说的,我想让事情尽可能简单,而且我只是想知道为什么会这样。有什么想法吗?

内核映像参数必须使用
\uuuu write\u only
\uuu read\u only
限定,直到OpenCL 2.0,它允许映像
\uu read\u write
,但必须遵循特殊规则(如屏障)才能获得正确的结果。请注意,映像还有一个限定符,指示主机如何访问它(只读、只读或读/写)。给定的映像可能在一个内核中是
\uuu write\u only
,然后在下一个内核中是
\uu read\u only
,这允许一个内核的结果反馈到下一个内核