# Guide to Game Development/Rendering and Game Engines/OpenGL
## Categories

* Getting set up
       Creating the project
       Adding libraries to the project
       Creating the window
* Drawing geometry
       Sending the vertex data to openGL
       Drawing from vertex element arrays
       Sending colour to OpenGL
* GLSL Shaders
       Reading in shaders into your program
       Writing vertex shaders
       Writing fragment shaders
* User Input
       Get mouse movement and click input
       Get keyboard input
* Camera
       Moving the camera to view the 3D geometry
* Textures
       Reading the image files in
       Using UV coordinates
       Adding textures to the geometry
* Lighting
* Loading in models
* Exporting the game for distribution
* Miscellaneous

## Sister projects
### Ports of OpenGL

* WebGL
          A rendering engine based upon OpenGL designed to work on the web.
* OpenTK
          A wrapper for OpenGL that works with: C#, VB.Net, C++/CLI, F#, Boo and many more on multiple platforms.
* LWJGL
          Light-Weight Java Game Library.

### Libraries

* Glew
          The OpenGL Extension Wrangler Library (GLEW) is a cross-platform C/C++ library that helps in querying and loading OpenGL extensions. Note that GLEW is open source.
* Glm
          OpenGL Mathematics library, comes with mathematics code for vector, matrices etc.
* GLUT
          The OpenGL Utility Toolkit (GLUT) is a library of utilities for OpenGL programs, which primarily perform system-level I/O with the host operating system. Functions performed include window definition, window control, and monitoring of keyboard and mouse input. Note that GLUT is not open source.
* Qt
          Qt is a cross-platform application and UI framework for developers using C++ or QML, a CSS & JavaScript like language.

#### Glut open-source alternatives

* CPW
          Cpw is an application framework library for OpenGL applications and games modeled after the GLUT API. It is designed with speed, simplicity, and portability in mind.
* Fast Light Toolkit
          FLTK provides modern GUI functionality without the bloat and supports 3D graphics via OpenGL and its built-in GLUT emulation.
* Freeglut
          Open source and extended alternative to GLUT that allows the user to create and manage windows containing OpenGL contexts on a wide range of platforms and also read the mouse, keyboard and joystick functions.
* GLFW
          Open source, portable framework for OpenGL application development with a link library for handling operating system specific tasks, such as opening an OpenGL window and reading keyboard, mouse and joystick input.
* GLOW Toolkit
          C++ wrapper for GLUT, providing a fully object-oriented API for creating windows, menus and other GUI elements, and for event handling.
* GLT and GlutMaster
          GLT can be used as an object oriented interface to OpenGL, or as a library of pre-canned functionality for transformations, shapes or fonts, etc. GlutMaster is a C++ interface wrapper to GLUT, providing a portable window, keyboard, mouse and menu environment for OpenGL programs.
* GLUI UI Library
          GLUI is a GLUT-based C++ user interface library which provides controls such as buttons, checkboxes, radio buttons, and spinners to OpenGL applications. It is window-system independent, using GLUT or FreeGLUT.
* NGL
          NGL is an application framework similar in many ways to GLUT, but with many enhancements in order to make it an easy and yet powerful tool for cross-platform C++ application programming.
* SDL (Simple Direct Media Layer)
          A cross-platform multimedia library designed to provide level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.

### Other

* OpenCL
          OpenCL™ is the first open, royalty-free standard for cross-platform, parallel programming of modern processors found in personal computers, servers and handheld/embedded devices.
* OpenAL
          A cross-platform audio API that deliberately resemble those of OpenGL.

## External Links

* OpenGL's HomePage
* AngleProject - Used to port OpenGL to DirectX
* OpenGL Programming wikibook
* Learning Modern 3D Graphics Programming - An online reference for learning OpenGL with C/C++
YouTube:
* Game Engine Development In OpenGL by Jamie King
* 3D Computer Graphics Using OpenGL by Jamie King
* Intro to Modern OpenGL by thebennybox
* 3D Game Engine Development Tutorial by thebennybox

## References

* ↑ http://www.opentk.com/
* ↑ https://en.wikipedia.org/wiki/OpenGL_Extension_Wrangler_Library
* ↑ http://www.opengl.org/sdk/libs/GLEW/
* ↑ https://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit
* ↑ Paragraph 4: http://www.opengl.org/resources/libraries/glut/
* ↑ Direct quote from: http://qt-project.org/
* 1 2 3 4 5 6 7 8 9 List of alternatives for GLUT: http://www.opengl.org/resources/libraries/windowtoolkits/
* ↑ http://www.khronos.org/opencl/
* ↑ https://en.wikipedia.org/wiki/OpenAL