From 20148585c205390393885a1b7d9db227de5b0a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 19 Aug 2013 19:51:51 +0200 Subject: [PATCH] Finally proper Getting Started Guide in documentation. --- Doxyfile | 3 +- README.md | 3 + doc/getting-started-blue.png | Bin 0 -> 8205 bytes doc/getting-started.dox | 202 +++++++++++++++++++++++++++++++++++ doc/getting-started.png | Bin 0 -> 8215 bytes doc/mainpage.dox | 10 +- 6 files changed, 209 insertions(+), 9 deletions(-) create mode 100644 doc/getting-started-blue.png create mode 100644 doc/getting-started.dox create mode 100644 doc/getting-started.png diff --git a/Doxyfile b/Doxyfile index d9dff7fed..9bb7567bd 100644 --- a/Doxyfile +++ b/Doxyfile @@ -775,7 +775,8 @@ EXAMPLE_RECURSIVE = NO # directories that contain image that are included in the documentation (see # the \image command). -IMAGE_PATH = ../magnum-examples/src/ +IMAGE_PATH = doc/ \ + ../magnum-examples/src/ # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program diff --git a/README.md b/README.md index 33299aa2c..d88d832df 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,9 @@ There are also examples of engine usage, varying from simple *Hello World*-like example to more advanced applications, such as viewer for complex 3D models. Example repository is at https://github.com/mosra/magnum-examples. +Repository with bootstrap projects for many use cases, helping you get up and +running in no time is located at https://github.com/mosra/magnum-bootstrap. + CONTACT ======= diff --git a/doc/getting-started-blue.png b/doc/getting-started-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..554613df2c27ade9ee46917eb3cf90a2e070994c GIT binary patch literal 8205 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 literal 0 HcmV?d00001 diff --git a/doc/getting-started.dox b/doc/getting-started.dox new file mode 100644 index 000000000..d98af28d5 --- /dev/null +++ b/doc/getting-started.dox @@ -0,0 +1,202 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013 Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +namespace Magnum { +/** @page getting-started Getting started +@brief Get started with %Magnum in matter of minutes. + +@tableofcontents + +@section getting-started-download Download, build and install Magnum + +Get latest version from GitHub and install it. Read full guide on +@ref building "how to download, build and install Magnum" on platform of your +choice. For our first project we will use GLUT toolkit, don't forget to enable +it for building using `WITH_GLUTAPPLICATION` CMake parameter. + +@section getting-started-bootstrap Download bootstrap project + +Setting up a new project can be pretty gruesome and nobody likes repeating the +same process every time. %Magnum provides "bootstrap" project structures for +many use cases, helping you get up and running in no time. + +The [bootstrap repository](https://github.com/mosra/magnum-bootstrap) is +located on GitHub. The `master` branch contains just an README file and the +actual bootstrap projects are in various other branches, each covering some +particular use case. For your first project you would need the `base` branch, +which contains only the essential files you need. Download the branch [as an +archive](https://github.com/mosra/magnum-bootstrap/archive/base.zip) and +extract it somewhere. Do it rather than cloning the full repository, as it's +better to init your own repository from scratch to avoid having the history +polluted. + +@section getting-started-review Review project structure + +The base project consists of just seven files in two subfolders. %Magnum uses +CMake build system, see @ref cmake for more information. + + modules/FindCorrade.cmake + modules/FindMagnum.cmake + modules/FindGLEW.cmake + src/MyApplication.cpp + src/CMakeLists.txt + CMakeLists.txt + .gitignore + +In root there is pre-filled `.gitignore` for your Git project and also +project-wide `CMakeLists.txt`. It just sets up project name, specifies module +directory and delegates everything important to `CMakeLists.txt` in `src/` +subdirectory. +@code +cmake_minimum_required(VERSION 2.8.8) +project(MyApplication) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/modules/") + +add_subdirectory(src) +@endcode + +Directory `modules/` contains CMake modules for finding the needed +dependencies. Unlike modules for finding e.g. GLUT and 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. + +Directory `src/` contains the actual project. To keep things simple, the +project consists of just one source file with the most minimal code possible: +@code +#include +#include + +using namespace Magnum; + +class MyApplication: public Platform::Application { + public: + explicit MyApplication(const Arguments& arguments); + + protected: + void viewportEvent(const Vector2i& size) override; + void drawEvent() override; +}; + +MyApplication::MyApplication(const Arguments& arguments): Platform::Application(arguments) {} + +void MyApplication::viewportEvent(const Vector2i& size) { + defaultFramebuffer.setViewport({{}, size}); +} + +void MyApplication::drawEvent() { + defaultFramebuffer.clear(FramebufferClear::Color); + swapBuffers(); +} + +MAGNUM_APPLICATION_MAIN(MyApplication) +@endcode + +The application essentially does nothing, just clears properly sized screen +framebuffer to default (black) color and then does buffer swap to actually +display it on the screen. `CMakeLists.txt` finds %Magnum, sets up compiler +flags, creates the executable and links it to all needed libraries: +@code +find_package(Magnum REQUIRED GlutApplication) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CORRADE_CXX_FLAGS}") +include_directories(${MAGNUM_INCLUDE_DIRS} ${MAGNUM_APPLICATION_INCLUDE_DIRS}) + +add_executable(MyApplication MyApplication.cpp) +target_link_libraries(MyApplication + ${MAGNUM_LIBRARIES} + ${MAGNUM_APPLICATION_LIBRARIES}) +@endcode + +In the following tutorials the code will be explained more thoroughly. + +@section getting-started-build Build it and run + +In Linux (and other Unix-based OSs) you can build the example using the +following three commands: create out-of-source build directory, run cmake in it +and then run make. The application binary will then appear in src/ subdirectory +of build dir: + + mkdir -p build && cd build + cmake .. + make + ./src/MyApplication + +On Windows, if you don't want to touch the command-line, the easiest way is to +open root `CMakeLists.txt` in QtCreator, let it import the project and then +just build and run the application. If CMake isn't able to find the +dependencies or the building fails for some reason, you might want to look at +@ref building-windows-troubleshooting. + +@image html getting-started.png +@image latex getting-started.png + +Now you can try to change something in the code. Without going too deep into +the concepts of graphics programming, we can change clear color to something +else and also print basic information about the GPU the engine is running on. +First include the needed headers: +@code +#include +#include +#include +@endcode + +And in the constructor (which is currently empty) change the clear color and +print something to debug output: +@code +Renderer::setClearColor({0.07f, 0.44f, 0.73f}); + +Debug() << "Hello! This application is running on" << Context::current()->version() + << "using" << Context::current()->rendererString(); +@endcode + +After rebuilding and starting the application, the clear color changes to +blueish one and something like this would be printed to the console: +@code +Hello! This application is running on OpenGL 3.3 using Geforce GT 330M +@endcode + +@image html getting-started-blue.png +@image latex getting-started-blue.png + +@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 @ref example-index "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! + +@section getting-started-more Additional information + +- @subpage building +- @subpage building-plugins +- @subpage building-integration +- @subpage cmake +- @subpage cmake-plugins +- @subpage cmake-integration + +*/ +} diff --git a/doc/getting-started.png b/doc/getting-started.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0fc6112f11090702347a83ee48b7861983014b GIT binary patch literal 8215 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 C{miNW literal 0 HcmV?d00001 diff --git a/doc/mainpage.dox b/doc/mainpage.dox index 38697a952..d2fac13bf 100644 --- a/doc/mainpage.dox +++ b/doc/mainpage.dox @@ -83,16 +83,10 @@ namespace Magnum { - Pre-made shaders, primitives and other tools for easy prototyping and debugging. -@section mainpage-download-build Downloading and building Magnum - -Guide @ref building "how to download and build Magnum" on different platforms. - @section mainpage-getting-started Getting started -The best way to get started is to render your first triangle in -@ref example-index "step-by-step tutorial". Then you can dig deeper and try -other examples, read about @ref features "fundamental principles" in the -documentation or start experimenting on your own! +@ref getting-started "Thorough guide" to download, build, install and start +using Magnum in your project. @section mainpage-hacking Hacking Magnum