OpenCL扩展API提供了查询指定OpenCL存储器对象是从哪个OpenGL对象被创建出来的。通过以下函数进行查询:
cl_int clGetGLObjectInfo(cl_mem memobj,
cl_gl_object_type *gl_object_type,
GLuint *gl_object_name)
- 参数memobj就是指定的所要查询的OpenCL存储器对象。
-
参数gl_object_type用于输出memobj所附属的OpenGL对象的类型。它可以是:
- CL_GL_OBJECT_BUFFER,表示普通的OpenGL缓存对象类型(VBO);
- CL_GL_OBJECT_TEXTURE2D,表示2D纹理对象;
- CL_GL_OBJECT_TEXTURE3D,表示3D纹理对象;
- CL_GL_OBJECT_TEXTURE2D_ARRAY,表示2D纹理数组对象;
- CL_GL_OBJECT_TEXTURE1D,表示1D纹理对象;
- CL_GL_OBJECT_TEXTURE1D_ARRAY,表示1D纹理数组对象;
- CL_GL_OBJECT_TEXTURE_BUFFER,表示纹理缓存对象;
- CL_GL_OBJECT_RENDERBUFFER,表示渲染缓存对象。如果此参数为空,那么该函数被调用后将不返回OpenGL对象类型。
- 参数gl_object_name用于返回memobj所附属的OpenGL对象句柄。
如果指定的OpenCL存储器对象是从一个OpenGL纹理对象类型所创建的(即使用的是clCreateFromGLTexture这个函数API),那么还可以通过以下函数来进一步查询纹理信息:
cl_int clGetGLTextureInfo(cl_mem memobj,
cl_gl_texture_info param_name,
size_t param_value_size,
void *param_value,
size_t *param_value_size_ret)
这里的param_name参数用于指明当前要查询哪种类别的纹理信息。这个参数只能为CL_GL_TEXTURE_TARGET或CL_GL_MIPMAP_LEVEL。如果这个参数为CL_GL_TEXTURE_TARGET,那么参数param_value用于返回纹理目标类型,可能返回的值有:GL_TEXTURE_1D、GL_TEXTURE_1D_ARRAY、GL_TEXTURE_BUFFER、GL_TEXTURE_2D、GL_TEXTURE_2D_ARRAY、GL_TEXTURE_3D、GL_TEXTURE_CUBE_MAP_POSITIVE_X、GL_TEXTURE_CUBE_MAP_POSITIVE_Y、GL_TEXTURE_CUBE_MAP_POSITIVE_Z、GL_TEXTURE_CUBE_MAP_NEGATIVE_X、GL_TEXTURE_CUBE_MAP_NEGATIVE_Y、GL_TEXTURE_CUBE_MAP_NEGATIVE_Z或GL_TEXTURE_RECTANGLE。如果此参数为CL_GL_MIPMAP_LEVEL,那么参数param_value将用于返回mipmap的细节度。
- 参数param_value_size用于指定参数param_value所指向的有效存储空间区域大小(单位为字节)。如果是4,那么就指明param_value的有效存储空间区域为4个字节。
- 参数param_value_size_ret用于存放实际所返回的参数数据尺寸大小。如果,参数param_value指向了一个8字节的空间,而实际所返回的参数大小只有4个字节,那么param_value_size_ret所指向的变量里将会是4。如果这个参数为空,那么实际参数数据的字节大小将不会被返回。