2012-06-21 38 views
0

我想讓OpenCL渲染到2D紋理。我第一次遇到功能clCreateFromGLTexture2D。我寫了,但是當我去編譯時,我發現它沒有定義。我終於發現它在「cl_gl.h」:鏈接錯誤clCreateFromGLTexture只

#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),&結果,NULL);是CL_TRUE,對於它的價值。]

感謝,

回答

2

嘗試更新的OpenCL庫到最新版本(1.2)。

clCreateFromGLTexture被定義爲的OpenCL 1.2標準的一部分,而clCreateFromGLTexture2DclCreateFromGLTexture3D是OpenCL的1.0的一部分。如果你的OpenCL庫不是最新的,你將會得到一個未定義的錯誤。

+0

我目前正在連接NVIDIA GPU Computing SDK 4.2。我曾經假設這支持OpenCL 1.2,因爲頭部聲明瞭OpenCL 1.2函數。但是,在4.2 SDK發行說明中(http://developer.download.nvidia.com/compute/DevZone/docs/html/doc/OpenCL_Release_Notes.txt),沒有提及OpenCL 1.2支持,其中最新的備註只記錄日誌文檔OpenCL 1.1。 – imallett

+0

仍然不存在於SDK 6.5中。 NVIDIA,我很失望。 – imallett

0

即使我有這個錯誤,我有一些困難的時間修復它。我猜你正在使用VS2010。 可能發生這種情況的原因包括:

  1. 您還沒有在項目屬性的參考庫 - >連接 - >輸入 - >附加庫的依賴

  2. 你編譯解決方案作爲32位和使用64位庫文件,反之亦然。

檢查出來。