Main Page | Modules | File List | Globals | Related Pages

alleggl.h

Go to the documentation of this file.
00001 
00005 #ifndef _allegrogl_included_alleggl_h
00006 #define _allegrogl_included_alleggl_h
00007 
00008 #include <allegro.h>
00009 
00010 #ifdef ALLEGRO_WINDOWS
00011 
00012 #ifndef WIN32_LEAN_AND_MEAN
00013 #define WIN32_LEAN_AND_MEAN
00014 #define WIN32_LEAN_AND_MEAN_defined
00015 #endif /* WIN32_LEAN_AND_MEAN */
00016 
00017 #include <winalleg.h>
00018 
00019 #ifdef WIN32_LEAN_AND_MEAN_defined
00020 #undef WIN32_LEAN_AND_MEAN_defined
00021 #undef WIN32_LEAN_AND_MEAN
00022 #endif /* WIN32_LEAN_AND_MEAN_defined */
00023 
00024 #endif /* ALLEGRO_WINDOWS */
00025 
00026 #ifdef ALLEGRO_MACOSX
00027 
00028 #include <OpenGL/OpenGL.h>
00029 #include <OpenGL/gl.h>
00030 #include <OpenGL/glext.h>
00031 
00032 #ifndef GL_GLEXT_PROTOTYPES
00033 #define GL_GLEXT_PROTOTYPES
00034 #endif
00035 
00036 #else /* ALLEGRO_MACOSX */
00037 
00038 /* HACK: Prevent both Mesa and SGI's broken headers from screwing us */
00039 #define __glext_h_
00040 #define __glxext_h_
00041 #include <GL/gl.h>
00042 #undef  __glext_h_
00043 #undef  __glxext_h_
00044 
00045 #endif /* ALLEGRO_MACOSX */
00046 
00047 
00048 #include "allegrogl/gl_ext.h"
00049 
00050 #ifdef ALLEGRO_WITH_XWINDOWS
00051 #ifndef HAVE_LIBPTHREAD
00052 #   error AllegroGL requires Allegro to have pthread support enabled!
00053 #endif
00054 #include <alleggl_config.h>
00055 #endif
00056 
00057 
00062 #define AGL_VERSION     0            
00063 #define AGL_SUB_VERSION 2            
00064 #define AGL_WIP_VERSION 4            
00065 #define AGL_VERSION_STR "0.2.4"      
00066 
00069 /* Version Check */
00070 #if (ALLEGRO_VERSION <= 3)
00071     #error AllegroGL requires Allegro 4.0.0 or later to compile!
00072 #endif
00073 #ifndef GL_VERSION_1_1
00074     #error AllegroGL requires OpenGL 1.1 libraries or later to compile!
00075 #endif
00076 
00077 
00078 #ifdef __cplusplus
00079 extern "C" {
00080 #endif
00081 
00082 #ifdef ALLEGRO_WINDOWS
00083     
00084 /* Missing #defines from Mingw */
00085 #ifndef PFD_SWAP_LAYER_BUFFERS
00086 #define PFD_SWAP_LAYER_BUFFERS  0x00000800
00087 #endif
00088 
00089 #ifndef PFD_GENERIC_ACCELERATED
00090 #define PFD_GENERIC_ACCELERATED 0x00001000
00091 #endif
00092 
00093 #ifndef PFD_SUPPORT_DIRECTDRAW
00094 #define PFD_SUPPORT_DIRECTDRAW  0x00002000
00095 #endif
00096 
00097 #ifndef CDS_FULLSCREEN
00098 #define CDS_FULLSCREEN      0x00000004
00099 #endif
00100 
00101 #ifndef ENUM_CURRENT_SETTINGS
00102 #define ENUM_CURRENT_SETTINGS       ((DWORD)-1)
00103 #endif
00104 
00105 #endif
00106 
00107 
00108 #define AGL_ERROR_SIZE 256
00109 extern char allegro_gl_error[AGL_ERROR_SIZE];
00110 
00111 
00121 extern int install_allegro_gl(void);
00122 extern void remove_allegro_gl(void);
00123 
00124 extern void allegro_gl_flip (void);
00125 extern float allegro_gl_opengl_version();
00126 
00135 #define allegro_gl_begin() ;
00136 
00145 #define allegro_gl_end() ;
00146 
00158 #define AGL_ALLEGRO_FORMAT  0x00000001
00159 
00164 #define AGL_RED_DEPTH       0x00000002
00165 
00170 #define AGL_GREEN_DEPTH     0x00000004
00171 
00176 #define AGL_BLUE_DEPTH      0x00000008
00177 
00183 #define AGL_ALPHA_DEPTH     0x00000010
00184 
00188 #define AGL_COLOR_DEPTH     0x00000020
00189 
00190 
00196 #define AGL_ACC_RED_DEPTH   0x00000040
00197 
00203 #define AGL_ACC_GREEN_DEPTH 0x00000080
00204 
00205 
00211 #define AGL_ACC_BLUE_DEPTH  0x00000100
00212 
00213 
00219 #define AGL_ACC_ALPHA_DEPTH 0x00000200
00220 
00225 #define AGL_DOUBLEBUFFER    0x00000400
00226 
00234 #define AGL_STEREO          0x00000800
00235 
00236 
00240 #define AGL_AUX_BUFFERS     0x00001000
00241 
00242 
00247 #define AGL_Z_DEPTH         0x00002000
00248 
00249 
00256 #define AGL_STENCIL_DEPTH   0x00004000
00257 
00261 #define AGL_WINDOW_X        0x00008000
00262 
00265 #define AGL_WINDOW_Y        0x00010000
00266 
00275 #define AGL_RENDERMETHOD    0x00020000
00276 
00280 #define AGL_FULLSCREEN      0x00040000
00281 
00285 #define AGL_WINDOWED        0x00080000
00286 
00302 #define AGL_VIDEO_MEMORY_POLICY     0x00100000
00303 
00326 #define AGL_SAMPLE_BUFFERS  0x00200000
00327 
00334 #define AGL_SAMPLES     0x00400000
00335 
00338 /* XXX <rohannessian> I'm reserving 2 bits here for later expansion. DO NOT USE
00339  * without consulting me first.
00340  */
00341 #define AGL_CONFIG_RESRVED 0xA000000
00342 
00343 
00346 #define AGL_DONTCARE   0 
00347 #define AGL_SUGGEST   -1 
00348 #define AGL_REQUIRE   -2 
00349 
00354 #define AGL_KEEP    1 
00355 #define AGL_RELEASE 2 
00356 
00361 extern void allegro_gl_clear_settings (void);
00362 extern void allegro_gl_set (int option, int value);
00363 extern int  allegro_gl_get (int option);
00364 extern void allegro_gl_save_settings();
00365 extern void allegro_gl_load_settings();
00382 #if defined DOXYGEN  /* Is this a documentation scan? */
00383 
00388 # define GFX_OPENGL_WINDOWED
00389 
00390 # define GFX_OPENGL_FULLSCREEN
00391 
00392   #define GFX_OPENGL
00393 
00396 #else
00397 
00398 #if defined ALLEGROGL_GENERIC_DRIVER
00399   /* Allegro is able to determine at run-time if windowed or fullscreen modes
00400      are available */
00401   #define GFX_OPENGL_WINDOWED               AL_ID('O','G','L','W')
00402   #define GFX_OPENGL_FULLSCREEN             AL_ID('O','G','L','F')
00403 
00404 #else
00405 #if defined _WIN32
00406   /* Windows always supports fullscreen */
00407   #define GFX_OPENGL_WINDOWED               AL_ID('O','G','L','W')
00408   #define GFX_OPENGL_FULLSCREEN             AL_ID('O','G','L','F')
00409 
00410 #elif defined ALLEGROGL_HAVE_XF86VIDMODE
00411   /* X fullscreen support only works with the XF86 VidMode extension */
00412   #define GFX_OPENGL_WINDOWED               AL_ID('O','G','L','W')
00413   #define GFX_OPENGL_FULLSCREEN             AL_ID('O','G','L','F')
00414 
00415 #elif defined ALLEGRO_WITH_XWINDOWS
00416   /* Plain X only supports windowed modes */
00417   #define GFX_OPENGL_WINDOWED               AL_ID('O','G','L','W')
00418   
00419 #elif defined ALLEGRO_MACOSX
00420   /* MacOS X always supports fullscreen */
00421   #define GFX_OPENGL_WINDOWED               AL_ID('O','G','L','W')
00422   #define GFX_OPENGL_FULLSCREEN             AL_ID('O','G','L','F')
00423 
00424 #else
00425   #warning Unknown or unsupported platform.
00426 #endif
00427 #endif
00428 
00429 #define GFX_OPENGL                  AL_ID('O','G','L','D')
00430 
00431 #endif
00432 
00433 
00434 /* Declare graphics driver objects */
00435 extern GFX_DRIVER gfx_allegro_gl_default;
00436 #ifdef GFX_OPENGL_WINDOWED
00437 extern GFX_DRIVER gfx_allegro_gl_windowed;
00438 #endif
00439 #ifdef GFX_OPENGL_FULLSCREEN
00440 extern GFX_DRIVER gfx_allegro_gl_fullscreen;
00441 #endif
00442 
00443 
00444 
00445 extern BITMAP *allegro_gl_screen;
00446 extern BITMAP *__allegro_gl_memory;
00447 
00448 
00454 #define AGL_MODE_DIRECT     0
00455 #define AGL_MODE_DUPLEX     1
00456 #define AGL_MODE_OPAQUE     2
00457 #define AGL_MODE_MASKED     3
00458 #define AGL_MODE_OPAQUE_RT  4
00459 #define AGL_MODE_MASKED_RT  5
00460 
00472 extern int allegro_gl_use_mipmapping(int enable);
00473 extern int allegro_gl_use_alpha_channel(int enable);
00474 extern int allegro_gl_flip_texture(int enable);
00475 extern int allegro_gl_check_texture (BITMAP *bmp);
00476 extern int allegro_gl_check_texture_ex(int flags, BITMAP *bmp,
00477                                        GLint internal_format);
00478 extern GLint allegro_gl_get_texture_format(BITMAP *bmp);
00479 extern GLint allegro_gl_set_texture_format(GLint format);
00480 extern GLenum allegro_gl_get_bitmap_type(BITMAP *bmp);
00481 extern GLenum allegro_gl_get_bitmap_color_format(BITMAP *bmp);
00482 extern GLuint allegro_gl_make_texture (BITMAP *bmp);
00483 extern GLuint allegro_gl_make_masked_texture (BITMAP *bmp);
00484 extern GLuint allegro_gl_make_texture_ex(int flags, BITMAP *bmp,
00485                                          GLint internal_format);
00486 
00487 
00490 #define AGL_TEXTURE_MIPMAP      0x01
00491 
00495 #define AGL_TEXTURE_HAS_ALPHA   0x02
00496 
00501 #define AGL_TEXTURE_FLIP        0x04
00502 
00506 #define AGL_TEXTURE_MASKED      0x08
00507 
00512 #define AGL_TEXTURE_RESCALE     0x10
00513 
00514 
00517 #define AGL_TEXTURE_ALPHA_ONLY  0x20
00518 
00529 extern int allegro_gl_screen_mode (int newmode);
00530 extern void allegro_gl_set_allegro_mode (void);
00531 extern void allegro_gl_unset_allegro_mode (void);
00532 extern void allegro_gl_set_projection (void);
00533 extern void allegro_gl_unset_projection (void);
00547 extern void allegro_gl_MATRIX_to_GLfloat (MATRIX *m, GLfloat gl[16]);
00548 extern void allegro_gl_MATRIX_to_GLdouble (MATRIX *m, GLdouble gl[16]);
00549 extern void allegro_gl_MATRIX_f_to_GLfloat (MATRIX_f *m, GLfloat gl[16]);
00550 extern void allegro_gl_MATRIX_f_to_GLdouble (MATRIX_f *m, GLdouble gl[16]);
00551 
00552 extern void allegro_gl_GLfloat_to_MATRIX (GLfloat gl[16], MATRIX *m);
00553 extern void allegro_gl_GLdouble_to_MATRIX (GLdouble gl[16], MATRIX *m);
00554 extern void allegro_gl_GLfloat_to_MATRIX_f (GLfloat gl[16], MATRIX_f *m);
00555 extern void allegro_gl_GLdouble_to_MATRIX_f (GLdouble gl[16], MATRIX_f *m);
00556 
00561 extern void allegro_gl_apply_quat(QUAT *q);
00562 extern void allegro_gl_quat_to_glrotatef(QUAT *q, float *angle,
00563                                          float *x, float *y, float *z);
00564 extern void allegro_gl_quat_to_glrotated(QUAT *q, double *angle,
00565                                          double *x, double *y, double *z);
00587 /* These define the supported font types */
00591 #define AGL_FONT_TYPE_DONT_CARE     -1
00592 
00602 #define AGL_FONT_TYPE_BITMAP         0
00603 
00614 #define AGL_FONT_TYPE_OUTLINE        1
00615 
00626 #define AGL_FONT_TYPE_TEXTURED       2
00627 
00628 
00629 /* These defines the font styles for system generated fonts */
00634 #define AGL_FONT_STYLE_BOLD          1
00635 
00639 #define AGL_FONT_STYLE_BLACK         2
00640 
00644 #define AGL_FONT_STYLE_ITALIC        4
00645 
00649 #define AGL_FONT_STYLE_UNDERLINE     8
00650 
00654 #define AGL_FONT_STYLE_STRIKEOUT    16
00655 
00661 #define AGL_FONT_STYLE_ANTI_ALIASED 32
00662 
00669 #define AGL_FONT_POLYGONS 1
00670 
00671 
00678 #define AGL_FONT_LINES    2
00679 
00680 
00681 extern int allegro_gl_printf(FONT *f, float x, float y, float z, int color,
00682                              char *format, ...);
00683 
00684 extern FONT *allegro_gl_convert_allegro_font(FONT *f, int type, float scale);
00685 extern FONT *allegro_gl_convert_allegro_font_ex(FONT *f, int type, float scale,
00686                                                 GLint format);
00687 
00688 extern void allegro_gl_set_font_generation_mode(int mode);
00689 extern FONT *allegro_gl_load_system_font(char *name, int style, int w, int h);
00690 extern FONT *allegro_gl_load_system_font_ex(char *name, int type, int style,
00691                                  int w, int h, float depth, int start, int end);
00692 extern void allegro_gl_destroy_font(FONT *f);
00693 extern size_t allegro_gl_list_font_textures(FONT *f, GLuint *ids, size_t max_num_id);
00715 #if defined DOXYGEN  /* Is this a documentation scan? */
00716 
00723 #define AGL_DEFINE_PROC_TYPE
00724 
00725 #else
00726 
00727 extern int allegro_gl_is_extension_supported(const char *);
00728 extern void *allegro_gl_get_proc_address(const char *);
00729 
00730 #if defined ALLEGRO_WINDOWS
00731     #define AGL_DEFINE_PROC_TYPE(type, name, args) \
00732         typedef type (APIENTRY * name) args;
00733 #else
00734     #define AGL_DEFINE_PROC_TYPE(type, name, args) \
00735         typedef type (*name) args;
00736 #endif
00737 
00738 #endif
00739 
00761 extern int algl_do_dialog (DIALOG *dialog, int focus_obj);
00762 extern int algl_popup_dialog (DIALOG *dialog, int focus_obj);
00763 extern void algl_draw_mouse (void);
00764 extern void algl_set_mouse_drawer (void (*user_draw_mouse)(void));
00765 extern int algl_alert(AL_CONST char *s1, AL_CONST char *s2, AL_CONST char *s3,
00766                       AL_CONST char *b1, AL_CONST char *b2, int c1, int c2);
00767 extern int algl_alert3(AL_CONST char *s1, AL_CONST char *s2, AL_CONST char *s3,
00768                        AL_CONST char *b1, AL_CONST char *b2, AL_CONST char *b3,
00769                        int c1, int c2, int c3);
00770 extern int d_algl_viewport_proc(int msg, DIALOG *d, int c);
00771 
00776 #ifdef __cplusplus
00777 }
00778 #endif
00779 
00780 
00781 /* Fixes to MS's (or SGI?) broken GL headers */
00782 #ifdef GL_VERSION_1_1
00783 #ifndef GL_TEXTURE_BINDING_2D
00784 
00785 #ifdef GL_TEXTURE_2D_BINDING
00786 #define GL_TEXTURE_BINDING_2D GL_TEXTURE_2D_BINDING
00787 #endif
00788 
00789 #else
00790 
00791 #ifdef GL_TEXTURE_BINDING_2D
00792 #define GL_TEXTURE_2D_BINDING GL_TEXTURE_BINDING_2D
00793 #endif
00794 
00795 #endif
00796 
00797 #ifndef GL_TEXTURE_BINDING_2D
00798 #warning "GL_TEXTURE_BINDING_2D or GL_TEXTURE_2D_BINDING isn't defined by your"
00799 #warning "OpenGL headers. Make sure you have a genuine set of headers for"
00800 #warning "OpenGL 1.1 (or greater)"
00801 #endif
00802 #endif
00803 
00804 #endif
00805 

Generated on Wed Jun 30 23:59:52 2004 for AllegroGL by doxygen 1.3.5