2015-05-29 87 views
0

我想在我的Mac上編譯一個OpenGL + OpenCL代碼,並在經過大量努力設法獲得安裝的依賴關係並理解如何鏈接它們(GLUI,GLUT, OpenCL等)。在OS X上編譯OpenGL + OpenCL代碼時出現錯誤

大多數錯誤被刪除,但有3個錯誤仍然堅持如下圖所示:

pranjal:~/parallel-prog$ g++-4.9 mittalp.cpp -fopenmp -framework OpenCL -framework OpenGL -framework GLUI -framework GLUT -w 

mittalp.cpp: In function 'void InitCL()': 
mittalp.cpp:465:69: error: 'wglGetCurrentContext' was not declared in this scope 
    CL_GL_CONTEXT_KHR, (cl_context_properties) wglGetCurrentContext(), 
                    ^
mittalp.cpp:466:62: error: 'wglGetCurrentDC' was not declared in this scope 
    CL_WGL_HDC_KHR, (cl_context_properties) wglGetCurrentDC(), 
                  ^
mittalp.cpp: In function 'void InitGlui()': 
mittalp.cpp:619:37: error: 'FALSE' was not declared in this scope 
    Glui->add_column_to_panel(panel, FALSE); 
            ^

我想我知道所有的編譯器標誌和無法編譯。該代碼在朋友的機器上的Windows上運行良好,但在我的Mac OS X上無法運行。我懷疑錯誤是因爲錯誤中列出的3個函數是特定於Windows的。由於我是OpenGL編程的新手,對於OS X等價函數或Mac上需要什麼庫才能使這些窗口特定函數有效,我沒有太多知識。

我已經添加了C++代碼here以供參考:

+1

如果您想要創建平臺獨立的項目,那麼我會建議使用像glfw這樣的庫,它將在平臺相關函數上創建一個抽象層,如'wglGetCurrentContext','glxGetCurrentContext'和'CGLGetCurrentContext' –

+0

@ t.niese:我已下載並安裝GLFW。你能告訴我什麼是我需要使用的等效函數而不是上面的平臺相關函數嗎? (或者我需要做更多的更改,而不僅僅是這些?) –

+1

glfw不提供_equivalent_函數,然後可以用作直接替換,它們創建一個抽象層,封裝平臺特定的函數以創建獨立於平臺的api。對於glfw頁面上的opengl部分,有一個簡單的[示例代碼](http://www.glfw.org/documentation.html),以及[入門](http://www.glfw.org/docs /latest/quick.html)解釋_main_函數的頁面。 –

回答

4

下面是我使用的用於初始化OpenCL上下文屬性,以使在Windows,OS X和Linux的OpenGL互操作的代碼:

#if defined(_WIN32) 

    // Windows                 
    cl_context_properties properties[] = { 
     CL_GL_CONTEXT_KHR, (cl_context_properties)wglGetCurrentContext(), 
     CL_WGL_HDC_KHR, (cl_context_properties)wglGetCurrentDC(), 
     CL_CONTEXT_PLATFORM, (cl_context_properties)platform, 
     0 
    }; 

#elif defined(__APPLE__) 

    // OS X                  
    CGLContextObj  kCGLContext  = CGLGetCurrentContext(); 
    CGLShareGroupObj kCGLShareGroup = CGLGetShareGroup(kCGLContext); 

    cl_context_properties properties[] = { 
     CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, 
     (cl_context_properties) kCGLShareGroup, 
     0 
    }; 

#else 

    // Linux                  
    cl_context_properties properties[] = { 
     CL_GL_CONTEXT_KHR, (cl_context_properties)glXGetCurrentContext(), 
     CL_GLX_DISPLAY_KHR, (cl_context_properties)glXGetCurrentDisplay(), 
     CL_CONTEXT_PLATFORM, (cl_context_properties)platform, 
     0 
    }; 

#endif 
+0

昨天晚上我花了很長時間來弄清楚這一切,現在我也得到了你的答案。 :) 謝謝!我還必須包括以下內容。除此之外,還有'#pragma OPENCL EXTENSION CL_APPLE_gl_sharing:enable'。 –

相關問題