Chapter 1. Hello, Triangle!
Prev | Part I. The Basics | Next

## Chapter 1. Hello, Triangle!

It is traditional for tutorials and introductory books on programming languages start with a program called “Hello, World!” This program is the simplest code necessary to print the text “Hello, World!” It serves as a good test to see that one's build system is functioning and that one can compile and execute code.

Using OpenGL to write actual text is rather involved. In lieu of text, our first tutorial will be drawing a single triangle to the screen.

## Framework and FreeGLUT

The source to this tutorial, found in `Tut1 Hello Triangle/tut1.cpp`, is fairly simple. The project file that builds the final executable actually uses two source files: the tutorial file and a common framework file found in `framework/framework.cpp`. The framework file is where the actual initialization of FreeGLUT is done; it is also where main is. This file simply uses functions defined in the main tutorial file.

FreeGLUT is a fairly simple OpenGL initialization system. It creates and manages a single window; all OpenGL commands refer to this window. Because windows in various GUI systems need to have certain book-keeping done, how the user interfaces with this is rigidly controlled.

The framework file expects 5 functions to be defined: `defaults`, `init`, `display`, `reshape`, and `keyboard`. The `defaults` function is called before FreeGLUT is initialized; it gives the tutorial the chance to modify the window size or the initialization parameters. The `init` function is called after OpenGL is initialized. This gives the tutorial file the opportunity to load what it needs into OpenGL before actual rendering takes place. The `reshape` function is called by FreeGLUT whenever the window is resized. This allows the tutorial to make whatever OpenGL calls are necessary to keep the window's size in sync with OpenGL. The `keyboard` function is called by FreeGLUT whenever the user presses a key. This gives the tutorial the chance to process some basic user input.

The `display` function is where the most important work happens. FreeGLUT will call this function when it detects that the screen needs to be rendered to.

Prev | Up | Next
Glossary | Home | Dissecting Display