我试图允许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,因为它的价值。]
谢谢,
答案 0 :(得分:3)
尝试将OpenCL库更新到最新版本(1.2
)。
clCreateFromGLTexture
被定义为OpenCL 1.2
标准的一部分,而clCreateFromGLTexture2D
和clCreateFromGLTexture3D
是OpenCL 1.0
的一部分。如果您的OpenCL库不是最新的,您将收到一个未定义的错误。
答案 1 :(得分:0)
即使我遇到了这个错误,我也很难解决它。我想你正在使用VS2010。 这可能由于以下原因而发生:
您尚未在项目属性中包含对库的引用 - >链接器 - >输入 - >其他库依赖项
您已将解决方案编译为32位并使用64位库文件,反之亦然。
检查出来。