web-dev-qa-db-ja.com

Mac OSX用のビルドグルー

Macで私のシンプルなエンジンを動作させるのに苦労して1日を過ごしました。私はSDLを使用していますが、問題を引き起こすのはopenglだけです。エンジンは最新のopengl(シェーダーベース)を使用しているため、GLEWが必要です。私はそれをインストールするためにfinkからMacPortsまですべてを試しましたが、何も機能しません。

私が持っていた最も成功したのは、ソースから構築することです。最初に'GL/glu.h' no such file or directory found.と言ってエラーが発生したので、インクルードの名前をOpenGL/glu.hに変更して、その問題を修正しました。しかし、今、このエラーが発生しますld: unknown option: -sharedこの時点で完全に行き詰まっています。

また、誰かがそれを行う方法を知っている場合は、むしろ静的ビルドをIDします。

17
DavidColson

エンジンは最新のopengl(シェーダーベース)を使用しているため、GLEWが必要です。

GLEWは、最新のOpenGL機能を使用するための前提条件ではありません。 the 1つではなく、拡張機能をロードするためのaメソッドです。 MacOS Xを使用しているので、サポートされているOpenGLのバージョンはOSと使用可能なフレームワークによって完全に決定されるため、拡張システムはほとんど役に立ちません。 AppleはOpenGLドライバーを自分で開発し、それらが提供する拡張機能はOpenGL仕様にない機能(つまり、ベンダー固有およびEXT)用のものだけです。必要なのは、 OpenGLフレームワークは十分に新しく、2006年以降にリリースされたすべてのMacOS Xでそれを実行できます。

14
datenwolf

Homebrew を使用して作業を行うことができます。

brew install glew
29
yihangho

20180912を更新-GLEWを使用しないでください。それだけで問題はありません...


ソースを使用してGLEWをインストールしました:

make GLEW_DEST = "$ HOME/local" OPT = "-march = core2 -O2" install.all

最適化と宛先は異なる場合があります。これにより、libGLEW.a、libGLEWmx.a、および$HOME/local/libにそれらのdylibの対応物が生成されます。 pkgconfigサブディレクトリにはglew.pcも含まれます。 GLEWは常に他の人とうまくいっているわけではありません。 glewExperimentalのようなグローバルを設定する必要があること、および他のヘッダーを含める順序に注意する必要がある:<OpenGL/gl3.h>または<glfw.h>など。

私がいくつかのアドバイスを提供できる場合-現代のSDLを忘れるGLプログラミング。純粋に入りたい場合は、現代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/local" CFLAGS = "-march = core2 -O2" make cocoa cocoa-dist-install

ここでも、設定が異なる場合があります。


20160412:他の人が指摘したように、SDLに関する私のコメントは古くなっています。特に、まだ別のエンジンに取り組んでいる場合。私は、glfw3がOSXで最新のOpenGLアプリを作成するためのより簡単な方法であると私は主張します。 GLとイベント処理に焦点を当てた(正しく!)狭い範囲で、非常によく記述および保守されたコードです。明らかに、「エンジン」の観点から、SDL2はポータブル拡張ビデオAPI、オーディオAPIを提供しています、スレッドAPIなど。C11とC++ 11では、スレッドAPI抽象化レイヤーでさえ冗長である可能性があります。

GLEWは、ユーザーが広範囲に介入しないと複数のコンテキストを処理できないという問題があります。これは、コアプロファイルAPIを提供し、「関数ポイント」をロードする必要がないOSXの問題ではありません。 IIRC、GL on X(DRI?)にもこれがあります-しかし、私はそれについて間違っているかもしれません。そこには他のローダーがいます。それらすべてを支配する人がまだいるのを待っています。必要に応じて、さまざまな関数ポインターが複数のコンテキストに読み込まれるようにし、適切なディスパッチにスレッドローカル(またはpthreadキー)を使用します。これは、Khronosまたはその他の最新のgl.xmlから生成できます...


20180912

現時点で最も簡単なアプローチは、GLFWを使用してコンテキストを提供し、 [〜#〜] glad [〜#〜] を使用してGL関数ポインターを解決することです。唯一の欠点は、複数のGLコンテキストの効果的な管理がないことです。これは、GLFWがそのデモで現在使用しているものです...この時点でGLEWを完全に忘れてしまいます。

5
Brett Hale

MacPortsはそれらのライブラリとそれらの依存関係をインストールします:

Sudo port install glew +universal
Sudo port install libsdl +universal

ゲームをビルドするときは、ビルドとリンクの両方のステップでg ++を呼び出すのが最善です。 MacPortsによってインストールされたヘッダーとライブラリを見つけるには、/ opt/localを参照するだけです。必要に応じて、.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

コマンドラインからビルドする場合は、 Makefileを使用してmakeでビルドする をお勧めします。

4
Raptor007

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エラーが発生しないはずです。

2
warship

上記の答えのどれも私が探していたものを与えませんでした:静的なGlew依存関係を持つセットアップとXcodeプロジェクトへの迅速な方法。

  1. ここからGLEWソースをダウンロード http://glew.sourceforge.net/
  2. タイプ

    $Sudo make install 
    

    解凍したディレクトリから(動的にリンクする場合は、これにより.dylibがインストールされます)。 CMakeをインストールする必要があります。

  3. / usr/local/lib /から.a静的ライブラリをXCodeプロジェクトにコピーします
  4. ターゲットのXcodeビルド設定の「ヘッダー検索パス」を更新して、ヘッダーを含めます(通常は/ usr/local/includeに配置されます)。または、ヘッダーを独自のプロジェクトにコピーします。
1
clearwater82