Mercurial > fife-parpg
comparison ext/guichan-0.8.1/examples/openglallegro.hpp @ 0:4a0efb7baf70
* Datasets becomes the new trunk and retires after that :-)
author | mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Sun, 29 Jun 2008 18:44:17 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4a0efb7baf70 |
---|---|
1 /* | |
2 * Code that sets up an OpenGL application with Guichan using the | |
3 * Guichan OpenGL back end and the Allegro back end (as OpenGL cannot | |
4 * load images nor check for user input an additional back end needs | |
5 * to be used). | |
6 */ | |
7 | |
8 // The openglallegroimageloader.hpp header file needs to be included | |
9 // in order to get the image loader that uses OpenGL and Allegro. | |
10 #include <guichan/opengl/openglallegroimageloader.hpp> | |
11 #include <guichan.hpp> | |
12 #include <guichan/opengl.hpp> | |
13 #include <guichan/allegro.hpp> | |
14 | |
15 namespace openglallegro | |
16 { | |
17 // All back ends contain objects to make Guichan work on a | |
18 // specific target. They are a Graphics object to make Guichan | |
19 // able to draw itself using OpenGL, an input objec to make | |
20 // Guichan able to get user input using Allegro and an ImageLoader | |
21 // object to make Guichan able to load images using OpenGL and Allegro. | |
22 gcn::OpenGLGraphics* graphics; | |
23 gcn::AllegroInput* input; | |
24 gcn::OpenGLAllegroImageLoader* imageLoader; | |
25 | |
26 /** | |
27 * Initialises the OpenGL and Allegro application. This function creates the global | |
28 * Gui object that can be populated by various examples. | |
29 */ | |
30 void init() | |
31 { | |
32 // We simply initialise OpenGL and Allegro as we would do with any OpenGL | |
33 // and Allegro application. | |
34 allegro_init(); | |
35 | |
36 install_allegro_gl(); | |
37 | |
38 allegro_gl_clear_settings(); | |
39 allegro_gl_set (AGL_COLOR_DEPTH, 32); | |
40 allegro_gl_set (AGL_Z_DEPTH, 24); | |
41 allegro_gl_set (AGL_FULLSCREEN, TRUE); | |
42 allegro_gl_set (AGL_DOUBLEBUFFER, 1); | |
43 allegro_gl_set (AGL_SUGGEST, AGL_COLOR_DEPTH | AGL_Z_DEPTH | AGL_DOUBLEBUFFER); | |
44 | |
45 set_gfx_mode(GFX_OPENGL_WINDOWED, 640, 480, 0, 0); | |
46 | |
47 install_keyboard(); | |
48 install_mouse(); | |
49 install_timer(); | |
50 | |
51 glViewport(0, 0, 640, 480); | |
52 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); | |
53 | |
54 // Now it's time to initialise the Guichan OpenGL back end | |
55 // and the Guichan Allegro back end. | |
56 | |
57 imageLoader = new gcn::OpenGLAllegroImageLoader(); | |
58 // The ImageLoader Guichan should use needs to be passed to the Image object | |
59 // using a static function. | |
60 gcn::Image::setImageLoader(imageLoader); | |
61 graphics = new gcn::OpenGLGraphics(); | |
62 // We need to tell the OpenGL Graphics object how big the screen is. | |
63 graphics->setTargetPlane(640, 480); | |
64 input = new gcn::AllegroInput(); | |
65 | |
66 // Now we create the Gui object to be used with this OpenGL | |
67 // and Allegro application. | |
68 globals::gui = new gcn::Gui(); | |
69 // The Gui object needs a Graphics to be able to draw itself and an Input | |
70 // object to be able to check for user input. In this case we provide the | |
71 // Gui object with OpenGL and Allegro implementations of these objects hence | |
72 // making Guichan able to utilise OpenGL and Allegro. | |
73 globals::gui->setGraphics(graphics); | |
74 globals::gui->setInput(input); | |
75 } | |
76 | |
77 /** | |
78 * Halts the OpenGL and Allegro application. | |
79 */ | |
80 void halt() | |
81 { | |
82 delete globals::gui; | |
83 | |
84 delete imageLoader; | |
85 delete input; | |
86 delete graphics; | |
87 } | |
88 | |
89 /** | |
90 * Runs the OpenGL and Allegro application. | |
91 */ | |
92 void run() | |
93 { | |
94 while(!key[KEY_ESC]) | |
95 { | |
96 // Now we let the Gui object perform its logic. | |
97 globals::gui->logic(); | |
98 // Now we let the Gui object draw itself. | |
99 globals::gui->draw(); | |
100 | |
101 // Now we draw the mouse cursor. | |
102 allegro_gl_set_allegro_mode(); | |
103 show_mouse(screen); | |
104 algl_draw_mouse(); | |
105 allegro_gl_unset_allegro_mode(); | |
106 | |
107 // Finally we update the screen. | |
108 allegro_gl_flip(); | |
109 } | |
110 } | |
111 } |