generated at
GLFLによるOpenGL入門:第3章 プログラムの作成
GLFLによるOpenGL入門:第3章 プログラムの作成
p. 33 プログラム作成
>GLFW を使ったプログラムの処理手順を以下に示します。
> (1) GLFW を初期化する (glfwInit())
> (2) ウィンドウを作成する (glfwCreateWindow())
> (3) ウィンドウが開いている間繰り返し描画する (glfwWindowShouldClose())
> (4) ダブルバッファリングのバッファの入れ替えを行う (glfwSwapBuffers())
> (5) ウィンドウが閉じたら終了処理を行う (glfwTerminate())


CMakeLists.txt
find_package(glfw3 3.3 REQUIRED) target_link_libraries(untitled glfw)

p.36 レンダリングコンテキストはウィンドウごとに保持される
stateful

p.37
warningが出る
'glClearColor' is deprecated: first deprecated in macOS 10.14 - OpenGL API deprecated. (Define GL_SILENCE_DEPRECATION to silence these warnings) 'glClearColor' has been explicitly marked deprecated here
このwarningはp.44でGLEWをincludeするとIDE上では消える


イベントの取り出しは2種類
ポーリング
glewPollEvents()
コールバック
glewWaitEvents()
イベントが起きるまで待つ

p. 44 GLEWの初期化
>本書で用いる OpenGL の機能のいくつかは、これだけでは使用できない場合があります。
> これは、Windows において標準的に用意されている OpenGL のバージョンが 1.1 であり、本書が対象としている OpenGL のバージョン 3.2 に対してかなり古いものであるためです。
>またmacOS では、そのままでは OpenGL2.1 に対応した Compatibiliy Profile が使用され、OpenGL3.2以降の機能を使用するには明示的に Core Profile に切り替える必要があります。さらに、それに合わせて使用するするヘッダファイ食べるルも切り替える必要があります。
> そこで、サポートされていない OpenGL の機能を有効にし、プラットフォームによるソースプログラムの違いを吸収するために、ここで GLEW を導入します。

p.47
GLFW_OPENGL_FORWARD_COMPATとGLFW_OPENGL_PROFILEは両方プロファイルの指定。何が違うの?

ビルド
エラーになった
[ 50%] Linking CXX executable untitled Undefined symbols for architecture x86_64: "_glClear", referenced from: _main in main.cpp.o "_glClearColor", referenced from: _main in main.cpp.o "_glewExperimental", referenced from: _main in main.cpp.o "_glewInit", referenced from: _main in main.cpp.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[3]: *** [untitled] Error 1 make[2]: *** [CMakeFiles/untitled.dir/all] Error 2 make[1]: *** [CMakeFiles/untitled.dir/rule] Error 2 make: *** [untitled] Error 2

CMakeのBuild optionsに以下を追加した
>c++ main.cpp -g -Wall -std=c++11 -I/usr/local/include -L/usr/local/lib -lglfw3 -lGLEW -framework OpenGL -framework CoreVideo -framework IOKit -framework Cocoa
p.49
変わらなかった
XCodeでやっていないのでCocoaとかいらなくない?
>$ clang++ -o main main.cpp -lglfw -framework OpenGL


CMakeLists.txt
if (APPLE) target_link_libraries(untitled "-framework OpenGL") endif()
https://www.coder.work/article/6221866 を追加したらOpenGL系のエラーが消えた

エラー
Undefined symbols for architecture x86_64: "_glewExperimental", referenced from: _main in main.cpp.o "_glewInit", referenced from: _main in main.cpp.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

更に追加
CMakeLists.txt
target_link_libraries(untitled GLEW) if (APPLE) target_link_libraries(untitled "-framework OpenGL") endif()

減った
エラー
ld: library not found for -lGLEW clang: error: linker command failed with exit code 1 (use -v to see invocation)
CMakeListosの追加ってbuild optionに追加してるのと同じ?
どうもそうらしいCMake 簡易まとめ - Qiita

c++ - Not able to link Glew with Cmake - Stack Overflowをみるとfind_packageに追加するとあるので試したらできた
結局、ビルドオプションはつけずに以下でできた
CMakeLists.txt
cmake_minimum_required(VERSION 3.20) project(untitled) set(CMAKE_CXX_STANDARD 17) add_executable(untitled main.cpp) find_package(glfw3 3.3 REQUIRED) find_package(GLEW 2.2 REQUIRED) # 追加 target_link_libraries(untitled glfw) target_link_libraries(untitled GLEW::GLEW) # 追加