OpenGLをmac0S Catalinaで使う
macOS CatalinaでOpenGLをインストールする
環境
OS: macOS Catalina version 10.15.3
macOSでのOpenGLの扱い
macOSでは、OpenGLは非推薦になった。
けど自分の勉強のためや、ちょっと触ってみたいという時にOpenGLを使いたいということもあると思います。
OpenGLをmacOSで使うためには、GLUTやGLFWをインストールすることで使うことができます。
これらは何かというと、 OpenGLによって描画するものをWindowを起動してそこに描画したり、キーボードやマウスの入力を受け取るために
使われるものです。
1. GLUT
このライブラリはOpenGLの初期に作られたライブラリだが、GLUTはバグがあるのに、メンテナンスがされていないらしい。また、そこで、OpenGL3.2 CoreProfileは使用することができません。
2. GLFW
これは、LinuxやWindows、MacOSXで使うことのできるクラスプラットフォームなライブラリです。これを使うことでGLUTにはなかった多くの機能を使うことができます。
またGLUTでは、OpenGL2.1にしか対応してませんでしたが、GLFWではOpenGL3.2にも対応することができます。
ここら辺のGLUTなのかGLFWなのかの議論は*1や*2でなされており、特に*3では、そもそもOpenGLって今から手をつける必要あるかを議論してくれているので、大変勉強になります。
OpenGLのVersionを確認する
OpenGLのバージョンを確認してみましょう。
*4に書かれているようなコードを加えると、自分が使っているOpenGLのバージョンを確認することができます。
私のOpenGLのバージョンはMacの標準バージョンの2.1でした。
GLFWのインストール
brew install glfw
でインストールすることができます。ただ、homebrewをインストールしている必要がありますので、他の記事で適宜補ってください。
Exampleを書いてみよう
公式ドキュメントの*5にGLFWのExampleコードがあります。 これをまずは適当なファイルに保存してください。
#include <GLFW/glfw3.h> int main(void) { GLFWwindow* window; /* Initialize the library */ if (!glfwInit()) return -1; /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { /* Render here */ glClear(GL_COLOR_BUFFER_BIT); /* Swap front and back buffers */ glfwSwapBuffers(window); /* Poll for and process events */ glfwPollEvents(); } glfwTerminate(); return 0; }
このプログラムは、windowを立ち上げるだけのプログラムなので何か描画がされるわけではありません。実際にはwhileループ内で描画処理と更新処理を行う必要があります。
コンパイル
では、上のコードをコンパイルしましょう。 *6にコンパイルのスクリプトが書かれています。
clang++ -std=c++11 -stdlib=libc++ -lglfw3 -framework CoreVideo -framework OpenGL -framework IOKit -framework Cocoa -framework Carbon </path/to/cpp/file>
と書いてありますが、下の方に-lglfw3
を-lglfw
に置き換えてくださいと書いてあるので、
clang++ -std=c++11 -stdlib=libc++ -lglfw -framework CoreVideo -framework OpenGL -framework IOKit -framework Cocoa -framework Carbon </path/to/cpp/file>
と書いてください。これで、コンパイルができるはずです。
あとは最後に、./a.out
でwindowを立ち上げることができます。
プログラムを実行すると以下のようなwindowが立ち上がります。
おわりに
今回はOpenGLとGLFWの簡単なプログラムを実行するところまで書きました。GLUTだとスレッド処理が(おそらく...)書けなくて、困っていました。原因としてはglutMainLoop()という関数でループしており、他の処理が割り込めないためです。GLFWだとここら辺のループを自分で書くことができるので、自由が効いていいですね。他にもTextureの読み込みとかできる関数とかあるので、他の記事で紹介できたらなと思います。それでは。