OpenGL i Visual Studio 2019

Po wielu latach wracam do Visual Studio. Nie kręci mnie budowanie środowiska „from scratch” i spędzania godzin na instalacji i konfiguracji i łączenia narzędzi, które były rozwijane równolegle bez myśli o współpracy ze sobą. Visual Studio od Microsoftu zawsze było budowane w jednym konkretnym celu, więc jest narzędziem dopracowanym i raczej niespodzianek nie należy się spodziewać.

Tak na marginesie. Bardzo wielu producentów narzędzi oferuje wersje darmowe do prywatnego użytku. To jest bardzo dobry kierunek, gdyż pasjonaci mogą uczyć się narzędzi i technik, nie płacąc kroci za oprogramowanie. Jaki z tego ma zysk producent? Prosty. Przyzwyczaja/uzależnia użytkowników od swojego produktu.

Tym razem spróbuję swoich sił w grafice 3D, tak z ciekawości. Na tapetę biorę OpenGL. Konfiguracja jest bardzo prosta, ale warto zapisać procedurę krok-po-kroku, tak dla pamięci.

  1. Instalujemy Visual Studio 2019 (Community Edition). Procedura trywialna, ale chwile trwa i potrzebne jest sporo miejsca, w zależności od tego jakie opcje wybierzemy. Zakładamy, że wszystko przebiegnie poprawnie…
  2. Następnie ściągamy bibliotekę GLFW. Wersję 32-bity lub 64-bity, w zależności od upodobania. Ja ściągnąłem obie, ale będę używał 32-bitowej.
  3. Kolejny krok. Uruchamiamy środowisko i tworzymy pusty projekt C++. Rozwiązanie (solution) zapisujemy w folderze wybranym przez nas.
  4. W katalogu, gdzie znajduje się rozwiązanie (solution, plik *.sln) powinien znajdować się katalog z nazwą projektu i plikiem *.sln. W tym też katalogu tworzymy katalog o nazwie lib (w zasadzie nazwa może być dowolna). W tym katalogu będziemy przechowywać wszelkie biblioteki, których będziemy używać w naszym rozwiązaniu.
  5. W środowisku Visual Studio otwieramy nasze rozwiązanie i projekt. Jako, że projekt jest pusty, należy dodać do niego plik źródłowy. Ja nazywam go main.cpp. Na stronie GLFW znajduje się kod źródłowy aplikacji hello world. Wklejamy go i zapisujemy. Kod oczywiście się nie skompiluje, gdyż środowisko nie widzi pliku nagłówkowego oraz bibliotek. Musimy je wskazać.
  6. Do listy katalogów, gdzie środowisko będzie szukać plików *.h należy dodać katalog z plikiem nagłówkowym biblioteki glfw. W naszym przypadku znajduje się on w $(SolutionDir)\lib\openGL\glfw-3.3.2.bin.WIN32\include, gdzie $(SolutionDir) rozwija się do katalogu, gdzie znajduje się plik *.sln naszego rozwiązania. Dostajemy się tam przez właściwości projektu Configuration Properties --> VC++ Directories --> Include Directories.
  7. Jeżeli wszystko jest OK, w tym momencie projekt powinien się kompilować bez błędów (CTLR+F7) – ale jeszcze nie budować.
  8. Do listy katalogów, gdzie środowisko będzie szukać plików *.lib należy dodać katalog z plikiem glfw3.lib. Znajduje się on w $(SolutionDir)\lib\openGL\glfw-3.3.2.bin.WIN32\lib-vc2019. Ten katalog należy dodać do: Configuration Properties --> VC++ Directories --> Library Directories.
  9. We właściwościach linkera: Configuration Properties --> Linker --> Input --> Additional Dependencies usuwamy domyślną zawartość i dodajemy wpis: glfw3.lib;User32.lib;Gdi32.lib;Shell32.lib;opengl32.lib. Są to biblioteki, których wymaga bibliotek glfw.
  10. Teraz projekt powinien się linkować z jednym ostrzeżeniem: 1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library. Projekt już zadziała, ale hmmm… Warto zlikwidować to ostrzeżenie. Na sieci jest wiele rozwiązań, ale nie wszystkie działają. U mnie zadziałało należy do: Configuration Properties --> Linker --> Input --> Ignore Specyfic Default Libraries dodać: msvcrtd.lib.

Jeżeli wszystko poszło jak trzeba, to uruchomieniu projektu (Debug) powinniśmy otrzymać czarne okno OpenGL’a zatytułowany „Hello World”.