0

我试图让 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(未解决的外部问题)。我觉得这很可疑,因为我可以在使用clCreateFromGLBufferclCreateFromGLRenderbuffer时进行编译,而且这两者也在“cl_gl.h”中。

所以,我的问题是:为什么 clCreateFromGLTexture 没有定义,而在同一个模块中它旁边的函数有定义?我目前正在链接“OpenCL.lib”。还有什么我需要的吗?我什么也没看到。这是图书馆本身的问题吗?

[编辑:clGetDeviceInfo(device_id,CL_DEVICE_IMAGE_SUPPORT,sizeof(cl_bool),&result,NULL); 是 CL_TRUE,值得。]

谢谢,

4

2 回答 2

3

尝试将 OpenCL 库更新到最新版本 ( 1.2)。

clCreateFromGLTexture被定义为 OpenCL1.2标准的一部分,而clCreateFromGLTexture2DclCreateFromGLTexture3D是 OpenCL 的一部分1.0。如果您的 OpenCL 库不是最新的,您将收到未定义的错误。

于 2012-06-26T07:56:14.250 回答
0

即使我遇到了这个错误,我也很难修复它。我猜你正在使用VS2010。这可能由于以下原因而发生:

  1. 您没有在项目属性 -> 链接器 -> 输入 -> 附加库依赖项中包含对库的引用

  2. 您已将解决方案编译为 32 位并使用 64 位库文件,反之亦然。

一探究竟。

于 2012-07-08T05:52:57.780 回答