From 6b64ee6240872c12048af22b7c712aa9dd56b994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 11 Oct 2019 22:37:20 +0200 Subject: [PATCH] doc: rewrite the Getting Started Guide to be better for Windows users. --- doc/getting-started-blue.png | Bin 6237 -> 7650 bytes doc/getting-started.dox | 312 +++++++++++++++++--------- doc/getting-started.png | Bin 6167 -> 7648 bytes doc/snippets/getting-started-blue.cpp | 2 +- 4 files changed, 204 insertions(+), 110 deletions(-) diff --git a/doc/getting-started-blue.png b/doc/getting-started-blue.png index 21a1e409b6ba4cb3a62e283bdf7ec48ff161f685..4c515935a236b1d22bc743fbfc83fcd3c9c407aa 100644 GIT binary patch literal 7650 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 +The last missing piece before you can continue is the [SDL](http://libsdl.org/) +library --- the bootstrap project (and most examples) use it to do window +management and event handling. If you are on Linux or macOS, you can get it +easily from your package manager: -@m_class{m-block m-success} +@code{.sh} +sudo pacman -S sdl2 # on ArchLinux +sudo apt install libsdl2-dev # on Ubuntu / Debian +brew install sdl2 # on macOS (via Homebrew) +@endcode -@par Building Magnum separately - Even though using Magnum as a CMake subproject is a fully supported use - case, in the long run it might be better to build & install Corrade and - Magnum separately instead of cloning them into your project tree, as that - vastly improves your iteration times. Follow - @ref building "the full installation guide" if you want to go that route; - don't forget to enable `WITH_SDL2APPLICATION` when building Magnum so the - bootstrap project can correctly find and use it. There are also - ready-to-use packages for various OSes and distributions, as listed above. -@par - If you have a separate installation (or a package), you don't need to clone - the subprojects and modify the `CMakeLists.txt` file like above, you might - only need to set `CMAKE_PREFIX_PATH` if you installed Corrade and Magnum to - a non-standard location. +If you are on Windows, by far the easiest is to bundle the prebuilt binaries +into your project. Depending on whether you use Visual Studio or MinGW, +download either [SDL2-devel-2.0.10-VC.zip](https://www.libsdl.org/release/SDL2-devel-2.0.10-VC.zip) +or [SDL2-devel-2.0.10-mingw.tar.gz](https://www.libsdl.org/release/SDL2-devel-2.0.10-mingw.tar.gz), +extract the archive to root of the project and tell CMake where it is by adding +the `SDL2-2.0.10` directory to `CMAKE_PREFIX_PATH`: + +@code{.cmake} +... + +set(CMAKE_PREFIX_PATH ${PROJECT_SOURCE_DIR}/SDL-2.0.10 ${CMAKE_PREFIX_PATH}) +set(WITH_SDL2APPLICATION ON) +add_subdirectory(magnum EXCLUDE_FROM_ALL) +@endcode + +This is of course not the only possibility --- if you don't feel like bundling +the binaries, you can put them outside of the project and then specify +`CMAKE_PREFIX_PATH` externally on the command line. Listing all the +possibilities is however outside of the scope of this short guide. + +@subsection getting-started-setup-install Option B: install Magnum separately and let CMake find it + +An alternative to the above is building & installing Magnum separately. Both +approaches are equally-well supported and each has its pros and cons --- the +subproject way shines when experimenting or when the project is developed on +multiple workstations by multiple developers and you need to ensure the +dependencies are the same version everywhere; while the separate installation +makes sense when you have multiple projects depending on Magnum and want to +integrate new upstream changes without having to update and compile it several +times. + +If you are lucky, you may already have Magnum packages ready for your platform: + +- @ref building-packages-hunter +- @ref building-packages-vcpkg +- @ref building-packages-arch +- @ref building-packages-msys +- @ref building-packages-deb +- @ref building-packages-gentoo +- @ref building-packages-brew + +If not, follow the full installation guides for @ref building-corrade "Corrade" +and @ref building "Magnum" to build & install everything; don't forget to +enable `WITH_SDL2APPLICATION` when building Magnum so the bootstrap project can +correctly find and use it. This is "the hard way" and it's recommended only if +you have at least some prior experience with building projects from source +using CMake. + +Compared to @ref getting-started-setup-subproject "Option A", you don't need to +clone the subprojects and modify the `CMakeLists.txt` file, however you'll need +to set `CMAKE_PREFIX_PATH` if you installed Corrade and Magnum to a +non-standard location (i.e., anything else than `/usr` or `/usr/local`, and +always on Windows). @section getting-started-review Review project structure @@ -142,16 +183,13 @@ It just sets up project name, specifies module directory and delegates everything important to `CMakeLists.txt` in the `src/` subdirectory. The `modules/` directory contains CMake modules for finding the needed -dependencies. Unlike modules for finding e.g. OpenGL, which are part of -standard CMake installation, these aren't part of it and thus must be -distributed with the project. These files are just verbatim copied from Magnum -repository. - -@note These modules are just the bare minimum you need for starting. If you - plan to use additional functionality that isn't part of the core library or - you are targeting specific platforms, you may need to include additional - modules. See @ref cmake, @ref cmake-plugins, @ref cmake-integration and - @ref cmake-extras for more information. +dependencies. These are needed mainly with externally installed dependencies +(@ref getting-started-setup-install "Option B" above), less so for the CMake +subproject setup. Unlike modules for finding e.g. OpenGL, which are a part of +the standard CMake installation, these aren't and thus have to be distributed +with the project. These files are verbatim copied from the +[modules/](https://github.com/mosra/magnum/tree/master/modules) directory in +the Magnum repository. The `src/` directory contains the actual project. To keep things simple, the project consists of just a single `MyApplication.cpp` file with the most @@ -160,89 +198,85 @@ minimal code possible: @snippet getting-started.cpp 0 The application essentially does nothing, just clears the screen framebuffer to -default (dark gray) color and then does buffer swap to actually display it on -the screen. The `src/CMakeLists.txt` file finds Magnum, creates the executable -and links it to all needed libraries: +a dark gray color and then does buffer swap to actually display it on the +screen. The `src/CMakeLists.txt` file finds Magnum, creates the executable and +links all needed libraries to it: @code{.cmake} -find_package(Magnum REQUIRED Sdl2Application) +find_package(Magnum REQUIRED GL Sdl2Application) set_directory_properties(PROPERTIES CORRADE_USE_PEDANTIC_FLAGS ON) add_executable(MyApplication MyApplication.cpp) target_link_libraries(MyApplication PRIVATE - Magnum::Magnum - Magnum::Application) + Magnum::Application + Magnum::GL + Magnum::Magnum) @endcode -In the following tutorials the code will be explained more thoroughly. +The `CORRADE_USE_PEDANTIC_FLAGS` property enables a set of useful compiler +warnings -@section getting-started-build Build it and run +@section getting-started-build Build the project -@subsection getting-started-linux Linux, macOS and other Unix-based OSes +@subsection getting-started-build-linux Linux, macOS and other Unix-based OSes -Because the bootstrap project is based on SDL2, make sure you have SDL2 -installed. It's usually in your system's package manager, on macOS you can get -it from Homebrew using @cb{.sh} brew install sdl2 @ce. The application along -with the subprojects is built using the following three commands --- -create an out-of-source build directory, run `cmake` to generate a project and -then build everything. The compiled application binary will then appear in -`src/` subdirectory of the build dir: +The application along with the subprojects is built using the following three +commands --- create an out-of-source build directory, run `cmake` to generate a +project with a debug build type and then build everything. @code{.sh} mkdir -p build && cd build -cmake .. +cmake -DCMAKE_BUILD_TYPE=Debug .. cmake --build . -./src/MyApplication @endcode -@m_class{m-note m-success} - -@par Generating an Xcode project - On macOS it's possible to generate an Xcode project by running CMake as - `cmake -G Xcode ..`. After that's done, you can open the generated project - from the `build` directory. +By default, CMake generates Makefile projects on Unix platforms. You can change +that to for example [Ninja](https://ninja-build.org/) by running CMake with +`-G Ninja`; on macOS you can generate an Xcode project in the build directory +using `-G Xcode`. If you have CMake 3.15 or newer, the default generator can be +changed using the [CMAKE_GENERATOR](https://cmake.org/cmake/help/v3.15/envvar/CMAKE_GENERATOR.html) +environment variable. -@subsection getting-started-windows Windows +@subsection getting-started-build-windows Windows -On Windows you can use either MSVC 2015+ or MinGW-w64. Prebuilt SDL2 binaries -can be downloaded at https://libsdl.org/download-2.0.php. Depending on where -you extract them you may need to specify `CMAKE_PREFIX_PATH` so CMake is able -to find them. For running the executable properly, Windows also need to have -all dependency DLLs copied along it. That can be done by setting -`CMAKE_RUNTIME_OUTPUT_DIRECTORY`. It's then up to you whether you will use a -command line, Visual Studio or for example QtCreator. With Visual Studio the -most straightforward way to generate the project file is via the Developer -Command Prompt, alternatively execute the correct `vcvarsall.bat` in order to -populate the necessary environment variables. +On Windows you can use either Visual Studio or MinGW-w64. With Visual Studio +the most straightforward way to generate the project file is by executing the +below two commands in the Developer Command Prompt, you can also use CMake GUI +--- navigate it to the source directory, create a fresh build directory, select +a generator and press @m_class{m-label m-default} **Configure** and +@m_class{m-label m-default} **Generate**. @code{.bat} mkdir build && cd build -cmake .. ^ - -DCMAKE_PREFIX_PATH="C:/Users/you/where/you/extracted/SDL" ^ - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="bin" +cmake .. @endcode -You can also use CMake GUI. Then open the `MyApplication.sln` project file -generated by CMake in the `build/` directory. +Once that's done, open the `MyApplication.sln` project file generated by CMake +in the `build/` directory (or in the CMake GUI, use the +@m_class{m-label m-default} **Open Project** button). With QtCreator just open project's root `CMakeLists.txt` file. It then asks you where to create build directory, allows you to specify initial CMake parameters -and then you can just press *Configure* and everything is ready to be built. +and then you can just press @m_class{m-label m-default} **Configure** and +everything is ready to be built. -@note If you installed Corrade and Magnum separately, the install directory - containing the DLLs needs to be in @cb{.bat} %PATH% @ce in order to - properly run the executable. You can also enable `BUILD_STATIC` to compile - everything as static, see @ref building "the full installation guide" for - details. +@section getting-started-run Run the application -@section getting-started-running Running the application +If you went with the CMake subproject approach (@ref getting-started-setup-subproject "Option A" +above), the project is configured to place all binaries into a common location +--- the application will be placed in `Debug/bin/MyApplication` (on Windows +along with all DLLs it needs), and libraries into `Debug/lib`; if you switch to +a Release build, it'll be `Release/bin` instead. If you went with externally +installed Magnum, the executable gets placed into its default location in +`src/MyApplication` and dependency libraries stay where CMake found them --- on +Windows you might need to adjust @cb{.sh} %PATH% @ce to make the application +run. -If everything went well and the application starts, you will see a blank window -like this: +Once built, if everything went well and the application starts, you will see a +blank window like this: -@image html getting-started.png -@image latex getting-started.png +@image html getting-started.png width=410px Now you can try to change something in the code. Without going too deep into the concepts of graphics programming, we can change the clear color to @@ -265,16 +299,76 @@ $ ./MyApplication Hello! This application is running on OpenGL 4.5 using GeForce GT 740M @endcode -@image html getting-started-blue.png -@image latex getting-started-blue.png +@image html getting-started-blue.png width=410px + +The barebones application accepts various @ref GL-Context-command-line "command-line arguments", +pass `--magnum-help` to see them all. Depending on your platform, these can +adjust HiDPI scaling, enable GPU command validation or for example switch to a +different GPU device. + +@m_class{m-block m-success} + +@par Making the executable a Windows application + If you're on Windows, you noticed that, unlike common graphical apps, the + application has a terminal window lurking in the background. That's because + the default executable type in CMake is a console application. The terminal + is useful for printing logs (as we just did), but if you don't want it, it + can be hidden by specifying @cb{.cmake} add_executable(... WIN32 ...) @ce + and linking to the @ref main "Corrade::Main" library. Apart from this, the + library does other useful things such as enabling Unicode-aware environment + interaction on Windows. +@par + @code{.cmake} + find_package(Corrade REQUIRED Main) + ... + + add_executable(MyApplication WIN32 MyApplication.cpp) + target_link_libraries(MyApplication PRIVATE + Corrade::Main + ...) + @endcode + +@section getting-started-glfw Using GLFW and other toolkits instead of SDL2 + +By no means Magnum forces you to use SDL2 --- it's only the default. For other +toolkits such as [GLFW](https://www.glfw.org/) or [Qt](https://www.qt.io/) +there are similar projects in other branches of the +[bootstrap repository](https://github.com/mosra/magnum-bootstrap). If you +download [base-glfw.zip](https://github.com/mosra/magnum-bootstrap/archive/base-glfw.zip), you get a GLFW-based project. It's mostly the same, with only minor +differences. Enable `WITH_GLFWAPPLICATION` instead of `WITH_SDL2APPLICATION`, +on Linux or Mac install one of the following packages: + +@code{.sh} +sudo pacman -S glfw-x11 # on ArchLinux +sudo apt install libglfw3-dev # on Ubuntu / Debian +brew install glfw # on macOS (via Homebrew) +@endcode + +On Windows download either [glfw-3.3.bin.WIN32.zip](https://github.com/glfw/glfw/releases/download/3.3/glfw-3.3.bin.WIN32.zip) +or [glfw-3.3.bin.WIN64.zip](https://github.com/glfw/glfw/releases/download/3.3/glfw-3.3.bin.WIN64.zip), extract it to root of the bootstrap project and point +`CMAKE_PREFIX_PATH` to it: + +@code{.cmake} +... + # or glfw-3.3.bin.WIN32 here +set(CMAKE_PREFIX_PATH ${PROJECT_SOURCE_DIR}/glfw-3.3.bin.WIN64 ${CMAKE_PREFIX_PATH}) +set(WITH_GLFWAPPLICATION ON) +add_subdirectory(magnum EXCLUDE_FROM_ALL) +@endcode + +The rest is very similar to above. With the `Platform::*Application` classes, +Magnum tries to have a common API for all toolkits to make switching from one +to another easy, allowing you to choose the best fit for a particular platform. +See @ref platform for more information. @section getting-started-tutorials Follow tutorials and learn the principles Now that you have your first application up and running, the best way to -continue is to render your first triangle in a @ref examples-triangle "step-by-step tutorial". -Then you can dig deeper and try other examples, read about -@ref features "fundamental principles" in the documentation and start -experimenting on your own! +continue is to render your first triangle. Then you can dig deeper and try +other examples, read about @ref features "fundamental principles" in the +documentation and start experimenting on your own! + +@m_div{m-button m-success} @m_div{m-big}Your First Triangle@m_enddiv @m_div{m-small} a step-by-step tutorial @m_enddiv @m_enddiv @section getting-started-more Additional information diff --git a/doc/getting-started.png b/doc/getting-started.png index 9dcad405c0cc63b177df7d81483cc24a91642a70..a9f3442bed7a8e6791363e074c187f27cf2b50ef 100644 GIT binary patch literal 7648 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 JKJ0h%zX06|$!-7u literal 6167 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 diff --git a/doc/snippets/getting-started-blue.cpp b/doc/snippets/getting-started-blue.cpp index a1e92ee1c..1083ea9b5 100644 --- a/doc/snippets/getting-started-blue.cpp +++ b/doc/snippets/getting-started-blue.cpp @@ -47,7 +47,7 @@ class MyApplication: public Platform::Application { MyApplication::MyApplication(const Arguments& arguments): Platform::Application{arguments} { - using namespace Magnum::Math::Literals; + using namespace Math::Literals; GL::Renderer::setClearColor(0xa5c9ea_rgbf);