SynGame/allegro/include/allegro5/internal/aintern_opengl.h

144 lines
4.5 KiB
C

#ifndef __al_included_allegro5_aintern_opengl_h
#define __al_included_allegro5_aintern_opengl_h
#include "allegro5/opengl/gl_ext.h"
#include "allegro5/internal/aintern_bitmap.h"
#include "allegro5/internal/aintern_display.h"
enum {
_ALLEGRO_OPENGL_VERSION_0 = 0, /* dummy */
_ALLEGRO_OPENGL_VERSION_1_0 = 0x01000000,
_ALLEGRO_OPENGL_VERSION_1_1 = 0x01010000,
_ALLEGRO_OPENGL_VERSION_1_2 = 0x01020000,
_ALLEGRO_OPENGL_VERSION_1_2_1 = 0x01020100,
_ALLEGRO_OPENGL_VERSION_1_3 = 0x01030000,
_ALLEGRO_OPENGL_VERSION_1_4 = 0x01040000,
_ALLEGRO_OPENGL_VERSION_1_5 = 0x01050000,
_ALLEGRO_OPENGL_VERSION_2_0 = 0x02000000,
_ALLEGRO_OPENGL_VERSION_2_1 = 0x02010000,
_ALLEGRO_OPENGL_VERSION_3_0 = 0x03000000,
_ALLEGRO_OPENGL_VERSION_3_1 = 0x03010000,
_ALLEGRO_OPENGL_VERSION_3_2 = 0x03020000,
_ALLEGRO_OPENGL_VERSION_3_3 = 0x03030000,
_ALLEGRO_OPENGL_VERSION_4_0 = 0x04000000
};
#define ALLEGRO_MAX_OPENGL_FBOS 8
struct ALLEGRO_BITMAP_OGL;
enum {
FBO_INFO_UNUSED = 0,
FBO_INFO_TRANSIENT = 1, /* may be destroyed for another bitmap */
FBO_INFO_PERSISTENT = 2 /* exclusive to the owner bitmap */
};
typedef struct ALLEGRO_FBO_INFO
{
int fbo_state;
GLuint fbo;
struct ALLEGRO_BITMAP_OGL *owner;
double last_use_time;
} ALLEGRO_FBO_INFO;
typedef struct ALLEGRO_BITMAP_OGL
{
ALLEGRO_BITMAP bitmap; /* This must be the first member. */
/* Driver specifics. */
int true_w;
int true_h;
GLuint texture; /* 0 means, not uploaded yet. */
#if defined ALLEGRO_GP2XWIZ
EGLSurface pbuffer;
EGLContext context;
NativeWindowType pbuf_native_wnd;
bool changed;
#else
ALLEGRO_FBO_INFO *fbo_info;
#endif
unsigned char *lock_buffer;
float left, top, right, bottom; /* Texture coordinates. */
bool is_backbuffer; /* This is not a real bitmap, but the backbuffer. */
} ALLEGRO_BITMAP_OGL;
typedef struct OPENGL_INFO {
uint32_t version; /* OpenGL version */
int max_texture_size; /* Maximum texture size */
int is_voodoo3_and_under; /* Special cases for Voodoo 1-3 */
int is_voodoo; /* Special cases for Voodoo cards */
int is_matrox_g200; /* Special cases for Matrox G200 boards */
int is_ati_rage_pro; /* Special cases for ATI Rage Pro boards */
int is_ati_radeon_7000; /* Special cases for ATI Radeon 7000 */
int is_ati_r200_chip; /* Special cases for ATI card with chip R200 */
int is_mesa_driver; /* Special cases for MESA */
} OPENGL_INFO;
typedef struct ALLEGRO_OGL_EXTRAS
{
/* A list of extensions supported by Allegro, for this context. */
ALLEGRO_OGL_EXT_LIST *extension_list;
/* A list of extension API, loaded by Allegro, for this context. */
ALLEGRO_OGL_EXT_API *extension_api;
/* Various info about OpenGL implementation. */
OPENGL_INFO ogl_info;
ALLEGRO_BITMAP_OGL *opengl_target;
ALLEGRO_BITMAP_OGL *backbuffer;
/* True if display resources are shared among displays. */
bool is_shared;
ALLEGRO_FBO_INFO fbos[ALLEGRO_MAX_OPENGL_FBOS];
} ALLEGRO_OGL_EXTRAS;
typedef struct ALLEGRO_OGL_BITMAP_VERTEX
{
float x, y;
float tx, ty;
float r, g, b, a;
} ALLEGRO_OGL_BITMAP_VERTEX;
/* extensions */
int _al_ogl_look_for_an_extension(const char *name, const GLubyte *extensions);
void _al_ogl_set_extensions(ALLEGRO_OGL_EXT_API *ext);
void _al_ogl_manage_extensions(ALLEGRO_DISPLAY *disp);
void _al_ogl_unmanage_extensions(ALLEGRO_DISPLAY *disp);
/* bitmap */
ALLEGRO_BITMAP *_al_ogl_create_bitmap(ALLEGRO_DISPLAY *d, int w, int h);
ALLEGRO_BITMAP *_al_ogl_create_sub_bitmap(ALLEGRO_DISPLAY *d, ALLEGRO_BITMAP *parent,
int x, int y, int w, int h);
/* common driver */
void _al_ogl_reset_fbo_info(ALLEGRO_FBO_INFO *info);
bool _al_ogl_create_persistent_fbo(ALLEGRO_BITMAP *bitmap);
ALLEGRO_FBO_INFO *_al_ogl_persist_fbo(ALLEGRO_DISPLAY *display,
ALLEGRO_FBO_INFO *transient_fbo_info);
void _al_ogl_setup_gl(ALLEGRO_DISPLAY *d);
void _al_ogl_set_target_bitmap(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *bitmap);
void _al_ogl_setup_bitmap_clipping(const ALLEGRO_BITMAP *bitmap);
ALLEGRO_BITMAP *_al_ogl_get_backbuffer(ALLEGRO_DISPLAY *d);
ALLEGRO_BITMAP_OGL* _al_ogl_create_backbuffer(ALLEGRO_DISPLAY *disp);
void _al_ogl_destroy_backbuffer(ALLEGRO_BITMAP_OGL *b);
bool _al_ogl_resize_backbuffer(ALLEGRO_BITMAP_OGL *b, int w, int h);
struct ALLEGRO_DISPLAY_INTERFACE;
/* draw */
void _al_ogl_add_drawing_functions(struct ALLEGRO_DISPLAY_INTERFACE *vt);
AL_FUNC(bool, _al_opengl_set_blender, (ALLEGRO_DISPLAY *disp));
#endif