OpenCL 从一个OpenCL存储器对象查询OpenGL对象信息

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。如果这个参数为空,那么实际参数数据的字节大小将不会被返回。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程