我试图让 OpenCL 渲染到 2D 纹理。我第一次遇到函数clCreateFromGLTexture2D。我写进去了,但是我去编译的时候发现没有定义。我最终在“cl_gl.h”中找到了它:
#ifdef CL_USE_DEPRECATED_OPENCL_1_1_APIS
#warning CL_USE_DEPRECATED_OPENCL_1_1_APIS is defined. These APIs are unsupported and untested in OpenCL 1.2!
extern CL_API_ENTRY cl_mem CL_API_CALL
clCreateFromGLTexture2D(cl_context /* context */,
cl_mem_flags /* flags */,
cl_GLenum /* target */,
cl_GLint /* miplevel */,
cl_GLuint /* texture */,
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
extern CL_API_ENTRY cl_mem CL_API_CALL
clCreateFromGLTexture3D(cl_context /* context */,
cl_mem_flags /* flags */,
cl_GLenum /* target */,
cl_GLint /* miplevel */,
cl_GLuint /* texture */,
cl_int * /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
#endif /* CL_USE_DEPRECATED_OPENCL_1_2_APIS */
所以,我在“cl_gl.h”的其他地方看了看,我找到了clCreateFromGLTexture。为了向前兼容,我将其写入代码中。但是,函数 clCreateFromGLTexture 会导致 LNK2019(未解决的外部问题)。我觉得这很可疑,因为我可以在使用clCreateFromGLBuffer和clCreateFromGLRenderbuffer时进行编译,而且这两者也在“cl_gl.h”中。
所以,我的问题是:为什么 clCreateFromGLTexture 没有定义,而在同一个模块中它旁边的函数有定义?我目前正在链接“OpenCL.lib”。还有什么我需要的吗?我什么也没看到。这是图书馆本身的问题吗?
[编辑:clGetDeviceInfo(device_id,CL_DEVICE_IMAGE_SUPPORT,sizeof(cl_bool),&result,NULL); 是 CL_TRUE,值得。]
谢谢,