GLFLによるOpenGL入門:第3章 プログラムの作成
GLFLによるOpenGL入門:第3章 プログラムの作成
p. 33 プログラム作成
>GLFW を使ったプログラムの処理手順を以下に示します。
> (1) GLFW を初期化する (glfwInit())
> (2) ウィンドウを作成する (glfwCreateWindow())
> (3) ウィンドウが開いている間繰り返し描画する (glfwWindowShouldClose())
> (5) ウィンドウが閉じたら終了処理を行う (glfwTerminate())
CMakeLists.txtfind_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.txtif (APPLE)
target_link_libraries(untitled "-framework OpenGL")
endif()
エラー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.txttarget_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に追加してるのと同じ?
結局、ビルドオプションはつけずに以下でできた
CMakeLists.txtcmake_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) # 追加