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
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
00023
00024 #endif
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
00037
00038
00039 #define __glext_h_
00040 #define __glxext_h_
00041 #include <GL/gl.h>
00042 #undef __glext_h_
00043 #undef __glxext_h_
00044
00045 #endif
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 4
00064 #define AGL_WIP_VERSION 0
00065 #define AGL_VERSION_STR "0.4.0 RC4"
00066
00069
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
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
00340 #define AGL_FLOAT_COLOR 0x00800000
00341
00344 #define AGL_FLOAT_Z 0x01000000
00345
00346
00347
00348
00349
00350
00351 #define AGL_CONFIG_RESRVED 0xA000000
00352
00353
00356 #define AGL_DONTCARE 0
00357 #define AGL_SUGGEST -1
00358 #define AGL_REQUIRE -2
00359
00364 #define AGL_KEEP 1
00365 #define AGL_RELEASE 2
00366
00371 extern void allegro_gl_clear_settings (void);
00372 extern void allegro_gl_set (int option, int value);
00373 extern int allegro_gl_get (int option);
00374 extern void allegro_gl_save_settings();
00375 extern void allegro_gl_load_settings();
00392 #if defined DOXYGEN
00393
00398 # define GFX_OPENGL_WINDOWED
00399
00400 # define GFX_OPENGL_FULLSCREEN
00401
00402 #define GFX_OPENGL
00403
00406 #else
00407
00408 #if defined ALLEGROGL_GENERIC_DRIVER
00409
00410
00411 #define GFX_OPENGL_WINDOWED AL_ID('O','G','L','W')
00412 #define GFX_OPENGL_FULLSCREEN AL_ID('O','G','L','F')
00413
00414 #else
00415 #if defined _WIN32
00416
00417 #define GFX_OPENGL_WINDOWED AL_ID('O','G','L','W')
00418 #define GFX_OPENGL_FULLSCREEN AL_ID('O','G','L','F')
00419
00420 #elif defined ALLEGROGL_HAVE_XF86VIDMODE
00421
00422 #define GFX_OPENGL_WINDOWED AL_ID('O','G','L','W')
00423 #define GFX_OPENGL_FULLSCREEN AL_ID('O','G','L','F')
00424
00425 #elif defined ALLEGRO_WITH_XWINDOWS
00426
00427 #define GFX_OPENGL_WINDOWED AL_ID('O','G','L','W')
00428
00429 #elif defined ALLEGRO_MACOSX
00430
00431 #define GFX_OPENGL_WINDOWED AL_ID('O','G','L','W')
00432 #define GFX_OPENGL_FULLSCREEN AL_ID('O','G','L','F')
00433
00434 #else
00435 #warning Unknown or unsupported platform.
00436 #endif
00437 #endif
00438
00439 #define GFX_OPENGL AL_ID('O','G','L','D')
00440
00441 #endif
00442
00443
00444
00445 extern GFX_DRIVER gfx_allegro_gl_default;
00446 #ifdef GFX_OPENGL_WINDOWED
00447 extern GFX_DRIVER gfx_allegro_gl_windowed;
00448 #endif
00449 #ifdef GFX_OPENGL_FULLSCREEN
00450 extern GFX_DRIVER gfx_allegro_gl_fullscreen;
00451 #endif
00452
00453
00454
00462 extern int allegro_gl_use_mipmapping(int enable);
00463 extern int allegro_gl_use_alpha_channel(int enable);
00464 extern int allegro_gl_flip_texture(int enable);
00465 extern int allegro_gl_check_texture (BITMAP *bmp);
00466 extern int allegro_gl_check_texture_ex(int flags, BITMAP *bmp,
00467 GLint internal_format);
00468 extern GLint allegro_gl_get_texture_format(BITMAP *bmp);
00469 extern GLint allegro_gl_set_texture_format(GLint format);
00470 extern GLenum allegro_gl_get_bitmap_type(BITMAP *bmp);
00471 extern GLenum allegro_gl_get_bitmap_color_format(BITMAP *bmp);
00472 extern GLuint allegro_gl_make_texture (BITMAP *bmp);
00473 extern GLuint allegro_gl_make_masked_texture (BITMAP *bmp);
00474 extern GLuint allegro_gl_make_texture_ex(int flags, BITMAP *bmp,
00475 GLint internal_format);
00476
00477
00480 #define AGL_TEXTURE_MIPMAP 0x01
00481
00485 #define AGL_TEXTURE_HAS_ALPHA 0x02
00486
00491 #define AGL_TEXTURE_FLIP 0x04
00492
00496 #define AGL_TEXTURE_MASKED 0x08
00497
00502 #define AGL_TEXTURE_RESCALE 0x10
00503
00504
00507 #define AGL_TEXTURE_ALPHA_ONLY 0x20
00508
00519 extern void allegro_gl_set_allegro_mode (void);
00520 extern void allegro_gl_unset_allegro_mode (void);
00521 extern void allegro_gl_set_projection (void);
00522 extern void allegro_gl_unset_projection (void);
00536 extern void allegro_gl_MATRIX_to_GLfloat (MATRIX *m, GLfloat gl[16]);
00537 extern void allegro_gl_MATRIX_to_GLdouble (MATRIX *m, GLdouble gl[16]);
00538 extern void allegro_gl_MATRIX_f_to_GLfloat (MATRIX_f *m, GLfloat gl[16]);
00539 extern void allegro_gl_MATRIX_f_to_GLdouble (MATRIX_f *m, GLdouble gl[16]);
00540
00541 extern void allegro_gl_GLfloat_to_MATRIX (GLfloat gl[16], MATRIX *m);
00542 extern void allegro_gl_GLdouble_to_MATRIX (GLdouble gl[16], MATRIX *m);
00543 extern void allegro_gl_GLfloat_to_MATRIX_f (GLfloat gl[16], MATRIX_f *m);
00544 extern void allegro_gl_GLdouble_to_MATRIX_f (GLdouble gl[16], MATRIX_f *m);
00545
00550 extern void allegro_gl_apply_quat(QUAT *q);
00551 extern void allegro_gl_quat_to_glrotatef(QUAT *q, float *angle,
00552 float *x, float *y, float *z);
00553 extern void allegro_gl_quat_to_glrotated(QUAT *q, double *angle,
00554 double *x, double *y, double *z);
00576
00580 #define AGL_FONT_TYPE_DONT_CARE -1
00581
00591 #define AGL_FONT_TYPE_BITMAP 0
00592
00603 #define AGL_FONT_TYPE_OUTLINE 1
00604
00615 #define AGL_FONT_TYPE_TEXTURED 2
00616
00617
00618
00623 #define AGL_FONT_STYLE_BOLD 1
00624
00628 #define AGL_FONT_STYLE_BLACK 2
00629
00633 #define AGL_FONT_STYLE_ITALIC 4
00634
00638 #define AGL_FONT_STYLE_UNDERLINE 8
00639
00643 #define AGL_FONT_STYLE_STRIKEOUT 16
00644
00650 #define AGL_FONT_STYLE_ANTI_ALIASED 32
00651
00658 #define AGL_FONT_POLYGONS 1
00659
00660
00667 #define AGL_FONT_LINES 2
00668
00669
00670 extern int allegro_gl_printf(AL_CONST FONT *f, float x, float y, float z,
00671 int color, AL_CONST char *format, ...);
00672 extern int allegro_gl_printf_ex(AL_CONST FONT *f, float x, float y, float z,
00673 AL_CONST char *format, ...);
00674 extern FONT *allegro_gl_convert_allegro_font(FONT *f, int type, float scale);
00675 extern FONT *allegro_gl_convert_allegro_font_ex(FONT *f, int type, float scale,
00676 GLint format);
00677
00678 extern void allegro_gl_set_font_generation_mode(int mode);
00679 extern FONT *allegro_gl_load_system_font(char *name, int style, int w, int h);
00680 extern FONT *allegro_gl_load_system_font_ex(char *name, int type, int style,
00681 int w, int h, float depth, int start, int end);
00682 extern void allegro_gl_destroy_font(FONT *f);
00683 extern size_t allegro_gl_list_font_textures(FONT *f, GLuint *ids, size_t max_num_id);
00705 #if defined DOXYGEN
00706
00713 #define AGL_DEFINE_PROC_TYPE
00714
00715 #else
00716
00717 extern int allegro_gl_is_extension_supported(const char *);
00718 extern void *allegro_gl_get_proc_address(const char *);
00719
00720 #if defined ALLEGRO_WINDOWS
00721 #define AGL_DEFINE_PROC_TYPE(type, name, args) \
00722 typedef type (APIENTRY * name) args;
00723 #else
00724 #define AGL_DEFINE_PROC_TYPE(type, name, args) \
00725 typedef type (*name) args;
00726 #endif
00727
00728 #endif
00729
00751 extern int algl_do_dialog (DIALOG *dialog, int focus_obj);
00752 extern int algl_popup_dialog (DIALOG *dialog, int focus_obj);
00753 extern void algl_draw_mouse (void);
00754 extern void algl_set_mouse_drawer (void (*user_draw_mouse)(void));
00755 extern int algl_alert(AL_CONST char *s1, AL_CONST char *s2, AL_CONST char *s3,
00756 AL_CONST char *b1, AL_CONST char *b2, int c1, int c2);
00757 extern int algl_alert3(AL_CONST char *s1, AL_CONST char *s2, AL_CONST char *s3,
00758 AL_CONST char *b1, AL_CONST char *b2, AL_CONST char *b3,
00759 int c1, int c2, int c3);
00760 extern int d_algl_viewport_proc(int msg, DIALOG *d, int c);
00761
00766 #ifdef __cplusplus
00767 }
00768 #endif
00769
00770
00771
00772 #ifdef GL_VERSION_1_1
00773 #ifndef GL_TEXTURE_BINDING_2D
00774
00775 #ifdef GL_TEXTURE_2D_BINDING
00776 #define GL_TEXTURE_BINDING_2D GL_TEXTURE_2D_BINDING
00777 #endif
00778
00779 #else
00780
00781 #ifdef GL_TEXTURE_BINDING_2D
00782 #define GL_TEXTURE_2D_BINDING GL_TEXTURE_BINDING_2D
00783 #endif
00784
00785 #endif
00786
00787 #ifndef GL_TEXTURE_BINDING_2D
00788 #warning "GL_TEXTURE_BINDING_2D or GL_TEXTURE_2D_BINDING isn't defined by your"
00789 #warning "OpenGL headers. Make sure you have a genuine set of headers for"
00790 #warning "OpenGL 1.1 (or greater)"
00791 #endif
00792 #endif
00793
00794 #endif
00795