2012-09-01 47 views
12

我花了一天時間努力讓我的簡單引擎在Mac上運行。我有SDL的工作,現在唯一給麻煩的是opengl。引擎使用現代opengl(基於着色器),因此需要GLEW。我已經嘗試了從fink到MacPorts的一切安裝,並沒有任何工作。適用於Mac OSX的大樓專用狗

我得到的最成功的是從源頭上構建它。首先我得到一個錯誤,說'GL/glu.h' no such file or directory found.所以我改名爲包括OpenGL/glu.h,並修復了這個問題。但現在我得到這個錯誤ld: unknown option: -shared我完全卡在這一點。

此外,如果有人知道如何做到這一點,而不是靜態構建。

+0

我會建議使用像macports,fink,homebrew這樣的ports系統,因爲作者將完成將構建過程移植到OSX的工作。在這種情況下,OSX鏈接器不理解 - 共享,所以你需要使用它的等價物,並會出現其他幾個問題 – Mark

+0

正如我所說我使用Macports,它說它已經成功,但沒有安裝 – Constan7ine

+1

什麼'sudo port install glew'給錯誤? – Mark

回答

11

該發動機採用現代的OpenGL(着色器爲基礎),因此需要GLEW

GLEW不是使用OpenGL的現代功能的先決條件。它是一個加載擴展功能的方法,而不是只有一個。你在MacOS X上,所以擴展系統對你來說幾乎沒有用處,因爲支持的OpenGL版本完全取決於操作系統和可用的框架。 Apple自己開發OpenGL驅動程序,並且它們提供的擴展只是那些用於OpenGL規範(即供應商特定和EXT)中未找到的功能的擴展。你所需要的只是OpenGL框架的新版本。 2006年之後發佈的任何MacOS X都可以做到。

+1

包括GLEW的程序如何移植到OS X上進行編譯? – Efren

+2

@Efren:檢查'__APPLE__'預處理器宏,並且只有在那個*未定義的時候才包含GLEW頭。對於'__APPLE__'被定義的情況,定義(空)將'glew ...'函數調用變成空操作的宏。 – datenwolf

+0

所以,當不包括GLEW頭,什麼蘋果頭可用?我的意思是,舊程序實際上是調用這些函數。 – Efren

3

我已經安裝使用從源代碼使用GLEW:

使GLEW_DEST = 「$ HOME /本地」 OPT = 「 - 三月=的Core2 -02」 install.all

你的優化和目的地可能會有所不同。這產生了一個libGLEW.a,libGLEWmx.a和$HOME/local/lib中的dylib對應部分。 pkgconfig子目錄也將包括glew.pc。 GLEW並不總是與其他人一起玩。不必設置全局像glewExperimental,以及爲需要小心包含其他頭的順序:<OpenGL/gl3.h><glfw.h>

如果我可以提供一些建議 - 忘記SDL現代GL編程。如果你想進入純粹的,在OS X上的現代GL。 - 考慮是這樣的:

#if defined (__APPLE_CC__) 
#include <OpenGL/gl3.h> 
#else 
#include <GL/gl3.h>  /* assert OpenGL 3.2 core profile available. */ 
#endif 

#define GLFW_INCLUDE_GL3 /* don't drag in legacy GL headers. */ 
#define GLFW_NO_GLU  /* don't drag in the old GLU lib - unless you must. */ 

#include <GL/glfw.h>  /* simple and easy to use. omit legacy GL. */ 

安裝GLFW是很容易的事:

> ENV PREFIX = 「$ HOME /本地」 CFLAGS = 「 - 三月=的Core2 -02」 讓可可可可dist-install

同樣,您的設置可能會有所不同。


20160412:我對SDL的意見是過時的,正如其他人指出。特別是如果你在另一個引擎上工作。我認爲glfw3是在OSX上製作現代OpenGL應用程序的一種更簡單的方法。它非常好的編寫和維護代碼,對GL和事件處理進行了精確的(正確的)關注。顯然,從'引擎'的角度來看,SDL2提供了可移植的擴展視頻API,音頻API,線程API等。儘管使用C11和C++ 11,甚至線程API抽象層也許是多餘的。

GLEW存在問題,因爲在無需大量用戶干預的情況下無法處理多個上下文。這對OSX來說不是問題,OSX提供了一個核心配置文件API,並且不需要加載「功能點」。 IIRC,GL上X(DRI?)也有這個 - 但我可能是錯誤的。那裏還有其他的裝載機。我仍然在等待一個人來統治他們,這可以確保在必要時爲不同的函數指針加載多個上下文,並且使用線程本地(或者甚至是一個pthread鍵)進行正確的分派,這可以從最新的gl從Khronos的,或者誰的.xml ...

+6

「忘記用於現代OpenGL編程的SDL」。此評論現在已過時。 SDL2允許您指定OpenGL上下文的版本。 –

+1

作爲一個使用OpenGL和SDL開展業餘愛好項目的人,很難對OpenGL格局有一個很好的理解。我正在使用OpenGL的SDL2,並試圖首次加載着色器。但是,很難說出我甚至在使用哪種版本的OpenGL。你可以(@mlabbe或其他)建議任何資源,這將有助於此?大多數情況下我找到狹窄的教程。 – michaelgulak

+0

我建議對OpenGL的超級版本進行修改,使其與您所定位的OpenGL版本相對應。它側重於核心配置文件,該配置文件消除了傳統呼叫。這比隨機谷歌搜索更有效。 http://docs.gl/對於將調用與版本進行匹配也很有用。 –

4

的MacPorts應該得到安裝那些庫及其依賴你:

sudo port install glew +universal 
sudo port install libsdl +universal 

在構建你的遊戲,這是最好的叫G ++的建設和鏈接步驟中都;您只需參考/opt/local就可以找到已由MacPorts安裝的標頭和庫。您也可以靜態鏈接的.a文件,如果你想:

g++ -c -O3 -I/opt/local/include main.cpp -o main.o 
g++ main.o /opt/local/lib/libSDL.a /opt/local/lib/libSDLmain.a /opt/local/lib/libGLEW.a -o mygame 

如果你在命令行建設,我建議using a Makefile and building with make

20

您可以使用Homebrew做的工作適合你:

brew install glew 
+2

然後呢?我完全不熟悉這一點,我正在努力完成這項工作。安裝完成,但我仍然無力接下來做什麼。 –

+0

http://stackoverflow.com/a/17601607/5442132 – miqdadamirali

+0

@RafaelEyng之後,在'main.cpp'中編寫代碼,然後使用'clang ++ main.cpp -lGLEW -framework OpenGL -o '(和如果您使用其他庫,則可以添加'-lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo')。 –

2

我會建議去http://glew.sourceforge.net和ZIP文件下載到正確的Mac。然後進入Finder並輸入glew.h來查看文件,控制單擊它,獲取信息,並將路徑複製到文件中。然後進入你的各個程序文件,其中包含#include <GL/glew.h>依賴(如commons.h),並將其更改爲:

#include <path/to/file/that/you/just/copied/glew.h> 

然後,再次嘗試編譯你的程序,這時候你不應該得到任何GLEW錯誤。

0

上面的答案都沒有給我我正在尋找的東西:一個快速的方式來設置和靜態Glew依賴項的Xcode項目。從這裏http://glew.sourceforge.net/

  • 類型

    $sudo make install 
    

    從解壓目錄

    1. 下載GLEW源(如果你想動態鏈接此安裝名爲.dylib)。你需要安裝CMake。

    2. 複製的。一個靜態庫從/ usr/local/lib目錄/到XCode項目
    3. 更新的「頭文件搜索路徑」爲目標,包括標題您的Xcode構建設置(通常放置在/ usr /本地/包括)。或者只是將標題複製到您自己的項目中。