This is meant as a basic tutorial that will teach you how to do some of the more basic things in ClanLib.  This document refers currently to the 0.8 series.  We will start off by explaining the main include statements in ClanLib.

 

 


 

<ClanLib/core.h> - This must be included when using any part of clanlib

 

<ClanLib/application.h> - Needed for the crossplatform application framework

 

<ClanLib/display.h> - Needed for any graphics use in ClanLib

 

<ClanLib/GL.h> - Used for OpenGL, currently the only hardware support (DX7 and DX8 are planned)

 


I’m going to approach this as if we are going to have 2 files, main.h and main.cpp.  Let’s first set up our header file with our main class

 

 


//main.h – has the definition for our main clanapp class

 

#include <ClanLib/core.h>

#include <ClanLib/application.h>

#include <ClanLib/display.h>

#include <ClanLib/gl.h>

 

class SimpleApp : public CL_ClanApplication

{

 

                virtual int main(int, char**);

 

};

 


Above we created a class named SimpleApp that inherits from CL_ClanApplication.  Within that class we have a function main(int, char**) which will be the starting function for your application.  Ok so let’s go on to main.cpp

 

 

//main.cpp

 

#include “main.h

 

int SimpleApp::main(int argc, char **argv)

{

 

                //we need to set up all the different pieces

                CL_SetupCore::init();

                CL_SetupApplication::init();

                CL_SetupDisplay::init();

                CL_SetupGL::init();

 

 

                 //We need to create a window so people can see what we’re doing

               CL_DisplayWindow window("A Simple ClanLib App", 640, 480, false, true);

 

                 //Tell Clanlib that we will be drawing in 2D

                CL_Display::begin_2d();


                //Create a CL_Surface that we will load from file.

                CL_Surface *Image = new CL_Surface("clanlib.tga");

 

                //let’s start our while loop and draw on the screen

               //If escape was hit, we should quit

                while(!CL_Keyboard::get_keycode(CL_KEY_ESCAPE))

                {

 

                                //clear the screen to black

                                CL_Display::clear();

 

                                //Draw our image on the screen

                                Image->draw(150, 150);

                             

                                //flip our screen so it draws it to the front buffer

                                CL_Display::flip();

                                //call keep_alive, the most important call in any loop

                                CL_System::keep_alive();

               

                }

 

                delete Image;

                 //Tell Clanlib that we are done drawing in 2D

                CL_Display::end_2d();

 

                CL_SetupCore::deinit();

                CL_SetupApplication::deinit();

                CL_SetupDisplay::deinit();

                CL_SetupGL::deinit();

 

                return 0;

 

}

 

SimpleApp app;

 


 

So let’s go over the separate ClanLib related pieces of app

 

                //we need to set up all the different pieces

                CL_SetupCore::init();

                CL_SetupApplication::init();

                CL_SetupDisplay::init();

                CL_SetupGL::init();

 

First thing we need to do is initialize the different ClanLib subsystems we will use.  Basic rule of thumb is for every ClanLib include you will need to do a CL_Setup(subsystem)::init().

 

                //We need to create a window so people can see what we’re doing

                CL_DisplayWindow window("A Simple ClanLib App", 640, 480, false, true);

CL_DisplayWindow creates a window named “A Simple ClanLib App” of specified size (640 x 480 in our case) which is not fullscreen and is resizable.  CL_DisplayWindow will be the main window of your app.

                 //Tell Clanlib that we will be drawing in 2D

                CL_Display::begin_2d();

Tell Clanlib that we will be drawing in 2D at this point

 

                //Create a CL_Surface that we will load from file.

                CL_Surface *Image = new CL_Surface("clanlib.tga");

 

CL_Surface is the main class used for loading graphics file and displaying them on screen.  CL_Surfaces are created either from resources or a CL_Provider class.  The following Providers are available at this time:

 

CL_PCXProvider

CL_PNGProvider

CL_TGAProvider

CL_JPEGProvider

 

Feel free to create more.

 

 

             while (!CL_Keyboard::get_keycode(CL_KEY_ESCAPE))

Checks to see if the user pressed escape...

 

                //clear the screen to black

                CL_Display::clear();

 

Clears the backbuffer to black…

 

                //Draw our image on the screen

                Image->draw(150, 150);

 

Draws our tga file to x:150, y:150 starting from the upper left corner…

 

                //flip our screen so it draws it to the front buffer

                CL_Display::.flip();

 

Draws the image on our screen by moving it from the backbuffer to the front buffer…

                 //call keep_alive, the most important call in any loop

                CL_System::keep_alive();

 

Does housecleaning and makes sure our app doesn’t die…

 

                 //Tell Clanlib that we are done drawing in 2D

                CL_Display::end_2d();

Tell Clanlib that we are done drawing in 2D at this point

                CL_SetupCore::deinit();

                CL_SetupApplication::deinit();

                CL_SetupDisplay::deinit();

                CL_SetupGL::deinit();

 

And shutdown your subsystems.

 

SimpleApp app;

 

This call makes an instance of our class.

 

That’s it.  Next is resources…