From: <tj...@us...> - 2008-08-21 11:53:31
|
Revision: 10448 http://alleg.svn.sourceforge.net/alleg/?rev=10448&view=rev Author: tjaden Date: 2008-08-21 11:53:37 +0000 (Thu, 21 Aug 2008) Log Message: ----------- Set svn:eol-style property. Modified Paths: -------------- allegro/branches/4.9/addons/iio/allegro5/a5_iio.h allegro/branches/4.9/addons/iio/iio.c allegro/branches/4.9/addons/iio/tga.c allegro/branches/4.9/include/allegro5/color.h Property Changed: ---------------- allegro/branches/4.9/addons/iio/allegro5/a5_iio.h allegro/branches/4.9/addons/iio/iio.c allegro/branches/4.9/addons/iio/tga.c allegro/branches/4.9/include/allegro5/color.h Modified: allegro/branches/4.9/addons/iio/allegro5/a5_iio.h =================================================================== --- allegro/branches/4.9/addons/iio/allegro5/a5_iio.h 2008-08-21 08:28:39 UTC (rev 10447) +++ allegro/branches/4.9/addons/iio/allegro5/a5_iio.h 2008-08-21 11:53:37 UTC (rev 10448) @@ -1,14 +1,14 @@ -#ifndef A5_IIO_H -#define A5_IIO_H - - -typedef ALLEGRO_BITMAP *(*IIO_LOADER_FUNCTION)(AL_CONST char *filename); - - -AL_FUNC(bool, iio_init, (void)); -AL_FUNC(bool, iio_add_loader, (AL_CONST char *ext, IIO_LOADER_FUNCTION function)); -AL_FUNC(ALLEGRO_BITMAP *, iio_load, (AL_CONST char *filename)); - - -#endif // A5_IIO_H - +#ifndef A5_IIO_H +#define A5_IIO_H + + +typedef ALLEGRO_BITMAP *(*IIO_LOADER_FUNCTION)(AL_CONST char *filename); + + +AL_FUNC(bool, iio_init, (void)); +AL_FUNC(bool, iio_add_loader, (AL_CONST char *ext, IIO_LOADER_FUNCTION function)); +AL_FUNC(ALLEGRO_BITMAP *, iio_load, (AL_CONST char *filename)); + + +#endif // A5_IIO_H + Property changes on: allegro/branches/4.9/addons/iio/allegro5/a5_iio.h ___________________________________________________________________ Added: svn:eol-style + native Modified: allegro/branches/4.9/addons/iio/iio.c =================================================================== --- allegro/branches/4.9/addons/iio/iio.c 2008-08-21 08:28:39 UTC (rev 10447) +++ allegro/branches/4.9/addons/iio/iio.c 2008-08-21 11:53:37 UTC (rev 10448) @@ -1,135 +1,135 @@ -#include <ctype.h> - - -#include "allegro5/allegro5.h" -#include "allegro5/internal/aintern.h" -#include "allegro5/internal/aintern_vector.h" - - -#include "iio.h" - - -#define MAX_EXTENSION 100 - - -typedef struct Loader { - char *extension; - IIO_LOADER_FUNCTION function; -} Loader; - - -static _AL_VECTOR loaders = _AL_VECTOR_INITIALIZER(Loader *); -static bool inited = false; - - -bool iio_init(void) -{ - int success; - - if (inited) - return true; - - success = 0; - - success |= iio_add_loader("pcx", iio_load_pcx); - success |= iio_add_loader("bmp", iio_load_bmp); - success |= iio_add_loader("tga", iio_load_tga); - - if (success) - inited = true; - - return success; -} - - -bool iio_add_loader(AL_CONST char *extension, IIO_LOADER_FUNCTION function) -{ - Loader **add; - Loader *l; - - ASSERT(extension); - ASSERT(function); - - l = (Loader *)_AL_MALLOC(sizeof(*l)); - if (!l) - return false; - - l->extension = strdup(extension); - l->function = function; - - add = _al_vector_alloc_back(&loaders); - - if (add) { - *add = l; - return true; - } - else { - _AL_FREE(l); - return false; - } -} - - -static char *iio_get_extension(AL_CONST char *filename) -{ - int count = 0; - int pos = strlen(filename)-1; - char *result; - - while (pos >= 0 && filename[pos] != '.') { - count++; - pos--; - } - - if (filename[pos] == '.') { - result = strdup(filename+pos+1); - } - else { - result = strdup(""); - } - - return result; -} - - -int iio_stricmp(AL_CONST char *s1, AL_CONST char *s2) -{ - int i; - - for (i = 0; s1[i] && s2[i] && (tolower(s1[i]) == tolower(s2[i])); i++) { - /* hm, this is empty */ - } - - if (s1[i] == 0 && s2[i] == 0) - return 0; - - if (s1[i] == 0) - return -1; - if (s2[i] == 0) - return 1; - - return s1[i] - s2[i]; -} - - -ALLEGRO_BITMAP *iio_load(AL_CONST char *filename) -{ - char *p = iio_get_extension(filename); - char extension[MAX_EXTENSION]; - unsigned int i; - - strncpy(extension, p, MAX_EXTENSION); - - _AL_FREE(p); - - for (i = 0; i < loaders._size; i++) { - Loader **lptr = _al_vector_ref(&loaders, i); - Loader *l = *lptr; - if (!iio_stricmp(extension, l->extension)) { - return l->function(filename); - } - } - - return NULL; -} - +#include <ctype.h> + + +#include "allegro5/allegro5.h" +#include "allegro5/internal/aintern.h" +#include "allegro5/internal/aintern_vector.h" + + +#include "iio.h" + + +#define MAX_EXTENSION 100 + + +typedef struct Loader { + char *extension; + IIO_LOADER_FUNCTION function; +} Loader; + + +static _AL_VECTOR loaders = _AL_VECTOR_INITIALIZER(Loader *); +static bool inited = false; + + +bool iio_init(void) +{ + int success; + + if (inited) + return true; + + success = 0; + + success |= iio_add_loader("pcx", iio_load_pcx); + success |= iio_add_loader("bmp", iio_load_bmp); + success |= iio_add_loader("tga", iio_load_tga); + + if (success) + inited = true; + + return success; +} + + +bool iio_add_loader(AL_CONST char *extension, IIO_LOADER_FUNCTION function) +{ + Loader **add; + Loader *l; + + ASSERT(extension); + ASSERT(function); + + l = (Loader *)_AL_MALLOC(sizeof(*l)); + if (!l) + return false; + + l->extension = strdup(extension); + l->function = function; + + add = _al_vector_alloc_back(&loaders); + + if (add) { + *add = l; + return true; + } + else { + _AL_FREE(l); + return false; + } +} + + +static char *iio_get_extension(AL_CONST char *filename) +{ + int count = 0; + int pos = strlen(filename)-1; + char *result; + + while (pos >= 0 && filename[pos] != '.') { + count++; + pos--; + } + + if (filename[pos] == '.') { + result = strdup(filename+pos+1); + } + else { + result = strdup(""); + } + + return result; +} + + +int iio_stricmp(AL_CONST char *s1, AL_CONST char *s2) +{ + int i; + + for (i = 0; s1[i] && s2[i] && (tolower(s1[i]) == tolower(s2[i])); i++) { + /* hm, this is empty */ + } + + if (s1[i] == 0 && s2[i] == 0) + return 0; + + if (s1[i] == 0) + return -1; + if (s2[i] == 0) + return 1; + + return s1[i] - s2[i]; +} + + +ALLEGRO_BITMAP *iio_load(AL_CONST char *filename) +{ + char *p = iio_get_extension(filename); + char extension[MAX_EXTENSION]; + unsigned int i; + + strncpy(extension, p, MAX_EXTENSION); + + _AL_FREE(p); + + for (i = 0; i < loaders._size; i++) { + Loader **lptr = _al_vector_ref(&loaders, i); + Loader *l = *lptr; + if (!iio_stricmp(extension, l->extension)) { + return l->function(filename); + } + } + + return NULL; +} + Property changes on: allegro/branches/4.9/addons/iio/iio.c ___________________________________________________________________ Added: svn:eol-style + native Modified: allegro/branches/4.9/addons/iio/tga.c =================================================================== --- allegro/branches/4.9/addons/iio/tga.c 2008-08-21 08:28:39 UTC (rev 10447) +++ allegro/branches/4.9/addons/iio/tga.c 2008-08-21 11:53:37 UTC (rev 10448) @@ -1,561 +1,561 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * TGA reader. - * - * By Tim Gunn. - * - * RLE support added by Michal Mertl and Salvador Eduardo Tropea. - * - * Palette reading improved by Peter Wang. - * - * Big-endian support added by Eric Botcazou. - * - * See readme.txt for copyright information. - */ - - -#include "allegro5/allegro5.h" -#include "allegro5/internal/aintern.h" - - - -/* raw_tga_read8: - * Helper for reading 256-color raw data from TGA files. - */ -static INLINE unsigned char *raw_tga_read8(unsigned char *b, int w, PACKFILE *f) -{ - return b + pack_fread(b, w, f); -} - - - -/* rle_tga_read8: - * Helper for reading 256-color RLE data from TGA files. - */ -static void rle_tga_read8(unsigned char *b, int w, PACKFILE *f) -{ - int value, count, c = 0; - - do { - count = pack_getc(f); - if (count & 0x80) { - /* run-length packet */ - count = (count & 0x7F) + 1; - c += count; - value = pack_getc(f); - while (count--) - *b++ = value; - } - else { - /* raw packet */ - count++; - c += count; - b = raw_tga_read8(b, count, f); - } - } while (c < w); -} - - - -/* single_tga_read32: - * Helper for reading a single 32-bit data from TGA files. - */ -static INLINE int single_tga_read32(PACKFILE *f) -{ - RGB value; - int alpha; - - value.b = pack_getc(f); - value.g = pack_getc(f); - value.r = pack_getc(f); - alpha = pack_getc(f); - - return (alpha << 24) | (value.r << 16) | (value.g << 8) | value.b; -} - - - -/* raw_tga_read32: - * Helper for reading 32-bit raw data from TGA files. - */ -static unsigned int *raw_tga_read32(unsigned int *b, int w, PACKFILE *f) -{ - while (w--) - *b++ = single_tga_read32(f); - - return b; -} - - - -/* rle_tga_read32: - * Helper for reading 32-bit RLE data from TGA files. - */ -static void rle_tga_read32(unsigned int *b, int w, PACKFILE *f) -{ - int color, count, c = 0; - - do { - count = pack_getc(f); - if (count & 0x80) { - /* run-length packet */ - count = (count & 0x7F) + 1; - c += count; - color = single_tga_read32(f); - while (count--) - *b++ = color; - } - else { - /* raw packet */ - count++; - c += count; - b = raw_tga_read32(b, count, f); - } - } while (c < w); -} - - -/* single_tga_read24: - * Helper for reading a single 24-bit data from TGA files. - */ -static INLINE int single_tga_read24(PACKFILE *f) -{ - RGB value; - - value.b = pack_getc(f); - value.g = pack_getc(f); - value.r = pack_getc(f); - - return (value.r << 16) | (value.g << 8) | value.b; -} - - - -/* raw_tga_read24: - * Helper for reading 24-bit raw data from TGA files. - */ -static unsigned char *raw_tga_read24(unsigned char *b, int w, PACKFILE *f) -{ - int color; - - while (w--) { - color = single_tga_read24(f); - WRITE3BYTES(b, color); - b += 3; - } - - return b; -} - - - -/* rle_tga_read24: - * Helper for reading 24-bit RLE data from TGA files. - */ -static void rle_tga_read24(unsigned char *b, int w, PACKFILE *f) -{ - int color, count, c = 0; - - do { - count = pack_getc(f); - if (count & 0x80) { - /* run-length packet */ - count = (count & 0x7F) + 1; - c += count; - color = single_tga_read24(f); - while (count--) { - WRITE3BYTES(b, color); - b += 3; - } - } - else { - /* raw packet */ - count++; - c += count; - b = raw_tga_read24(b, count, f); - } - } while (c < w); -} - - - -/* single_tga_read16: - * Helper for reading a single 16-bit data from TGA files. - */ -static INLINE int single_tga_read16(PACKFILE *f) -{ - int value; - - value = pack_igetw(f); - - return value; - /* - (((value >> 10) & 0x1F) << _rgb_r_shift_15) | - (((value >> 5) & 0x1F) << _rgb_g_shift_15) | - ((value & 0x1F) << _rgb_b_shift_15); - */ -} - - - -/* raw_tga_read16: - * Helper for reading 16-bit raw data from TGA files. - */ -static unsigned short *raw_tga_read16(unsigned short *b, int w, PACKFILE *f) -{ - while (w--) - *b++ = single_tga_read16(f); - - return b; -} - - - -/* rle_tga_read16: - * Helper for reading 16-bit RLE data from TGA files. - */ -static void rle_tga_read16(unsigned short *b, int w, PACKFILE *f) -{ - int color, count, c = 0; - - do { - count = pack_getc(f); - if (count & 0x80) { - /* run-length packet */ - count = (count & 0x7F) + 1; - c += count; - color = single_tga_read16(f); - while (count--) - *b++ = color; - } - else { - /* raw packet */ - count++; - c += count; - b = raw_tga_read16(b, count, f); - } - } while (c < w); -} - - -/* load_tga_pf: - * Like load_tga, but starts loading from the current place in the PACKFILE - * specified. If successful the offset into the file will be left just after - * the image data. If unsuccessful the offset into the file is unspecified, - * i.e. you must either reset the offset to some known place or close the - * packfile. The packfile is not closed by this function. - */ -static ALLEGRO_BITMAP *iio_load_tga_pf(PACKFILE *f) -{ - unsigned char image_id[256], image_palette[256][3]; - unsigned char id_length, palette_type, image_type, palette_entry_size; - unsigned char bpp, descriptor_bits; - short unsigned int first_color, palette_colors; - short unsigned int left, top, image_width, image_height; - unsigned int c, i; - int y; - int compressed; - ALLEGRO_BITMAP *bmp; - ALLEGRO_LOCKED_REGION lr; - unsigned char *buf; - ASSERT(f); - - id_length = pack_getc(f); - palette_type = pack_getc(f); - image_type = pack_getc(f); - first_color = pack_igetw(f); - palette_colors = pack_igetw(f); - palette_entry_size = pack_getc(f); - left = pack_igetw(f); - top = pack_igetw(f); - image_width = pack_igetw(f); - image_height = pack_igetw(f); - bpp = pack_getc(f); - descriptor_bits = pack_getc(f); - - pack_fread(image_id, id_length, f); - - if (palette_type == 1) { - - for (i = 0; i < palette_colors; i++) { - - switch (palette_entry_size) { - - case 16: - c = pack_igetw(f); - image_palette[i][0] = (c & 0x1F) << 3; - image_palette[i][1] = ((c >> 5) & 0x1F) << 3; - image_palette[i][2] = ((c >> 10) & 0x1F) << 3; - break; - - case 24: - case 32: - image_palette[i][0] = pack_getc(f); - image_palette[i][1] = pack_getc(f); - image_palette[i][2] = pack_getc(f); - if (palette_entry_size == 32) - pack_getc(f); - break; - } - } - } - else if (palette_type != 0) { - return NULL; - } - - /* Image type: - * 0 = no image data - * 1 = uncompressed color mapped - * 2 = uncompressed true color - * 3 = grayscale - * 9 = RLE color mapped - * 10 = RLE true color - * 11 = RLE grayscale - */ - compressed = (image_type & 8); - image_type &= 7; - - if ((image_type < 1) || (image_type > 3)) { - return NULL; - } - - switch (image_type) { - - case 1: - /* paletted image */ - if ((palette_type != 1) || (bpp != 8)) { - return NULL; - } - - break; - - case 2: - /* truecolor image */ - if ((palette_type == 0) && ((bpp == 15) || (bpp == 16))) { - bpp = 15; - } - else if ((palette_type == 0) && ((bpp == 24) || (bpp == 32))) { - } - else { - return NULL; - } - break; - - case 3: - /* grayscale image */ - if ((palette_type != 0) || (bpp != 8)) { - return NULL; - } - - break; - - default: - return NULL; - } - - bmp = al_create_bitmap(image_width, image_height); - if (!bmp) { - return NULL; - } - - //*allegro_errno = 0; - - al_lock_bitmap(bmp, &lr, ALLEGRO_LOCK_WRITEONLY); - buf = _AL_MALLOC(image_width*((bpp+1/8))); - _al_push_target_bitmap(); - al_set_target_bitmap(bmp); - - for (y=image_height-1; y>=0; y--) { - switch (image_type) { - - case 1: - case 3: - if (compressed) - rle_tga_read8(buf, image_width, f); - else - raw_tga_read8(buf, image_width, f); - - for (i = 0; i < image_width; i++) { - int pix = buf[i]; - ALLEGRO_COLOR color = al_map_rgb( - image_palette[pix][0], - image_palette[pix][1], - image_palette[pix][2]); - al_put_pixel(i, y, color); - } - - break; - - case 2: - if (bpp == 32) { - if (compressed) - rle_tga_read32((unsigned int *)buf, image_width, f); - else - raw_tga_read32((unsigned int *)buf, image_width, f); - - for (i = 0; i < image_width; i++) { - int b = buf[i*4+0]; - int g = buf[i*4+1]; - int r = buf[i*4+2]; - int a = buf[i*4+3]; - ALLEGRO_COLOR color = al_map_rgba(r, g, b, a); - al_put_pixel(i, y, color); - } - } - else if (bpp == 24) { - if (compressed) - rle_tga_read24(buf, image_width, f); - else - raw_tga_read24(buf, image_width, f); - for (i = 0; i < image_width; i++) { - int b = buf[i*3+0]; - int g = buf[i*3+1]; - int r = buf[i*3+2]; - ALLEGRO_COLOR color = al_map_rgb(r, g, b); - al_put_pixel(i, y, color); - } - } - else { - if (compressed) - rle_tga_read16((unsigned short *)buf, image_width, f); - else - raw_tga_read16((unsigned short *)buf, image_width, f); - for (i = 0; i < image_width; i++) { - int pix = *((unsigned short *)(buf+i*2)); - int r = _rgb_scale_5[(pix >> 10)]; - int g = _rgb_scale_5[(pix >> 5) & 0x1F]; - int b = _rgb_scale_5[(pix & 0x1F)]; - ALLEGRO_COLOR color = al_map_rgb(r, g, b); - al_put_pixel(i, y, color); - } - } - break; - } - } - - _AL_FREE(buf); - al_unlock_bitmap(bmp); - _al_pop_target_bitmap(); - - /* - if (*allegro_errno) { - destroy_bitmap(bmp); - return NULL; - }*/ - - return bmp; -} - - - -/* save_tga_pf: - * Like save_tga but writes into the PACKFILE given instead of a new file. - * The packfile is not closed after writing is completed. On success the - * offset into the file is left after the TGA file just written. On failure - * the offset is left at the end of whatever incomplete data was written. - */ -static int iio_save_tga_pf(PACKFILE *f, ALLEGRO_BITMAP *bmp) -{ - int x, y; - int w, h; - ALLEGRO_LOCKED_REGION lr; - ASSERT(f); - ASSERT(bmp); - - //*allegro_errno = 0; - - w = al_get_bitmap_width(bmp); - h = al_get_bitmap_height(bmp); - - pack_putc(0, f); /* id length (no id saved) */ - pack_putc(0, f); /* palette type */ - pack_putc(2, f); /* image type */ - pack_iputw(0, f); /* first colour */ - pack_iputw(0, f); /* number of colours */ - pack_putc(0, f); /* palette entry size */ - pack_iputw(0, f); /* left */ - pack_iputw(0, f); /* top */ - pack_iputw(w, f); /* width */ - pack_iputw(h, f); /* height */ - pack_putc(32, f); /* bits per pixel */ - pack_putc(8, f); /* descriptor (bottom to top, 8-bit alpha) */ - - al_lock_bitmap(bmp, &lr, ALLEGRO_LOCK_READONLY); - - for (y=h-1; y>=0; y--) { - for (x=0; x<w; x++) { - ALLEGRO_COLOR c = al_get_pixel(bmp, x, y); - unsigned char r, g, b, a; - al_unmap_rgba(c, &r, &g, &b, &a); - pack_putc(b, f); - pack_putc(g, f); - pack_putc(r, f); - pack_putc(a, f); - } - } - - al_unlock_bitmap(bmp); - - /* - if (*allegro_errno) - return -1; - else - */ - return 0; -} - - -/* load_tga: - * Loads a TGA file, returning a bitmap structure and storing the - * palette data in the specified palette (this should be an array - * of at least 256 RGB structures). - */ -ALLEGRO_BITMAP *iio_load_tga(AL_CONST char *filename) -{ - PACKFILE *f; - ALLEGRO_BITMAP *bmp; - ASSERT(filename); - - f = pack_fopen(filename, F_READ); - if (!f) - return NULL; - - bmp = iio_load_tga_pf(f); - - pack_fclose(f); - - return bmp; -} - - - -/* save_tga: - * Writes a bitmap into a TGA file, using the specified palette (this - * should be an array of at least 256 RGB structures). - */ -int iio_save_tga(AL_CONST char *filename, ALLEGRO_BITMAP *bmp) -{ - PACKFILE *f; - int ret; - ASSERT(filename); - - f = pack_fopen(filename, F_WRITE); - if (!f) - return -1; - - ret = iio_save_tga_pf(f, bmp); - - pack_fclose(f); - - return ret; -} - - +/* ______ ___ ___ + * /\ _ \ /\_ \ /\_ \ + * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ + * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ + * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ + * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ + * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ + * /\____/ + * \_/__/ + * + * TGA reader. + * + * By Tim Gunn. + * + * RLE support added by Michal Mertl and Salvador Eduardo Tropea. + * + * Palette reading improved by Peter Wang. + * + * Big-endian support added by Eric Botcazou. + * + * See readme.txt for copyright information. + */ + + +#include "allegro5/allegro5.h" +#include "allegro5/internal/aintern.h" + + + +/* raw_tga_read8: + * Helper for reading 256-color raw data from TGA files. + */ +static INLINE unsigned char *raw_tga_read8(unsigned char *b, int w, PACKFILE *f) +{ + return b + pack_fread(b, w, f); +} + + + +/* rle_tga_read8: + * Helper for reading 256-color RLE data from TGA files. + */ +static void rle_tga_read8(unsigned char *b, int w, PACKFILE *f) +{ + int value, count, c = 0; + + do { + count = pack_getc(f); + if (count & 0x80) { + /* run-length packet */ + count = (count & 0x7F) + 1; + c += count; + value = pack_getc(f); + while (count--) + *b++ = value; + } + else { + /* raw packet */ + count++; + c += count; + b = raw_tga_read8(b, count, f); + } + } while (c < w); +} + + + +/* single_tga_read32: + * Helper for reading a single 32-bit data from TGA files. + */ +static INLINE int single_tga_read32(PACKFILE *f) +{ + RGB value; + int alpha; + + value.b = pack_getc(f); + value.g = pack_getc(f); + value.r = pack_getc(f); + alpha = pack_getc(f); + + return (alpha << 24) | (value.r << 16) | (value.g << 8) | value.b; +} + + + +/* raw_tga_read32: + * Helper for reading 32-bit raw data from TGA files. + */ +static unsigned int *raw_tga_read32(unsigned int *b, int w, PACKFILE *f) +{ + while (w--) + *b++ = single_tga_read32(f); + + return b; +} + + + +/* rle_tga_read32: + * Helper for reading 32-bit RLE data from TGA files. + */ +static void rle_tga_read32(unsigned int *b, int w, PACKFILE *f) +{ + int color, count, c = 0; + + do { + count = pack_getc(f); + if (count & 0x80) { + /* run-length packet */ + count = (count & 0x7F) + 1; + c += count; + color = single_tga_read32(f); + while (count--) + *b++ = color; + } + else { + /* raw packet */ + count++; + c += count; + b = raw_tga_read32(b, count, f); + } + } while (c < w); +} + + +/* single_tga_read24: + * Helper for reading a single 24-bit data from TGA files. + */ +static INLINE int single_tga_read24(PACKFILE *f) +{ + RGB value; + + value.b = pack_getc(f); + value.g = pack_getc(f); + value.r = pack_getc(f); + + return (value.r << 16) | (value.g << 8) | value.b; +} + + + +/* raw_tga_read24: + * Helper for reading 24-bit raw data from TGA files. + */ +static unsigned char *raw_tga_read24(unsigned char *b, int w, PACKFILE *f) +{ + int color; + + while (w--) { + color = single_tga_read24(f); + WRITE3BYTES(b, color); + b += 3; + } + + return b; +} + + + +/* rle_tga_read24: + * Helper for reading 24-bit RLE data from TGA files. + */ +static void rle_tga_read24(unsigned char *b, int w, PACKFILE *f) +{ + int color, count, c = 0; + + do { + count = pack_getc(f); + if (count & 0x80) { + /* run-length packet */ + count = (count & 0x7F) + 1; + c += count; + color = single_tga_read24(f); + while (count--) { + WRITE3BYTES(b, color); + b += 3; + } + } + else { + /* raw packet */ + count++; + c += count; + b = raw_tga_read24(b, count, f); + } + } while (c < w); +} + + + +/* single_tga_read16: + * Helper for reading a single 16-bit data from TGA files. + */ +static INLINE int single_tga_read16(PACKFILE *f) +{ + int value; + + value = pack_igetw(f); + + return value; + /* + (((value >> 10) & 0x1F) << _rgb_r_shift_15) | + (((value >> 5) & 0x1F) << _rgb_g_shift_15) | + ((value & 0x1F) << _rgb_b_shift_15); + */ +} + + + +/* raw_tga_read16: + * Helper for reading 16-bit raw data from TGA files. + */ +static unsigned short *raw_tga_read16(unsigned short *b, int w, PACKFILE *f) +{ + while (w--) + *b++ = single_tga_read16(f); + + return b; +} + + + +/* rle_tga_read16: + * Helper for reading 16-bit RLE data from TGA files. + */ +static void rle_tga_read16(unsigned short *b, int w, PACKFILE *f) +{ + int color, count, c = 0; + + do { + count = pack_getc(f); + if (count & 0x80) { + /* run-length packet */ + count = (count & 0x7F) + 1; + c += count; + color = single_tga_read16(f); + while (count--) + *b++ = color; + } + else { + /* raw packet */ + count++; + c += count; + b = raw_tga_read16(b, count, f); + } + } while (c < w); +} + + +/* load_tga_pf: + * Like load_tga, but starts loading from the current place in the PACKFILE + * specified. If successful the offset into the file will be left just after + * the image data. If unsuccessful the offset into the file is unspecified, + * i.e. you must either reset the offset to some known place or close the + * packfile. The packfile is not closed by this function. + */ +static ALLEGRO_BITMAP *iio_load_tga_pf(PACKFILE *f) +{ + unsigned char image_id[256], image_palette[256][3]; + unsigned char id_length, palette_type, image_type, palette_entry_size; + unsigned char bpp, descriptor_bits; + short unsigned int first_color, palette_colors; + short unsigned int left, top, image_width, image_height; + unsigned int c, i; + int y; + int compressed; + ALLEGRO_BITMAP *bmp; + ALLEGRO_LOCKED_REGION lr; + unsigned char *buf; + ASSERT(f); + + id_length = pack_getc(f); + palette_type = pack_getc(f); + image_type = pack_getc(f); + first_color = pack_igetw(f); + palette_colors = pack_igetw(f); + palette_entry_size = pack_getc(f); + left = pack_igetw(f); + top = pack_igetw(f); + image_width = pack_igetw(f); + image_height = pack_igetw(f); + bpp = pack_getc(f); + descriptor_bits = pack_getc(f); + + pack_fread(image_id, id_length, f); + + if (palette_type == 1) { + + for (i = 0; i < palette_colors; i++) { + + switch (palette_entry_size) { + + case 16: + c = pack_igetw(f); + image_palette[i][0] = (c & 0x1F) << 3; + image_palette[i][1] = ((c >> 5) & 0x1F) << 3; + image_palette[i][2] = ((c >> 10) & 0x1F) << 3; + break; + + case 24: + case 32: + image_palette[i][0] = pack_getc(f); + image_palette[i][1] = pack_getc(f); + image_palette[i][2] = pack_getc(f); + if (palette_entry_size == 32) + pack_getc(f); + break; + } + } + } + else if (palette_type != 0) { + return NULL; + } + + /* Image type: + * 0 = no image data + * 1 = uncompressed color mapped + * 2 = uncompressed true color + * 3 = grayscale + * 9 = RLE color mapped + * 10 = RLE true color + * 11 = RLE grayscale + */ + compressed = (image_type & 8); + image_type &= 7; + + if ((image_type < 1) || (image_type > 3)) { + return NULL; + } + + switch (image_type) { + + case 1: + /* paletted image */ + if ((palette_type != 1) || (bpp != 8)) { + return NULL; + } + + break; + + case 2: + /* truecolor image */ + if ((palette_type == 0) && ((bpp == 15) || (bpp == 16))) { + bpp = 15; + } + else if ((palette_type == 0) && ((bpp == 24) || (bpp == 32))) { + } + else { + return NULL; + } + break; + + case 3: + /* grayscale image */ + if ((palette_type != 0) || (bpp != 8)) { + return NULL; + } + + break; + + default: + return NULL; + } + + bmp = al_create_bitmap(image_width, image_height); + if (!bmp) { + return NULL; + } + + //*allegro_errno = 0; + + al_lock_bitmap(bmp, &lr, ALLEGRO_LOCK_WRITEONLY); + buf = _AL_MALLOC(image_width*((bpp+1/8))); + _al_push_target_bitmap(); + al_set_target_bitmap(bmp); + + for (y=image_height-1; y>=0; y--) { + switch (image_type) { + + case 1: + case 3: + if (compressed) + rle_tga_read8(buf, image_width, f); + else + raw_tga_read8(buf, image_width, f); + + for (i = 0; i < image_width; i++) { + int pix = buf[i]; + ALLEGRO_COLOR color = al_map_rgb( + image_palette[pix][0], + image_palette[pix][1], + image_palette[pix][2]); + al_put_pixel(i, y, color); + } + + break; + + case 2: + if (bpp == 32) { + if (compressed) + rle_tga_read32((unsigned int *)buf, image_width, f); + else + raw_tga_read32((unsigned int *)buf, image_width, f); + + for (i = 0; i < image_width; i++) { + int b = buf[i*4+0]; + int g = buf[i*4+1]; + int r = buf[i*4+2]; + int a = buf[i*4+3]; + ALLEGRO_COLOR color = al_map_rgba(r, g, b, a); + al_put_pixel(i, y, color); + } + } + else if (bpp == 24) { + if (compressed) + rle_tga_read24(buf, image_width, f); + else + raw_tga_read24(buf, image_width, f); + for (i = 0; i < image_width; i++) { + int b = buf[i*3+0]; + int g = buf[i*3+1]; + int r = buf[i*3+2]; + ALLEGRO_COLOR color = al_map_rgb(r, g, b); + al_put_pixel(i, y, color); + } + } + else { + if (compressed) + rle_tga_read16((unsigned short *)buf, image_width, f); + else + raw_tga_read16((unsigned short *)buf, image_width, f); + for (i = 0; i < image_width; i++) { + int pix = *((unsigned short *)(buf+i*2)); + int r = _rgb_scale_5[(pix >> 10)]; + int g = _rgb_scale_5[(pix >> 5) & 0x1F]; + int b = _rgb_scale_5[(pix & 0x1F)]; + ALLEGRO_COLOR color = al_map_rgb(r, g, b); + al_put_pixel(i, y, color); + } + } + break; + } + } + + _AL_FREE(buf); + al_unlock_bitmap(bmp); + _al_pop_target_bitmap(); + + /* + if (*allegro_errno) { + destroy_bitmap(bmp); + return NULL; + }*/ + + return bmp; +} + + + +/* save_tga_pf: + * Like save_tga but writes into the PACKFILE given instead of a new file. + * The packfile is not closed after writing is completed. On success the + * offset into the file is left after the TGA file just written. On failure + * the offset is left at the end of whatever incomplete data was written. + */ +static int iio_save_tga_pf(PACKFILE *f, ALLEGRO_BITMAP *bmp) +{ + int x, y; + int w, h; + ALLEGRO_LOCKED_REGION lr; + ASSERT(f); + ASSERT(bmp); + + //*allegro_errno = 0; + + w = al_get_bitmap_width(bmp); + h = al_get_bitmap_height(bmp); + + pack_putc(0, f); /* id length (no id saved) */ + pack_putc(0, f); /* palette type */ + pack_putc(2, f); /* image type */ + pack_iputw(0, f); /* first colour */ + pack_iputw(0, f); /* number of colours */ + pack_putc(0, f); /* palette entry size */ + pack_iputw(0, f); /* left */ + pack_iputw(0, f); /* top */ + pack_iputw(w, f); /* width */ + pack_iputw(h, f); /* height */ + pack_putc(32, f); /* bits per pixel */ + pack_putc(8, f); /* descriptor (bottom to top, 8-bit alpha) */ + + al_lock_bitmap(bmp, &lr, ALLEGRO_LOCK_READONLY); + + for (y=h-1; y>=0; y--) { + for (x=0; x<w; x++) { + ALLEGRO_COLOR c = al_get_pixel(bmp, x, y); + unsigned char r, g, b, a; + al_unmap_rgba(c, &r, &g, &b, &a); + pack_putc(b, f); + pack_putc(g, f); + pack_putc(r, f); + pack_putc(a, f); + } + } + + al_unlock_bitmap(bmp); + + /* + if (*allegro_errno) + return -1; + else + */ + return 0; +} + + +/* load_tga: + * Loads a TGA file, returning a bitmap structure and storing the + * palette data in the specified palette (this should be an array + * of at least 256 RGB structures). + */ +ALLEGRO_BITMAP *iio_load_tga(AL_CONST char *filename) +{ + PACKFILE *f; + ALLEGRO_BITMAP *bmp; + ASSERT(filename); + + f = pack_fopen(filename, F_READ); + if (!f) + return NULL; + + bmp = iio_load_tga_pf(f); + + pack_fclose(f); + + return bmp; +} + + + +/* save_tga: + * Writes a bitmap into a TGA file, using the specified palette (this + * should be an array of at least 256 RGB structures). + */ +int iio_save_tga(AL_CONST char *filename, ALLEGRO_BITMAP *bmp) +{ + PACKFILE *f; + int ret; + ASSERT(filename); + + f = pack_fopen(filename, F_WRITE); + if (!f) + return -1; + + ret = iio_save_tga_pf(f, bmp); + + pack_fclose(f); + + return ret; +} + + Property changes on: allegro/branches/4.9/addons/iio/tga.c ___________________________________________________________________ Added: svn:eol-style + native Modified: allegro/branches/4.9/include/allegro5/color.h =================================================================== --- allegro/branches/4.9/include/allegro5/color.h 2008-08-21 08:28:39 UTC (rev 10447) +++ allegro/branches/4.9/include/allegro5/color.h 2008-08-21 11:53:37 UTC (rev 10448) @@ -1,84 +1,84 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Color manipulation routines. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_COLOR_H -#define ALLEGRO_COLOR_H - -#include "allegro5/base.h" -#include "allegro5/palette.h" - -#ifdef __cplusplus - extern "C" { -#endif - -AL_VAR(int, _rgb_r_shift_15); -AL_VAR(int, _rgb_g_shift_15); -AL_VAR(int, _rgb_b_shift_15); -AL_VAR(int, _rgb_r_shift_16); -AL_VAR(int, _rgb_g_shift_16); -AL_VAR(int, _rgb_b_shift_16); -AL_VAR(int, _rgb_r_shift_24); -AL_VAR(int, _rgb_g_shift_24); -AL_VAR(int, _rgb_b_shift_24); -AL_VAR(int, _rgb_r_shift_32); -AL_VAR(int, _rgb_g_shift_32); -AL_VAR(int, _rgb_b_shift_32); -AL_VAR(int, _rgb_a_shift_32); - -AL_ARRAY(int, _rgb_scale_1); -AL_ARRAY(int, _rgb_scale_4); -AL_ARRAY(int, _rgb_scale_5); -AL_ARRAY(int, _rgb_scale_6); - -/* -#define MASK_COLOR_8 0 -#define MASK_COLOR_15 0x7C1F -#define MASK_COLOR_16 0xF81F -#define MASK_COLOR_24 0xFF00FF -#define MASK_COLOR_32 0xFF00FF -*/ - -AL_FUNC(int, makecol, (int r, int g, int b)); -AL_FUNC(int, makecol8, (int r, int g, int b)); -AL_FUNC(int, makecol_depth, (int color_depth, int r, int g, int b)); - -AL_FUNC(int, makeacol, (int r, int g, int b, int a)); -AL_FUNC(int, makeacol_depth, (int color_depth, int r, int g, int b, int a)); - -AL_FUNC(int, makecol15_dither, (int r, int g, int b, int x, int y)); -AL_FUNC(int, makecol16_dither, (int r, int g, int b, int x, int y)); - -AL_FUNC(int, getr, (int c)); -AL_FUNC(int, getg, (int c)); -AL_FUNC(int, getb, (int c)); -AL_FUNC(int, geta, (int c)); - -AL_FUNC(int, getr_depth, (int color_depth, int c)); -AL_FUNC(int, getg_depth, (int color_depth, int c)); -AL_FUNC(int, getb_depth, (int color_depth, int c)); -AL_FUNC(int, geta_depth, (int color_depth, int c)); - -#ifdef __cplusplus - } -#endif - -#include "allegro5/inline/color.inl" - -#endif /* ifndef ALLEGRO_COLOR_H */ - - +/* ______ ___ ___ + * /\ _ \ /\_ \ /\_ \ + * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ + * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ + * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ + * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ + * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ + * /\____/ + * \_/__/ + * + * Color manipulation routines. + * + * By Shawn Hargreaves. + * + * See readme.txt for copyright information. + */ + + +#ifndef ALLEGRO_COLOR_H +#define ALLEGRO_COLOR_H + +#include "allegro5/base.h" +#include "allegro5/palette.h" + +#ifdef __cplusplus + extern "C" { +#endif + +AL_VAR(int, _rgb_r_shift_15); +AL_VAR(int, _rgb_g_shift_15); +AL_VAR(int, _rgb_b_shift_15); +AL_VAR(int, _rgb_r_shift_16); +AL_VAR(int, _rgb_g_shift_16); +AL_VAR(int, _rgb_b_shift_16); +AL_VAR(int, _rgb_r_shift_24); +AL_VAR(int, _rgb_g_shift_24); +AL_VAR(int, _rgb_b_shift_24); +AL_VAR(int, _rgb_r_shift_32); +AL_VAR(int, _rgb_g_shift_32); +AL_VAR(int, _rgb_b_shift_32); +AL_VAR(int, _rgb_a_shift_32); + +AL_ARRAY(int, _rgb_scale_1); +AL_ARRAY(int, _rgb_scale_4); +AL_ARRAY(int, _rgb_scale_5); +AL_ARRAY(int, _rgb_scale_6); + +/* +#define MASK_COLOR_8 0 +#define MASK_COLOR_15 0x7C1F +#define MASK_COLOR_16 0xF81F +#define MASK_COLOR_24 0xFF00FF +#define MASK_COLOR_32 0xFF00FF +*/ + +AL_FUNC(int, makecol, (int r, int g, int b)); +AL_FUNC(int, makecol8, (int r, int g, int b)); +AL_FUNC(int, makecol_depth, (int color_depth, int r, int g, int b)); + +AL_FUNC(int, makeacol, (int r, int g, int b, int a)); +AL_FUNC(int, makeacol_depth, (int color_depth, int r, int g, int b, int a)); + +AL_FUNC(int, makecol15_dither, (int r, int g, int b, int x, int y)); +AL_FUNC(int, makecol16_dither, (int r, int g, int b, int x, int y)); + +AL_FUNC(int, getr, (int c)); +AL_FUNC(int, getg, (int c)); +AL_FUNC(int, getb, (int c)); +AL_FUNC(int, geta, (int c)); + +AL_FUNC(int, getr_depth, (int color_depth, int c)); +AL_FUNC(int, getg_depth, (int color_depth, int c)); +AL_FUNC(int, getb_depth, (int color_depth, int c)); +AL_FUNC(int, geta_depth, (int color_depth, int c)); + +#ifdef __cplusplus + } +#endif + +#include "allegro5/inline/color.inl" + +#endif /* ifndef ALLEGRO_COLOR_H */ + + Property changes on: allegro/branches/4.9/include/allegro5/color.h ___________________________________________________________________ Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2008-08-21 12:32:00
|
Revision: 10449 http://alleg.svn.sourceforge.net/alleg/?rev=10449&view=rev Author: elias Date: 2008-08-21 12:32:09 +0000 (Thu, 21 Aug 2008) Log Message: ----------- - Fixed clipping bug in al_put_pixel - Fixed clipping bug with OpenGL bitmaps - Made pixels used in exnew_drawpixels brighter, single moving pixels are really hard to see on my monitor even then Modified Paths: -------------- allegro/branches/4.9/examples/exnew_drawpixels.c allegro/branches/4.9/src/display_new.c allegro/branches/4.9/src/opengl/ogl_bitmap.c allegro/branches/4.9/src/pixels.c Modified: allegro/branches/4.9/examples/exnew_drawpixels.c =================================================================== --- allegro/branches/4.9/examples/exnew_drawpixels.c 2008-08-21 11:53:37 UTC (rev 10448) +++ allegro/branches/4.9/examples/exnew_drawpixels.c 2008-08-21 12:32:09 UTC (rev 10449) @@ -33,9 +33,9 @@ display = al_create_display(640, 480); - colors[0] = al_map_rgba(200, 0, 255, 128); - colors[1] = al_map_rgba(100, 0, 255, 255); - colors[2] = al_map_rgba(0, 0, 200, 255); + colors[0] = al_map_rgba(255, 100, 255, 128); + colors[1] = al_map_rgba(255, 100, 100, 255); + colors[2] = al_map_rgba(100, 100, 255, 255); for (layer = 0; layer < 3; layer++) { for (star = 0; star < NUM_STARS/3; star++) { @@ -65,6 +65,7 @@ al_draw_pixel(p->x, p->y, colors[0]); } al_lock_bitmap(al_get_backbuffer(), &lr, 0); + for (layer = 1; layer < 3; layer++) { for (star = 0; star < NUM_STARS/3; star++) { Point *p = &stars[layer][star]; @@ -73,10 +74,13 @@ } } - /* Check that dots appear at the window extremes. */ - al_put_pixel(0, 0, al_map_rgb_f(1, 1, 0)); - al_put_pixel(al_get_display_width()-1, al_get_display_height()-1, - al_map_rgb_f(0, 1, 1)); + /* Check that dots appear at the window extremes. */ + int X = al_get_display_width() - 1; + int Y = al_get_display_height() - 1; + al_put_pixel(0, 0, al_map_rgb_f(1, 1, 1)); + al_put_pixel(X, 0, al_map_rgb_f(1, 1, 1)); + al_put_pixel(0, Y, al_map_rgb_f(1, 1, 1)); + al_put_pixel(X, Y, al_map_rgb_f(1, 1, 1)); al_unlock_bitmap(al_get_backbuffer()); al_flip_display(); Modified: allegro/branches/4.9/src/display_new.c =================================================================== --- allegro/branches/4.9/src/display_new.c 2008-08-21 11:53:37 UTC (rev 10448) +++ allegro/branches/4.9/src/display_new.c 2008-08-21 12:32:09 UTC (rev 10449) @@ -56,8 +56,6 @@ // variables like "display/driver" and according to flags (e.g. OpenGL // requested or not). - // Right now, the X11 driver is hardcoded. - ALLEGRO_SYSTEM *system = al_system_driver(); ALLEGRO_DISPLAY_INTERFACE *driver = system->vt->get_display_driver(); ALLEGRO_DISPLAY *display = driver->create_display(w, h); Modified: allegro/branches/4.9/src/opengl/ogl_bitmap.c =================================================================== --- allegro/branches/4.9/src/opengl/ogl_bitmap.c 2008-08-21 11:53:37 UTC (rev 10448) +++ allegro/branches/4.9/src/opengl/ogl_bitmap.c 2008-08-21 12:32:09 UTC (rev 10449) @@ -533,8 +533,8 @@ bitmap->bitmap.flags = flags; bitmap->bitmap.cl = 0; bitmap->bitmap.ct = 0; - bitmap->bitmap.cr = w - 1; - bitmap->bitmap.cb = h - 1; + bitmap->bitmap.cr = w; + bitmap->bitmap.cb = h; bitmap->true_w = true_w; bitmap->true_h = true_h; Modified: allegro/branches/4.9/src/pixels.c =================================================================== --- allegro/branches/4.9/src/pixels.c 2008-08-21 11:53:37 UTC (rev 10448) +++ allegro/branches/4.9/src/pixels.c 2008-08-21 12:32:09 UTC (rev 10449) @@ -839,14 +839,14 @@ } _al_put_pixel( - (void*)(((intptr_t)bitmap->locked_region.data) + (char *)bitmap->locked_region.data + y * bitmap->locked_region.pitch - + x * al_get_pixel_size(bitmap->format)), + + x * al_get_pixel_size(bitmap->format), bitmap->format, color_value); } else { if (x < bitmap->cl || y < bitmap->ct || - x > bitmap->cr || y > bitmap->cb) + x >= bitmap->cr || y >= bitmap->cb) { return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2008-08-21 12:43:12
|
Revision: 10450 http://alleg.svn.sourceforge.net/alleg/?rev=10450&view=rev Author: tjaden Date: 2008-08-21 12:43:21 +0000 (Thu, 21 Aug 2008) Log Message: ----------- Remove _al_current_display and replace with calls to al_get_current_display(). Also some minor formatting changes. Modified Paths: -------------- allegro/branches/4.9/include/allegro5/display_new.h allegro/branches/4.9/include/allegro5/internal/aintern_display.h allegro/branches/4.9/src/bitmap_new.c allegro/branches/4.9/src/display_new.c allegro/branches/4.9/src/mousenu.c allegro/branches/4.9/src/tls.c Modified: allegro/branches/4.9/include/allegro5/display_new.h =================================================================== --- allegro/branches/4.9/include/allegro5/display_new.h 2008-08-21 12:32:09 UTC (rev 10449) +++ allegro/branches/4.9/include/allegro5/display_new.h 2008-08-21 12:43:21 UTC (rev 10450) @@ -13,8 +13,6 @@ /* Possible bit combinations for the flags parameter of al_create_display. */ -#define _al_current_display al_get_current_display() - #define ALLEGRO_WINDOWED 1 #define ALLEGRO_FULLSCREEN 2 #define ALLEGRO_OPENGL 4 Modified: allegro/branches/4.9/include/allegro5/internal/aintern_display.h =================================================================== --- allegro/branches/4.9/include/allegro5/internal/aintern_display.h 2008-08-21 12:32:09 UTC (rev 10449) +++ allegro/branches/4.9/include/allegro5/internal/aintern_display.h 2008-08-21 12:43:21 UTC (rev 10450) @@ -73,8 +73,6 @@ _AL_VECTOR bitmaps; /* A list of bitmaps created for this display. */ }; -#define _al_current_display al_get_current_display() - //ALLEGRO_DISPLAY_INTERFACE *_al_display_d3ddummy_driver(void); void _al_clear_memory(ALLEGRO_COLOR *color); Modified: allegro/branches/4.9/src/bitmap_new.c =================================================================== --- allegro/branches/4.9/src/bitmap_new.c 2008-08-21 12:32:09 UTC (rev 10449) +++ allegro/branches/4.9/src/bitmap_new.c 2008-08-21 12:43:21 UTC (rev 10450) @@ -164,7 +164,7 @@ /* We keep a list of bitmaps depending on the current display so that we can * convert them to memory bimaps when the display is destroyed. */ - back = _al_vector_alloc_back(&_al_current_display->bitmaps); + back = _al_vector_alloc_back(¤t_display->bitmaps); *back = bitmap; return bitmap; @@ -303,7 +303,7 @@ void al_draw_bitmap(ALLEGRO_BITMAP *bitmap, float dx, float dy, int flags) { ALLEGRO_BITMAP *dest = al_get_target_bitmap(); - ALLEGRO_DISPLAY* display = _al_current_display; + ALLEGRO_DISPLAY *display = al_get_current_display(); /* If destination is memory, do a memory bitmap */ if (dest->flags & ALLEGRO_MEMORY_BITMAP) { Modified: allegro/branches/4.9/src/display_new.c =================================================================== --- allegro/branches/4.9/src/display_new.c 2008-08-21 12:32:09 UTC (rev 10449) +++ allegro/branches/4.9/src/display_new.c 2008-08-21 12:43:21 UTC (rev 10450) @@ -84,7 +84,9 @@ */ void al_destroy_display(ALLEGRO_DISPLAY *display) { - display->vt->destroy_display(display); + if (display) { + display->vt->destroy_display(display); + } } @@ -96,9 +98,10 @@ */ ALLEGRO_BITMAP *al_get_backbuffer(void) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - return _al_current_display->vt->get_backbuffer(_al_current_display); + return display->vt->get_backbuffer(display); } @@ -111,9 +114,10 @@ */ ALLEGRO_BITMAP *al_get_frontbuffer(void) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - return _al_current_display->vt->get_frontbuffer(_al_current_display); + return display->vt->get_frontbuffer(display); } @@ -128,9 +132,10 @@ */ void al_flip_display(void) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - _al_current_display->vt->flip_display(_al_current_display); + display->vt->flip_display(display); } @@ -145,10 +150,10 @@ */ bool al_update_display_region(int x, int y, int width, int height) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - return _al_current_display->vt->update_display_region( - _al_current_display, x, y, width, height); + return display->vt->update_display_region(display, x, y, width, height); } @@ -167,8 +172,9 @@ ASSERT(display); if (!(display->flags & ALLEGRO_FULLSCREEN)) { - if (display->vt->acknowledge_resize) + if (display->vt->acknowledge_resize) { return display->vt->acknowledge_resize(display); + } } return false; } @@ -185,11 +191,11 @@ */ bool al_resize_display(int width, int height) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - if (_al_current_display->vt->resize_display) { - return _al_current_display->vt->resize_display(_al_current_display, - width, height); + if (display->vt->resize_display) { + return display->vt->resize_display(display, width, height); } return false; } @@ -202,16 +208,17 @@ */ void al_clear(ALLEGRO_COLOR color) { + ALLEGRO_DISPLAY *display = al_get_current_display(); ALLEGRO_BITMAP *target = al_get_target_bitmap(); ASSERT(target); - ASSERT(_al_current_display); + ASSERT(display); if (target->flags & ALLEGRO_MEMORY_BITMAP) { _al_clear_memory(&color); } else { - _al_current_display->vt->clear(_al_current_display, &color); + display->vt->clear(display, &color); } } @@ -230,17 +237,17 @@ void al_draw_line(float fx, float fy, float tx, float ty, ALLEGRO_COLOR color) { + ALLEGRO_DISPLAY *display = al_get_current_display(); ALLEGRO_BITMAP *target = al_get_target_bitmap(); ASSERT(target); - ASSERT(_al_current_display); + ASSERT(display); if (target->flags & ALLEGRO_MEMORY_BITMAP) { _al_draw_line_memory(fx, fy, tx, ty, &color); } else { - _al_current_display->vt->draw_line(_al_current_display, - fx, fy, tx, ty, &color); + display->vt->draw_line(display, fx, fy, tx, ty, &color); } } @@ -265,17 +272,17 @@ void al_draw_rectangle(float tlx, float tly, float brx, float bry, ALLEGRO_COLOR color, int flags) { + ALLEGRO_DISPLAY *display = al_get_current_display(); ALLEGRO_BITMAP *target = al_get_target_bitmap(); ASSERT(target); - ASSERT(_al_current_display); + ASSERT(display); if (target->flags & ALLEGRO_MEMORY_BITMAP) { _al_draw_rectangle_memory(tlx, tly, brx, bry, &color, flags); } else { - _al_current_display->vt->draw_rectangle(_al_current_display, - tlx, tly, brx, bry, &color, flags); + display->vt->draw_rectangle(display, tlx, tly, brx, bry, &color, flags); } } @@ -291,18 +298,17 @@ */ void al_draw_pixel(float x, float y, ALLEGRO_COLOR color) { + ALLEGRO_DISPLAY *display = al_get_current_display(); ALLEGRO_BITMAP *target = al_get_target_bitmap(); ASSERT(target); - ASSERT(_al_current_display); + ASSERT(display); - if (target->flags & ALLEGRO_MEMORY_BITMAP - || !_al_current_display->vt->draw_pixel) { + if (target->flags & ALLEGRO_MEMORY_BITMAP || !display->vt->draw_pixel) { _al_draw_pixel_memory(x, y, &color); } else { - _al_current_display->vt->draw_pixel(_al_current_display, - x, y, &color); + display->vt->draw_pixel(display, x, y, &color); } } @@ -324,11 +330,11 @@ */ bool al_is_compatible_bitmap(ALLEGRO_BITMAP *bitmap) { + ALLEGRO_DISPLAY *display = al_get_current_display(); ASSERT(bitmap); - ASSERT(_al_current_display); + ASSERT(display); - return _al_current_display->vt->is_compatible_bitmap( - _al_current_display, bitmap); + return display->vt->is_compatible_bitmap(display, bitmap); } @@ -339,7 +345,10 @@ */ int al_get_display_width(void) { - return _al_current_display->w; + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); + + return display->w; } @@ -350,9 +359,10 @@ */ int al_get_display_height(void) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - return _al_current_display->h; + return display->h; } @@ -363,9 +373,10 @@ */ int al_get_display_format(void) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - return _al_current_display->format; + return display->format; } @@ -376,9 +387,10 @@ */ int al_get_display_refresh_rate(void) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - return _al_current_display->refresh_rate; + return display->refresh_rate; } @@ -389,9 +401,10 @@ */ int al_get_display_flags(void) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - return _al_current_display->flags; + return display->flags; } @@ -440,10 +453,11 @@ */ bool al_wait_for_vsync(void) { - ASSERT(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); - if (_al_current_display->vt && _al_current_display->vt->wait_for_vsync) - return _al_current_display->vt->wait_for_vsync(_al_current_display); + if (display->vt->wait_for_vsync) + return display->vt->wait_for_vsync(display); else return false; } @@ -521,14 +535,18 @@ */ void al_set_display_icon(ALLEGRO_BITMAP *icon) { - _al_current_display->vt->set_icon(_al_current_display, icon); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); + + display->vt->set_icon(display, icon); } /* Destroys all bitmaps created for this display. */ -void _al_destroy_display_bitmaps(ALLEGRO_DISPLAY *d) { +void _al_destroy_display_bitmaps(ALLEGRO_DISPLAY *d) +{ while (_al_vector_size(&d->bitmaps) > 0) { ALLEGRO_BITMAP **bptr = _al_vector_ref_back(&d->bitmaps); ALLEGRO_BITMAP *b = *bptr; @@ -546,13 +564,13 @@ */ int al_get_num_video_adapters(void) { - ALLEGRO_SYSTEM *system = al_system_driver(); + ALLEGRO_SYSTEM *system = al_system_driver(); - if (system && system->vt && system->vt->get_num_video_adapters) { - return system->vt->get_num_video_adapters(); - } + if (system && system->vt && system->vt->get_num_video_adapters) { + return system->vt->get_num_video_adapters(); + } - return 0; + return 0; } /* Function: al_get_monitor_info @@ -564,16 +582,16 @@ */ void al_get_monitor_info(int adapter, ALLEGRO_MONITOR_INFO *info) { - ALLEGRO_SYSTEM *system = al_system_driver(); + ALLEGRO_SYSTEM *system = al_system_driver(); - ASSERT(adapter < al_get_num_video_adapters()); + ASSERT(adapter < al_get_num_video_adapters()); - if (system && system->vt && system->vt->get_monitor_info) { - system->vt->get_monitor_info(adapter, info); - } - else { - info->x1 = info->y1 = info->x2 = info->y2 = INT_MAX; - } + if (system && system->vt && system->vt->get_monitor_info) { + system->vt->get_monitor_info(adapter, info); + } + else { + info->x1 = info->y1 = info->x2 = info->y2 = INT_MAX; + } } @@ -611,8 +629,8 @@ */ void al_set_new_window_position(int x, int y) { - new_window_x = x; - new_window_y = y; + new_window_x = x; + new_window_y = y; } /* Function: al_get_new_window_position @@ -624,10 +642,10 @@ */ void al_get_new_window_position(int *x, int *y) { - if (x) - *x = new_window_x; - if (y) - *y = new_window_y; + if (x) + *x = new_window_x; + if (y) + *y = new_window_y; } /* Function: al_set_window_position @@ -638,13 +656,15 @@ */ void al_set_window_position(ALLEGRO_DISPLAY *display, int x, int y) { - if (display->flags & ALLEGRO_FULLSCREEN) { - return; - } + ASSERT(display); - if (display && display->vt && display->vt->set_window_position) { - display->vt->set_window_position(display, x, y); - } + if (display->flags & ALLEGRO_FULLSCREEN) { + return; + } + + if (display && display->vt && display->vt->set_window_position) { + display->vt->set_window_position(display, x, y); + } } /* Function: al_get_window_position @@ -655,6 +675,10 @@ */ void al_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y) { + ASSERT(display); + ASSERT(x); + ASSERT(y); + if (display && display->vt && display->vt->get_window_position) { display->vt->get_window_position(display, x, y); } @@ -665,13 +689,15 @@ void al_toggle_window_frame(ALLEGRO_DISPLAY *display, bool onoff) { - if (display->flags & ALLEGRO_FULLSCREEN) { - return; - } + ASSERT(display); - if (display && display->vt && display->vt->toggle_frame) { - display->vt->toggle_frame(display, onoff); - } + if (display->flags & ALLEGRO_FULLSCREEN) { + return; + } + + if (display && display->vt && display->vt->toggle_frame) { + display->vt->toggle_frame(display, onoff); + } } /* Modified: allegro/branches/4.9/src/mousenu.c =================================================================== --- allegro/branches/4.9/src/mousenu.c 2008-08-21 12:32:09 UTC (rev 10449) +++ allegro/branches/4.9/src/mousenu.c 2008-08-21 12:43:21 UTC (rev 10450) @@ -452,7 +452,10 @@ */ bool al_hide_mouse_cursor(void) { - return _al_current_display->vt->hide_cursor(_al_current_display); + ALLEGRO_DISPLAY *display = al_get_current_display(); + ASSERT(display); + + return display->vt->hide_cursor(display); } Modified: allegro/branches/4.9/src/tls.c =================================================================== --- allegro/branches/4.9/src/tls.c 2008-08-21 12:32:09 UTC (rev 10449) +++ allegro/branches/4.9/src/tls.c 2008-08-21 12:43:21 UTC (rev 10450) @@ -387,12 +387,13 @@ */ void al_set_target_bitmap(ALLEGRO_BITMAP *bitmap) { - ALLEGRO_DISPLAY *display = _al_current_display; if ((tls = tls_get()) == NULL) return; + tls->target_bitmap = bitmap; if (bitmap != NULL) { if (!(bitmap->flags & ALLEGRO_MEMORY_BITMAP)) { + ALLEGRO_DISPLAY *display = tls->current_display; ASSERT(display); display->vt->set_target_bitmap(display, bitmap); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2008-08-21 14:45:22
|
Revision: 10451 http://alleg.svn.sourceforge.net/alleg/?rev=10451&view=rev Author: tjaden Date: 2008-08-21 14:45:30 +0000 (Thu, 21 Aug 2008) Log Message: ----------- Move mouse cursor methods into ALLEGRO_DISPLAY_INTERFACE. Previously they were in the old GFX_DRIVER and subsequently commented out. This currently only works for the X11 port. I partially updated the Windows port (D3D driver only). It compiles but didn't work under Wine. The WGL driver and Mac ports will be broken, sorry. Add an example program. Modified Paths: -------------- allegro/branches/4.9/cmake/FileList.cmake allegro/branches/4.9/examples/CMakeLists.txt allegro/branches/4.9/include/allegro5/internal/aintern_display.h allegro/branches/4.9/include/allegro5/mouse.h allegro/branches/4.9/src/display_new.c allegro/branches/4.9/src/mousenu.c allegro/branches/4.9/src/win/d3d.h allegro/branches/4.9/src/win/d3d_disp.cpp allegro/branches/4.9/src/win/wddraw.c allegro/branches/4.9/src/win/wddraw.h allegro/branches/4.9/src/win/wddwin.c allegro/branches/4.9/src/win/wgl_disp.c allegro/branches/4.9/src/win/win_new.h allegro/branches/4.9/src/win/wmouse.c allegro/branches/4.9/src/win/wnewwin.c allegro/branches/4.9/src/x/xmousenu.c allegro/branches/4.9/src/xglx/xdisplay.c allegro/branches/4.9/src/xglx/xglx.h Added Paths: ----------- allegro/branches/4.9/examples/exnew_mouse_cursor.c allegro/branches/4.9/src/win/wmcursor.c Modified: allegro/branches/4.9/cmake/FileList.cmake =================================================================== --- allegro/branches/4.9/cmake/FileList.cmake 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/cmake/FileList.cmake 2008-08-21 14:45:30 UTC (rev 10451) @@ -97,13 +97,14 @@ src/win/wjoydrv.c src/win/wjoydxnu.c src/win/wkeybdnu.c + src/win/wmcursor.c src/win/wmouse.c + src/win/wnewsys.c + src/win/wnewwin.c src/win/wthread.c src/win/wtime.c + src/win/wwnd.c src/win/wxthread.c - src/win/wnewsys.c - src/win/wnewwin.c - src/win/wwnd.c ) set(ALLEGRO_SRC_D3D_FILES Modified: allegro/branches/4.9/examples/CMakeLists.txt =================================================================== --- allegro/branches/4.9/examples/CMakeLists.txt 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/examples/CMakeLists.txt 2008-08-21 14:45:30 UTC (rev 10451) @@ -17,6 +17,7 @@ example(exnew_icon ${IIO_LINK_WITH}) example(exnew_lockbitmap ${IIO_LINK_WITH}) example(exnew_mouse ${IIO_LINK_WITH}) + example(exnew_mouse_cursor ${IIO_LINK_WITH}) example(exnew_mouse_events ${IIO_LINK_WITH}) example(exnew_multiwin ${IIO_LINK_WITH}) example(exnew_scale ${IIO_LINK_WITH}) Added: allegro/branches/4.9/examples/exnew_mouse_cursor.c =================================================================== --- allegro/branches/4.9/examples/exnew_mouse_cursor.c (rev 0) +++ allegro/branches/4.9/examples/exnew_mouse_cursor.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -0,0 +1,153 @@ +/* + * Example program for the Allegro library, by Peter Wang. + * + * Press '1', '2', '3', '4' or 'c' to select a mouse cursor. + * Press 's' or 'h' to show or hide the cursor. + */ + + +#include <allegro5/allegro5.h> +#include "allegro5/a5_iio.h" + + +static void hide_cursor(void) +{ + if (!al_hide_mouse_cursor()) { + TRACE("Error hiding mouse cursor\n"); + } +} + +static void show_cursor(void) +{ + if (!al_show_mouse_cursor()) { + TRACE("Error showing mouse cursor\n"); + } +} + +static void test_set_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) +{ + if (!al_set_system_mouse_cursor(cursor_id)) { + TRACE("Error setting system mouse cursor\n"); + } +} + +int main(void) +{ + ALLEGRO_DISPLAY *display; + ALLEGRO_BITMAP *bmp; + ALLEGRO_BITMAP *shrunk_bmp; + ALLEGRO_MOUSE_CURSOR *cursor; + ALLEGRO_EVENT_QUEUE *queue; + ALLEGRO_EVENT event; + + al_init(); + iio_init(); + + display = al_create_display(400, 300); + if (!display) { + TRACE("Error creating display\n"); + return 1; + } + + /* XXX work around blitting problem */ + /* this problem no longer appears in X, but did in Wine */ + /*al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);*/ + bmp = iio_load("allegro.pcx"); + if (!bmp) { + TRACE("Error loading mysha.pcx\n"); + return 1; + } + + shrunk_bmp = al_create_bitmap(32, 32); + if (!shrunk_bmp) { + TRACE("Error creating shrunk_bmp\n"); + return 1; + } + + al_set_target_bitmap(shrunk_bmp); + al_draw_scaled_bitmap(bmp, + 0, 0, al_get_bitmap_width(bmp), al_get_bitmap_height(bmp), + 0, 0, 128, 128, + 0); + + cursor = al_create_mouse_cursor(shrunk_bmp, 0, 0); + if (!cursor) { + TRACE("Error creating mouse cursor\n"); + return 1; + } + + al_destroy_bitmap(shrunk_bmp); + al_destroy_bitmap(bmp); + shrunk_bmp = NULL; + bmp = NULL; + + if (!al_install_mouse()) { + TRACE("Error installing mouse\n"); + return 1; + } + + if (!al_install_keyboard()) { + TRACE("Error installing keyboard\n"); + return 1; + } + + queue = al_create_event_queue(); + if (!queue) { + TRACE("Error creating event queue\n"); + return 1; + } + + al_register_event_source(queue, (ALLEGRO_EVENT_SOURCE *)al_get_keyboard()); + al_register_event_source(queue, (ALLEGRO_EVENT_SOURCE *)al_get_mouse()); + + /* XXX some instructions on this blank screen would be nice */ + + while (1) { + al_wait_for_event(queue, &event); + if (event.type == ALLEGRO_EVENT_KEY_DOWN) { + switch (event.keyboard.unichar) { + case 27: /* escape */ + goto Quit; + case 'h': + hide_cursor(); + break; + case 's': + show_cursor(); + break; + /* Is this part of the API? + case '0': + test_set_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR_NONE); + break; + */ + case '1': + test_set_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); + break; + case '2': + test_set_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR_BUSY); + break; + case '3': + test_set_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR_QUESTION); + break; + case '4': + test_set_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR_EDIT); + break; + case 'c': + if (!al_set_mouse_cursor(cursor)) { + TRACE("Error setting custom mouse cursor\n"); + } + break; + default: + break; + } + } + } + +Quit: + + al_destroy_mouse_cursor(cursor); + + return 0; +} +END_OF_MAIN() + +/* vi: set sts=3 sw=3 et: */ Modified: allegro/branches/4.9/include/allegro5/internal/aintern_display.h =================================================================== --- allegro/branches/4.9/include/allegro5/internal/aintern_display.h 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/include/allegro5/internal/aintern_display.h 2008-08-21 14:45:30 UTC (rev 10451) @@ -49,9 +49,16 @@ bool (*wait_for_vsync)(ALLEGRO_DISPLAY *display); - bool (*show_cursor)(ALLEGRO_DISPLAY *display); - bool (*hide_cursor)(ALLEGRO_DISPLAY *display); - bool (*set_system_cursor)(ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id); + ALLEGRO_MOUSE_CURSOR *(*create_mouse_cursor)(ALLEGRO_DISPLAY *display, + ALLEGRO_BITMAP *bmp, int x_focus, int y_focus); + void (*destroy_mouse_cursor)(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor); + bool (*set_mouse_cursor)(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor); + bool (*set_system_mouse_cursor)(ALLEGRO_DISPLAY *display, + ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id); + bool (*show_mouse_cursor)(ALLEGRO_DISPLAY *display); + bool (*hide_mouse_cursor)(ALLEGRO_DISPLAY *display); void (*set_icon)(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *bitmap); Modified: allegro/branches/4.9/include/allegro5/mouse.h =================================================================== --- allegro/branches/4.9/include/allegro5/mouse.h 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/include/allegro5/mouse.h 2008-08-21 14:45:30 UTC (rev 10451) @@ -95,8 +95,7 @@ * for later (it would need significant cooperation from the display * API). */ -//AL_FUNC(ALLEGRO_MOUSE_CURSOR *, al_create_mouse_cursor_old, (struct BITMAP *sprite, int xfocus, int yfocus)); -//AL_FUNC(ALLEGRO_MOUSE_CURSOR *, al_create_mouse_cursor, (struct ALLEGRO_BITMAP *sprite, int xfocus, int yfocus)); +AL_FUNC(ALLEGRO_MOUSE_CURSOR *, al_create_mouse_cursor, (struct ALLEGRO_BITMAP *sprite, int xfocus, int yfocus)); AL_FUNC(void, al_destroy_mouse_cursor, (ALLEGRO_MOUSE_CURSOR *)); AL_FUNC(bool, al_set_mouse_cursor, (ALLEGRO_MOUSE_CURSOR *cursor)); AL_FUNC(bool, al_set_system_mouse_cursor, (ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id)); Modified: allegro/branches/4.9/src/display_new.c =================================================================== --- allegro/branches/4.9/src/display_new.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/display_new.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -675,7 +675,6 @@ */ void al_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y) { - ASSERT(display); ASSERT(x); ASSERT(y); Modified: allegro/branches/4.9/src/mousenu.c =================================================================== --- allegro/branches/4.9/src/mousenu.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/mousenu.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -298,134 +298,107 @@ *****************************************************************************/ -/* -ALLEGRO_MOUSE_CURSOR *al_create_mouse_cursor_old(BITMAP *bmp, int x_focus, int y_focus) -{ - ASSERT(gfx_driver); - ASSERT(bmp); - - if ((gfx_driver) && (gfx_driver->create_mouse_cursor)) - return gfx_driver->create_mouse_cursor(bmp, x_focus, y_focus); - - return NULL; -} -*/ - - /* Function: al_create_mouse_cursor - * Create a mouse cursor from the bitmap provided. There must be a - * graphics driver in effect. + * Create a mouse cursor from the bitmap provided. There must be a current + * display in effect. * Returns a pointer to the cursor on success, or NULL on failure. */ - -// FIXME: -#if 0 - -ALLEGRO_MOUSE_CURSOR *al_create_mouse_cursor(ALLEGRO_BITMAP *bmp, int x_focus, int y_focus) +ALLEGRO_MOUSE_CURSOR *al_create_mouse_cursor(ALLEGRO_BITMAP *bmp, + int x_focus, int y_focus) { - int x, y; - BITMAP *oldbmp; - ALLEGRO_MOUSE_CURSOR *result; - - ASSERT(gfx_driver); + ALLEGRO_DISPLAY *dpy = al_get_current_display(); + ASSERT(dpy); ASSERT(bmp); - /* Convert to BITMAP */ - oldbmp = create_bitmap_ex(32, - al_get_bitmap_width(bmp), al_get_bitmap_height(bmp)); - for (y = 0; y < oldbmp->h; y++) { - for (x = 0; x < oldbmp->w; x++) { - ALLEGRO_COLOR color = al_get_pixel(bmp, x, y); - unsigned char r, g, b, a; - int oldcolor; - al_unmap_rgba(color, &r, &g, &b, &a); - if (a == 0) - oldcolor = makecol32(255, 0, 255); - else - oldcolor = makecol32(r, g, b); - putpixel(oldbmp, x, y, oldcolor); - } + if (!dpy) { + return NULL; } - result = al_create_mouse_cursor_old(oldbmp, x_focus, y_focus); - - destroy_bitmap(oldbmp); - - return result; + ASSERT(dpy->vt->create_mouse_cursor); + return dpy->vt->create_mouse_cursor(dpy, bmp, x_focus, y_focus); } -#endif /* Function: al_destroy_mouse_cursor - * Free the memory used by the given cursor. The graphics driver that - * was in effect when the cursor was created must still be in effect. + * Free the memory used by the given cursor. + * + * The display that was in effect when the cursor was created must + * still be in effect. + * XXX that's terrible and should be changed + * + * Has no effect if `cursor' is NULL. */ void al_destroy_mouse_cursor(ALLEGRO_MOUSE_CURSOR *cursor) { - // FIXME - /* - ASSERT(gfx_driver); + ALLEGRO_DISPLAY *dpy = al_get_current_display(); + ASSERT(dpy); - if (!cursor) + if (!cursor) { return; + } - if ((gfx_driver) && (gfx_driver->destroy_mouse_cursor)) - gfx_driver->destroy_mouse_cursor(cursor); - - */ + ASSERT(dpy->vt->destroy_mouse_cursor); + dpy->vt->destroy_mouse_cursor(dpy, cursor); } /* Function: al_set_mouse_cursor - * Set the given mouse cursor to be the current mouse cursor. The - * graphics driver that was in effect when the cursor was created - * must still be in effect. If the cursor is currently 'shown' (as - * opposed to 'hidden') the change is immediately visible. - * Returns true on success, false on failure. + * Set the given mouse cursor to be the current mouse cursor for the current + * display. + * + * The display that was in effect when the cursor was created must still be + * in effect. + * XXX that's terrible and should be changed + * + * If the cursor is currently 'shown' (as opposed to 'hidden') the change is + * immediately visible. Returns true on success, false on failure. */ bool al_set_mouse_cursor(ALLEGRO_MOUSE_CURSOR *cursor) { - // FIXME - /* - ASSERT(gfx_driver); - ASSERT(cursor); + ALLEGRO_DISPLAY *dpy = al_get_current_display(); - if ((gfx_driver) && (gfx_driver->set_mouse_cursor)) - return gfx_driver->set_mouse_cursor(cursor); + if (!cursor) { + return false; + } + if (dpy) { + ASSERT(dpy->vt->set_mouse_cursor); + return dpy->vt->set_mouse_cursor(dpy, cursor); + } + return false; - */ - return false; } /* Function: al_set_system_mouse_cursor - * Set the given system mouse cursor to be the current mouse cursor. - * The graphics driver that was in effect when the cursor was created - * must still be in effect. If the cursor is currently 'shown' (as - * opposed to 'hidden') the change is immediately visible. - * Returns true on success, false on failure. + * Set the given system mouse cursor to be the current mouse cursor + * for the current display. If the cursor is currently 'shown' (as opposed + * to 'hidden') the change is immediately visible. Returns true on success, + * false on failure. */ bool al_set_system_mouse_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) { - ALLEGRO_DISPLAY *curr; + ALLEGRO_DISPLAY *dpy = al_get_current_display(); - curr = al_get_current_display(); + /* XXX should you be able to set ALLEGRO_SYSTEM_MOUSE_CURSOR_NONE? */ + ASSERT(cursor_id > ALLEGRO_SYSTEM_MOUSE_CURSOR_NONE); + ASSERT(cursor_id < ALLEGRO_NUM_SYSTEM_MOUSE_CURSORS); + ASSERT(dpy); - if (curr && curr->vt && curr->vt->set_system_cursor) - curr->vt->set_system_cursor(cursor_id); - // FIXME: - /* - ASSERT(gfx_driver); + if (cursor_id <= ALLEGRO_SYSTEM_MOUSE_CURSOR_NONE) { + return false; + } + if (cursor_id > ALLEGRO_NUM_SYSTEM_MOUSE_CURSORS) { + return false; + } + if (!dpy) { + return false; + } - if ((gfx_driver) && (gfx_driver->set_system_mouse_cursor)) - return gfx_driver->set_system_mouse_cursor(cursor_id); - - return false; - */ - return false; + ASSERT(dpy->vt->set_system_mouse_cursor); + return dpy->vt->set_system_mouse_cursor(dpy, cursor_id); } @@ -437,25 +410,34 @@ */ bool al_show_mouse_cursor(void) { - ALLEGRO_DISPLAY *curr = al_get_current_display(); - return curr->vt->show_cursor(curr); + ALLEGRO_DISPLAY *dpy = al_get_current_display(); + + if (dpy) { + ASSERT(dpy->vt->show_mouse_cursor); + return dpy->vt->show_mouse_cursor(dpy); + } + + return false; } /* Function: al_hide_mouse_cursor - * Hide the mouse cursor in the current display of the calling thread. This has - * no effect on what the current mouse cursor looks like; it just makes it - * disappear. - * Returns true on success (or if the cursor already was hidden), false - * otherwise. + * Hide the mouse cursor in the current display of the calling thread. This + * has no effect on what the current mouse cursor looks like; it just makes + * it disappear. Returns true on success (or if the cursor already was + * hidden), false otherwise. */ bool al_hide_mouse_cursor(void) { - ALLEGRO_DISPLAY *display = al_get_current_display(); - ASSERT(display); + ALLEGRO_DISPLAY *dpy = al_get_current_display(); - return display->vt->hide_cursor(display); + if (dpy) { + ASSERT(dpy->vt->hide_mouse_cursor); + return dpy->vt->hide_mouse_cursor(dpy); + } + + return false; } @@ -491,3 +473,4 @@ * indent-tabs-mode: nil * End: */ +/* vim: set sts=3 sw=3 et */ Modified: allegro/branches/4.9/src/win/d3d.h =================================================================== --- allegro/branches/4.9/src/win/d3d.h 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/d3d.h 2008-08-21 14:45:30 UTC (rev 10451) @@ -70,6 +70,9 @@ int mouse_range_x2; int mouse_range_y2; + HCURSOR mouse_selected_hcursor; + bool mouse_cursor_shown; + bool device_lost; bool ignore_ack; // al_resize_display doesn't need acknowledge_resize Modified: allegro/branches/4.9/src/win/d3d_disp.cpp =================================================================== --- allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-21 14:45:30 UTC (rev 10451) @@ -1256,6 +1256,9 @@ al_set_mouse_range(0, 0, w, h); } + display->mouse_selected_hcursor = 0; + display->mouse_cursor_shown = true; /* XXX or is it false? */ + return true; } @@ -1988,17 +1991,102 @@ return true; } -static bool d3d_show_cursor(ALLEGRO_DISPLAY *display) + + +static bool d3d_set_system_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id); + +ALLEGRO_MOUSE_CURSOR *d3d_create_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_BITMAP *sprite, int xfocus, int yfocus) { - return _al_win_directx_show_mouse_cursor(); + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + HWND wnd = d3d_display->window; + ALLEGRO_MOUSE_CURSOR_WIN *win_cursor; + + win_cursor = _al_win_create_mouse_cursor(wnd, sprite, xfocus, yfocus); + return (ALLEGRO_MOUSE_CURSOR *) win_cursor; } -static bool d3d_hide_cursor(ALLEGRO_DISPLAY *display) +static void d3d_destroy_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor) { - return _al_win_directx_hide_mouse_cursor(); + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + ALLEGRO_MOUSE_CURSOR_WIN *win_cursor = (ALLEGRO_MOUSE_CURSOR_WIN *) cursor; + + ASSERT(win_cursor); + + if (win_cursor->hcursor == d3d_display->mouse_selected_hcursor) { + d3d_set_system_mouse_cursor(display, ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); + } + + _al_win_destroy_mouse_cursor(win_cursor); } +static bool d3d_set_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor) +{ + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + ALLEGRO_MOUSE_CURSOR_WIN *win_cursor = (ALLEGRO_MOUSE_CURSOR_WIN *) cursor; + ASSERT(win_cursor); + ASSERT(win_cursor->hcursor); + + d3d_display->mouse_selected_hcursor = win_cursor->hcursor; + + if (d3d_display->mouse_cursor_shown) { + _al_win_set_mouse_hcursor(win_cursor->hcursor); + } + + return true; +} + +static bool d3d_set_system_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) +{ + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + HCURSOR wc; + + wc = _al_win_system_cursor_to_hcursor(cursor_id); + if (!wc) { + return false; + } + + d3d_display->mouse_selected_hcursor = wc; + if (d3d_display->mouse_cursor_shown) { + /* + MySetCursor(wc); + PostMessage(wgl_display->window, WM_MOUSEMOVE, 0, 0); + */ + _al_win_set_mouse_hcursor(wc); + } + return true; +} + +static bool d3d_show_mouse_cursor(ALLEGRO_DISPLAY *display) +{ + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + + /* XXX do we need this? */ + if (!d3d_display->mouse_selected_hcursor) { + d3d_set_system_mouse_cursor(display, ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); + } + + _al_win_set_mouse_hcursor(d3d_display->mouse_selected_hcursor); + d3d_display->mouse_cursor_shown = true; + return true; +} + +static bool d3d_hide_mouse_cursor(ALLEGRO_DISPLAY *display) +{ + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + + _al_win_set_mouse_hcursor(NULL); + d3d_display->mouse_cursor_shown = false; + return true; +} + + + /* Exposed stuff */ LPDIRECT3DDEVICE9 al_d3d_get_device(ALLEGRO_DISPLAY *display) @@ -2054,7 +2142,15 @@ bool d3d_set_system_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) { - return _al_win_directx_set_system_mouse_cursor(cursor_id); + HCURSOR hcursor; + + hcursor = _al_win_system_cursor_to_hcursor(cursor_id); + if (hcursor) { + _al_win_set_mouse_hcursor(hcursor); + return true; + } + + return false; } /* Obtain a reference to this driver. */ @@ -2071,6 +2167,7 @@ vt->clear = d3d_clear; vt->draw_line = d3d_draw_line; vt->draw_rectangle = d3d_draw_rectangle; + vt->draw_pixel = d3d_draw_pixel; vt->flip_display = d3d_flip_display; vt->update_display_region = d3d_update_display_region; vt->acknowledge_resize = d3d_acknowledge_resize; @@ -2085,14 +2182,18 @@ vt->draw_memory_bitmap_region = NULL; vt->create_sub_bitmap = d3d_create_sub_bitmap; vt->wait_for_vsync = d3d_wait_for_vsync; - vt->show_cursor = d3d_show_cursor; - vt->hide_cursor = d3d_hide_cursor; + + vt->create_mouse_cursor = d3d_create_mouse_cursor; + vt->destroy_mouse_cursor = d3d_destroy_mouse_cursor; + vt->set_mouse_cursor = d3d_set_mouse_cursor; + vt->set_system_mouse_cursor = d3d_set_system_mouse_cursor; + vt->show_mouse_cursor = d3d_show_mouse_cursor; + vt->hide_mouse_cursor = d3d_hide_mouse_cursor; + vt->set_icon = _al_win_set_display_icon; - vt->draw_pixel = d3d_draw_pixel; vt->set_window_position = d3d_set_window_position; vt->get_window_position = d3d_get_window_position; vt->toggle_frame = d3d_toggle_frame; - vt->set_system_cursor = d3d_set_system_cursor; return vt; } Modified: allegro/branches/4.9/src/win/wddraw.c =================================================================== --- allegro/branches/4.9/src/win/wddraw.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/wddraw.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -22,11 +22,11 @@ #define PREFIX_W "al-wddraw WARNING: " #define PREFIX_E "al-wddraw ERROR: " +#if 0 static HCURSOR selected_cursor = NULL; #define CURSOR_SHOWN (_win_hcursor == NULL ? false : true) -#if 0 /* DirectDraw globals */ LPDIRECTDRAW2 directdraw = NULL; LPDIRECTDRAWCLIPPER ddclipper = NULL; @@ -369,230 +369,4 @@ _exit_critical(); } - - -/*****************************************************************************/ -/* Mouse cursors */ -/*****************************************************************************/ - - - -struct ALLEGRO_MOUSE_CURSOR -{ - HCURSOR hcursor; -}; - - -/* `_win_hcursor' points to the cursor being shown or NULL if no cursor is - * shown. `selected_cursor' always points to the currently selected cursor, - * whether it is hidden or shown. - */ - #endif - -static void MySetCursor(HCURSOR hcursor) -{ - POINT p; - - _win_hcursor = hcursor; - SetCursor(_win_hcursor); - - /* Windows is too stupid to actually display the mouse pointer when we - * change it and waits until it is moved, so we have to generate a fake - * mouse move to actually show the cursor. - */ - GetCursorPos(&p); - SetCursorPos(p.x, p.y); -} - - -#if 0 - -static HCURSOR _al_win_directx_create_mouse_hcursor(struct BITMAP *sprite, int xfocus, int yfocus) -{ - int mask_color; - int x, y; - int sys_sm_cx, sys_sm_cy; - HDC h_dc; - HDC h_and_dc; - HDC h_xor_dc; - ICONINFO iconinfo; - HBITMAP and_mask; - HBITMAP xor_mask; - HBITMAP hOldAndMaskBitmap; - HBITMAP hOldXorMaskBitmap; - HCURSOR hcursor; - HWND allegro_wnd = win_get_window(); - - /* Get allowed cursor size - Windows can't make cursors of arbitrary size */ - sys_sm_cx = GetSystemMetrics(SM_CXCURSOR); - sys_sm_cy = GetSystemMetrics(SM_CYCURSOR); - - if ((sprite->w > sys_sm_cx) || (sprite->h > sys_sm_cy)) { - return NULL; - } - - /* Create bitmap */ - h_dc = GetDC(allegro_wnd); - h_xor_dc = CreateCompatibleDC(h_dc); - h_and_dc = CreateCompatibleDC(h_dc); - - /* Prepare AND (monochrome) and XOR (colour) mask */ - and_mask = CreateBitmap(sys_sm_cx, sys_sm_cy, 1, 1, NULL); - xor_mask = CreateCompatibleBitmap(h_dc, sys_sm_cx, sys_sm_cy); - hOldAndMaskBitmap = SelectObject(h_and_dc, and_mask); - hOldXorMaskBitmap = SelectObject(h_xor_dc, xor_mask); - - /* Create transparent cursor */ - for (y = 0; y < sys_sm_cy; y++) { - for (x = 0; x < sys_sm_cx; x++) { - SetPixel(h_and_dc, x, y, WINDOWS_RGB(255, 255, 255)); - SetPixel(h_xor_dc, x, y, WINDOWS_RGB(0, 0, 0)); - } - } - draw_to_hdc(h_xor_dc, sprite, 0, 0); - mask_color = bitmap_mask_color(sprite); - - /* Make cursor background transparent */ - for (y = 0; y < sprite->h; y++) { - for (x = 0; x < sprite->w; x++) { - if (getpixel(sprite, x, y) != mask_color) { - /* Don't touch XOR value */ - SetPixel(h_and_dc, x, y, 0); - } - else { - /* No need to touch AND value */ - SetPixel(h_xor_dc, x, y, WINDOWS_RGB(0, 0, 0)); - } - } - } - - SelectObject(h_and_dc, hOldAndMaskBitmap); - SelectObject(h_xor_dc, hOldXorMaskBitmap); - DeleteDC(h_and_dc); - DeleteDC(h_xor_dc); - ReleaseDC(allegro_wnd, h_dc); - - iconinfo.fIcon = FALSE; - iconinfo.xHotspot = xfocus; - iconinfo.yHotspot = yfocus; - iconinfo.hbmMask = and_mask; - iconinfo.hbmColor = xor_mask; - - hcursor = CreateIconIndirect(&iconinfo); - - DeleteObject(and_mask); - DeleteObject(xor_mask); - - return hcursor; -} - - - -ALLEGRO_MOUSE_CURSOR *_al_win_directx_create_mouse_cursor(struct BITMAP *sprite, int xfocus, int yfocus) -{ - HCURSOR hcursor; - ALLEGRO_MOUSE_CURSOR *wrapper; - - hcursor = _al_win_directx_create_mouse_hcursor(sprite, xfocus, yfocus); - if (!hcursor) { - return NULL; - } - - wrapper = _AL_MALLOC(sizeof *wrapper); - if (!wrapper) { - DestroyIcon(hcursor); - return NULL; - } - - wrapper->hcursor = hcursor; - return wrapper; -} - - - -void _al_win_directx_destroy_mouse_cursor(ALLEGRO_MOUSE_CURSOR *wrapper) -{ - ASSERT(wrapper->hcursor); - - if (wrapper->hcursor == selected_cursor) { - al_set_system_mouse_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); - ASSERT(wrapper->hcursor != selected_cursor); - } - - DestroyIcon(wrapper->hcursor); - _AL_FREE(wrapper); -} - - - -bool _al_win_directx_set_mouse_cursor(ALLEGRO_MOUSE_CURSOR *wrapper) -{ - ASSERT(wrapper); - ASSERT(wrapper->hcursor); - - selected_cursor = wrapper->hcursor; - - if (CURSOR_SHOWN) { - MySetCursor(selected_cursor); - } - - return true; -} - - -#endif - - -bool _al_win_directx_set_system_mouse_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) -{ - HCURSOR wc; - HWND allegro_wnd = win_get_window(); - - wc = NULL; - switch (cursor_id) { - case ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW: - wc = LoadCursor(NULL, IDC_ARROW); - break; - case ALLEGRO_SYSTEM_MOUSE_CURSOR_BUSY: - wc = LoadCursor(NULL, IDC_WAIT); - break; - case ALLEGRO_SYSTEM_MOUSE_CURSOR_QUESTION: - wc = LoadCursor(NULL, IDC_HELP); - break; - case ALLEGRO_SYSTEM_MOUSE_CURSOR_EDIT: - wc = LoadCursor(NULL, IDC_IBEAM); - break; - default: - return false; - } - - ASSERT(wc); - selected_cursor = wc; - - if (CURSOR_SHOWN) { - MySetCursor(selected_cursor); - PostMessage(allegro_wnd, WM_MOUSEMOVE, 0, 0); - } - - return true; -} - -bool _al_win_directx_show_mouse_cursor(void) -{ - //if (!selected_cursor) { - al_set_system_mouse_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); - ASSERT(selected_cursor); - // } - - MySetCursor(selected_cursor); - return true; -} - - - -bool _al_win_directx_hide_mouse_cursor(void) -{ - MySetCursor(NULL); - return true; -} Modified: allegro/branches/4.9/src/win/wddraw.h =================================================================== --- allegro/branches/4.9/src/win/wddraw.h 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/wddraw.h 2008-08-21 14:45:30 UTC (rev 10451) @@ -86,12 +86,8 @@ AL_FUNC(BITMAP *, gfx_directx_create_system_bitmap, (int width, int height)); AL_FUNC(void, gfx_directx_destroy_system_bitmap, (BITMAP *bmp)); AL_FUNC(GFX_MODE_LIST *, gfx_directx_fetch_mode_list, (void)); -AL_FUNC(ALLEGRO_MOUSE_CURSOR *, _al_win_directx_create_mouse_cursor, (struct BITMAP *sprite, int xfocus, int yfocus)); -AL_FUNC(void, _al_win_directx_destroy_mouse_cursor, (ALLEGRO_MOUSE_CURSOR *wrapper)); -AL_FUNC(bool, _al_win_directx_set_mouse_cursor, (ALLEGRO_MOUSE_CURSOR *wrapper)); - /* driver initialisation and shutdown (from wddraw.c) */ AL_FUNC(int, init_directx, (void)); AL_FUNC(int, gfx_directx_create_primary, (void)); @@ -149,9 +145,6 @@ AL_FUNC(int, restore_all_ddraw_surfaces, (void)); #endif -AL_FUNC(bool, _al_win_directx_set_system_mouse_cursor, (ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id)); -AL_FUNC(bool, _al_win_directx_show_mouse_cursor, (void)); -AL_FUNC(bool, _al_win_directx_hide_mouse_cursor, (void)); #endif Modified: allegro/branches/4.9/src/win/wddwin.c =================================================================== --- allegro/branches/4.9/src/win/wddwin.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/wddwin.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -77,12 +77,12 @@ 0, // long vid_phys_base; TRUE, // int windowed; /* new_api_branch additions */ - _al_win_directx_create_mouse_cursor, - _al_win_directx_destroy_mouse_cursor, - _al_win_directx_set_mouse_cursor, - _al_win_directx_set_system_mouse_cursor, - _al_win_directx_show_mouse_cursor, - _al_win_directx_hide_mouse_cursor + NULL, // create_mouse_cursor + NULL, // destroy_mouse_cursor + NULL, // set_mouse_cursor + NULL, // set_system_mouse_cursor + NULL, // show_mouse_cursor + NULL // hide_mouse_cursor }; Modified: allegro/branches/4.9/src/win/wgl_disp.c =================================================================== --- allegro/branches/4.9/src/win/wgl_disp.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/wgl_disp.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -90,12 +90,13 @@ 0, 0, 0, - _al_win_directx_create_mouse_cursor, - _al_win_directx_destroy_mouse_cursor, - _al_win_directx_set_mouse_cursor, - _al_win_directx_set_system_mouse_cursor, - _al_win_directx_show_mouse_cursor, - _al_win_directx_hide_mouse_cursor + /* new_api_branch additions */ + NULL, /* create_mouse_cursor */ + NULL, /* destroy_mouse_cursor*/ + NULL, /* set_mouse_cursor */ + NULL, /* set_system_mouse_cursor */ + NULL, /* show_mouse_cursor */ + NULL /* hide_mouse_cursor */ }; /* Logs a Win32 error/warning message in the log file. @@ -676,7 +677,7 @@ if ((dm.dmPelsWidth == (unsigned) d->w) && (dm.dmPelsHeight == (unsigned) d->h) - && (dm.dmBitsPerPel == bpp) + && (dm.dmBitsPerPel == (unsigned) bpp) && (dm.dmDisplayFrequency != (unsigned) d->refresh_rate)) { /* Keep it as fallback if refresh rate request could not * be satisfied. Try to get as close to 60Hz as possible though, @@ -697,7 +698,7 @@ } while ((dm.dmPelsWidth != (unsigned) d->w) || (dm.dmPelsHeight != (unsigned) d->h) - || (dm.dmBitsPerPel != bpp) + || (dm.dmBitsPerPel != (unsigned) bpp) || (dm.dmDisplayFrequency != (unsigned) d->refresh_rate)); if (!modeswitch && !fallback_dm_valid) { @@ -1288,18 +1289,6 @@ } -static bool wgl_show_cursor(ALLEGRO_DISPLAY *display) -{ - return _al_win_directx_show_mouse_cursor(); -} - - -static bool wgl_hide_cursor(ALLEGRO_DISPLAY *display) -{ - return _al_win_directx_hide_mouse_cursor(); -} - - static void wgl_switch_in(ALLEGRO_DISPLAY *display) { if (al_is_mouse_installed()) @@ -1356,8 +1345,15 @@ vt->switch_out = wgl_switch_in; vt->switch_in = wgl_switch_out; vt->upload_compat_screen = NULL; - vt->show_cursor = wgl_show_cursor; - vt->hide_cursor = wgl_hide_cursor; + + /* XXX sorry, these need to be filled in */ + vt->create_mouse_cursor = NULL; + vt->destroy_mouse_cursor = NULL; + vt->set_mouse_cursor = NULL; + vt->set_system_mouse_cursor = NULL; + vt->show_mouse_cursor = NULL; + vt->hide_mouse_cursor = NULL; + vt->set_icon = _al_win_set_display_icon; vt->set_window_position = wgl_set_window_position; vt->get_window_position = wgl_get_window_position; Modified: allegro/branches/4.9/src/win/win_new.h =================================================================== --- allegro/branches/4.9/src/win/win_new.h 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/win_new.h 2008-08-21 14:45:30 UTC (rev 10451) @@ -50,6 +50,28 @@ +/* wmcursor.c */ + +typedef struct ALLEGRO_MOUSE_CURSOR_WIN ALLEGRO_MOUSE_CURSOR_WIN; +struct ALLEGRO_MOUSE_CURSOR_WIN +{ + HCURSOR hcursor; +}; + +AL_FUNC(ALLEGRO_MOUSE_CURSOR_WIN *, _al_win_create_mouse_cursor, + (HWND wnd, ALLEGRO_BITMAP *sprite, int xfocus, int yfocus)); +AL_FUNC(void, _al_win_destroy_mouse_cursor, + (ALLEGRO_MOUSE_CURSOR_WIN *cursor)); +AL_FUNC(void, _al_win_set_mouse_hcursor, (HCURSOR hcursor)); +AL_FUNC(bool, _al_win_set_system_mouse_cursor, + (ALLEGRO_DISPLAY *display, ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id)); +AL_FUNC(bool, _al_win_show_mouse_cursor, (void)); +AL_FUNC(bool, _al_win_hide_mouse_cursor, (void)); +AL_FUNC(HCURSOR, _al_win_system_cursor_to_hcursor, + (ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id)); + + + #if defined ALLEGRO_CFG_D3D AL_FUNC(int, _al_d3d_get_num_display_modes, Added: allegro/branches/4.9/src/win/wmcursor.c =================================================================== --- allegro/branches/4.9/src/win/wmcursor.c (rev 0) +++ allegro/branches/4.9/src/win/wmcursor.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -0,0 +1,331 @@ +/* ______ ___ ___ + * /\ _ \ /\_ \ /\_ \ + * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ + * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ + * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ + * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ + * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ + * /\____/ + * \_/__/ + * + * Windows mouse cursors. + * + * By Evert Glebbeek. + * + * Adapted for Allegro 4.9 by Peter Wang. + * + * GDI code adapted from src/win/gdi.c. + * + * See readme.txt for copyright information. + */ + + +#include "allegro5/allegro5.h" +#include "allegro5/internal/aintern.h" +#include "allegro5/internal/aintern_bitmap.h" +#include "win_new.h" + + +static void local_stretch_blit_to_hdc(ALLEGRO_BITMAP *bitmap, HDC dc, + int src_x, int src_y, int src_w, int src_h, + int dest_x, int dest_y, int dest_w, int dest_h); +static void local_draw_to_hdc(HDC dc, ALLEGRO_BITMAP *bitmap, int x, int y); + + + +static HCURSOR _al_win_create_mouse_hcursor(HWND wnd, + ALLEGRO_BITMAP *sprite, int xfocus, int yfocus) +{ + int x, y; + int sys_sm_cx, sys_sm_cy; + HDC h_dc; + HDC h_and_dc; + HDC h_xor_dc; + ICONINFO iconinfo; + HBITMAP and_mask; + HBITMAP xor_mask; + HBITMAP hOldAndMaskBitmap; + HBITMAP hOldXorMaskBitmap; + HCURSOR hcursor; + + /* Get allowed cursor size - Windows can't make cursors of arbitrary size */ + sys_sm_cx = GetSystemMetrics(SM_CXCURSOR); + sys_sm_cy = GetSystemMetrics(SM_CYCURSOR); + + if ((sprite->w > sys_sm_cx) || (sprite->h > sys_sm_cy)) { + return NULL; + } + + /* Create bitmap */ + h_dc = GetDC(wnd); + h_xor_dc = CreateCompatibleDC(h_dc); + h_and_dc = CreateCompatibleDC(h_dc); + + /* Prepare AND (monochrome) and XOR (colour) mask */ + and_mask = CreateBitmap(sys_sm_cx, sys_sm_cy, 1, 1, NULL); + xor_mask = CreateCompatibleBitmap(h_dc, sys_sm_cx, sys_sm_cy); + hOldAndMaskBitmap = (HBITMAP) SelectObject(h_and_dc, and_mask); + hOldXorMaskBitmap = (HBITMAP) SelectObject(h_xor_dc, xor_mask); + + /* Create transparent cursor */ + for (y = 0; y < sys_sm_cy; y++) { + for (x = 0; x < sys_sm_cx; x++) { + SetPixel(h_and_dc, x, y, WINDOWS_RGB(255, 255, 255)); + SetPixel(h_xor_dc, x, y, WINDOWS_RGB(0, 0, 0)); + } + } + local_draw_to_hdc(h_xor_dc, sprite, 0, 0); + + /* Make cursor background transparent */ + for (y = 0; y < sprite->h; y++) { + for (x = 0; x < sprite->w; x++) { + ALLEGRO_COLOR c; + unsigned char r, g, b, a; + + c = al_get_pixel(sprite, x, y); + al_unmap_rgba(c, &r, &g, &b, &a); + if (a != 0) { + /* Don't touch XOR value */ + SetPixel(h_and_dc, x, y, 0); + } + else { + /* No need to touch AND value */ + SetPixel(h_xor_dc, x, y, WINDOWS_RGB(0, 0, 0)); + } + } + } + + SelectObject(h_and_dc, hOldAndMaskBitmap); + SelectObject(h_xor_dc, hOldXorMaskBitmap); + DeleteDC(h_and_dc); + DeleteDC(h_xor_dc); + ReleaseDC(wnd, h_dc); + + iconinfo.fIcon = FALSE; + iconinfo.xHotspot = xfocus; + iconinfo.yHotspot = yfocus; + iconinfo.hbmMask = and_mask; + iconinfo.hbmColor = xor_mask; + + hcursor = CreateIconIndirect(&iconinfo); + + DeleteObject(and_mask); + DeleteObject(xor_mask); + + return hcursor; +} + + + +ALLEGRO_MOUSE_CURSOR_WIN *_al_win_create_mouse_cursor(HWND wnd, + ALLEGRO_BITMAP *sprite, int xfocus, int yfocus) +{ + HCURSOR hcursor; + ALLEGRO_MOUSE_CURSOR_WIN *win_cursor; + + hcursor = _al_win_create_mouse_hcursor(wnd, sprite, xfocus, yfocus); + if (!hcursor) { + return NULL; + } + + win_cursor = _AL_MALLOC(sizeof *win_cursor); + if (!win_cursor) { + DestroyIcon(hcursor); + return NULL; + } + + win_cursor->hcursor = hcursor; + return win_cursor; +} + + + +void _al_win_destroy_mouse_cursor(ALLEGRO_MOUSE_CURSOR_WIN *win_cursor) +{ + ASSERT(win_cursor); + ASSERT(win_cursor->hcursor); + + DestroyIcon(win_cursor->hcursor); + _AL_FREE(win_cursor); +} + + + +void _al_win_set_mouse_hcursor(HCURSOR hcursor) +{ + POINT p; + + SetCursor(hcursor); + + /* Windows is too stupid to actually display the mouse pointer when we + * change it and waits until it is moved, so we have to generate a fake + * mouse move to actually show the cursor. + */ + GetCursorPos(&p); + SetCursorPos(p.x, p.y); +} + + + +HCURSOR _al_win_system_cursor_to_hcursor(ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) +{ + switch (cursor_id) { + case ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW: + return LoadCursor(NULL, IDC_ARROW); + case ALLEGRO_SYSTEM_MOUSE_CURSOR_BUSY: + return LoadCursor(NULL, IDC_WAIT); + case ALLEGRO_SYSTEM_MOUSE_CURSOR_QUESTION: + return LoadCursor(NULL, IDC_HELP); + case ALLEGRO_SYSTEM_MOUSE_CURSOR_EDIT: + return LoadCursor(NULL, IDC_IBEAM); + default: + return NULL; + } +} + + + +/* GDI stuff - this really belongs elsewhere */ + + +/* get_bitmap_info: + * Returns a BITMAPINFO structure suited to an ALLEGRO_BITMAP. + * You have to free the memory allocated by this function. + */ +static BITMAPINFO *get_bitmap_info(ALLEGRO_BITMAP *bitmap) +{ + BITMAPINFO *bi; + int bpp, i; + + bi = (BITMAPINFO *) _AL_MALLOC(sizeof(BITMAPINFO) + sizeof(RGBQUAD) * 256); + + bpp = al_get_pixel_format_bits(al_get_bitmap_format(bitmap)); + if (bpp == 15) + bpp = 16; + + ZeroMemory(&bi->bmiHeader, sizeof(BITMAPINFOHEADER)); + + bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bi->bmiHeader.biBitCount = bpp; + bi->bmiHeader.biPlanes = 1; + bi->bmiHeader.biWidth = bitmap->w; + bi->bmiHeader.biHeight = -bitmap->h; + bi->bmiHeader.biClrUsed = 256; + bi->bmiHeader.biCompression = BI_RGB; + + /* + if (pal) { + for (i = 0; i < 256; i++) { + bi->bmiColors[i].rgbRed = _rgb_scale_6[pal[i].r]; + bi->bmiColors[i].rgbGreen = _rgb_scale_6[pal[i].g]; + bi->bmiColors[i].rgbBlue = _rgb_scale_6[pal[i].b]; + bi->bmiColors[i].rgbReserved = 0; + } + } + */ + + return bi; +} + + + +/* get_dib_from_bitmap_32: + * Creates a Windows device-independent bitmap (DIB) from an Allegro BITMAP. + * You have to free the memory allocated by this function. + * + * This version always creates a 32-bit DIB. + */ +static BYTE *get_dib_from_bitmap_32(ALLEGRO_BITMAP *bitmap) +{ + int w, h; + int x, y; + int pitch; + BYTE *pixels; + BYTE *dst; + + w = al_get_bitmap_width(bitmap); + h = al_get_bitmap_height(bitmap); + pitch = w * 4; + + pixels = (BYTE *) _AL_MALLOC_ATOMIC(h * pitch); + if (!pixels) + return NULL; + + for (y = 0; y < h; y++) { + dst = pixels + y * pitch; + + for (x = 0; x < w; x++) { + ALLEGRO_COLOR col; + unsigned char r, g, b, a; + + col = al_get_pixel(bitmap, x, y); + al_unmap_rgba(col, &r, &g, &b, &a); + + dst[0] = r; + dst[1] = g; + dst[2] = b; + dst[3] = a; + + dst += 4; + } + } + + return pixels; +} + + + +/* draw_to_hdc: + * Draws an entire Allegro BITMAP to a Windows DC. Has a syntax similar to + * draw_sprite(). + */ +static void local_draw_to_hdc(HDC dc, ALLEGRO_BITMAP *bitmap, int x, int y) +{ + int w = al_get_bitmap_width(bitmap); + int h = al_get_bitmap_height(bitmap); + local_stretch_blit_to_hdc(bitmap, dc, 0, 0, w, h, x, y, w, h); +} + + + +/* stretch_blit_to_hdc: + * Blits an Allegro BITMAP to a Windows DC. Has a syntax similar to + * stretch_blit(). + */ +static void local_stretch_blit_to_hdc(ALLEGRO_BITMAP *bitmap, HDC dc, + int src_x, int src_y, int src_w, int src_h, + int dest_x, int dest_y, int dest_w, int dest_h) +{ + const int bitmap_w = al_get_bitmap_width(bitmap); + const int bitmap_h = al_get_bitmap_height(bitmap); + const int bottom_up_src_y = bitmap_h - src_y - src_h; + BYTE *pixels; + BITMAPINFO *bi; + + bi = get_bitmap_info(bitmap); + pixels = get_dib_from_bitmap_32(bitmap); + + /* Windows treats all source bitmaps as bottom-up when using StretchDIBits + * unless the source (x,y) is (0,0). To work around this buggy behavior, we + * can use negative heights to reverse the direction of the blits. + * + * See <http://wiki.allegro.cc/StretchDIBits> for a detailed explanation. + */ + if (bottom_up_src_y == 0 && src_x == 0 && src_h != bitmap_h) { + StretchDIBits(dc, dest_x, dest_h+dest_y-1, dest_w, -dest_h, + src_x, bitmap_h - src_y + 1, src_w, -src_h, pixels, bi, + DIB_RGB_COLORS, SRCCOPY); + } + else { + StretchDIBits(dc, dest_x, dest_y, dest_w, dest_h, + src_x, bottom_up_src_y, src_w, src_h, pixels, bi, + DIB_RGB_COLORS, SRCCOPY); + } + + _AL_FREE(pixels); + _AL_FREE(bi); +} + + + +/* vim: set sts=3 sw=3 et: */ Modified: allegro/branches/4.9/src/win/wmouse.c =================================================================== --- allegro/branches/4.9/src/win/wmouse.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/wmouse.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -107,6 +107,7 @@ +/* XXX this should be per-display */ HCURSOR _win_hcursor = NULL; /* Hardware cursor to display */ Modified: allegro/branches/4.9/src/win/wnewwin.c =================================================================== --- allegro/branches/4.9/src/win/wnewwin.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/win/wnewwin.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -282,6 +282,7 @@ case WM_MOUSEACTIVATE: return MA_ACTIVATEANDEAT; case WM_SETCURSOR: + // XXX ? if (_win_hcursor == NULL) SetCursor(NULL); break; Modified: allegro/branches/4.9/src/x/xmousenu.c =================================================================== --- allegro/branches/4.9/src/x/xmousenu.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/x/xmousenu.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -23,7 +23,6 @@ #include "allegro5/allegro5.h" #include "allegro5/internal/aintern.h" #include "allegro5/internal/aintern_mouse.h" -//#include "xwin.h" #include "../xglx/xglx.h" Modified: allegro/branches/4.9/src/xglx/xdisplay.c =================================================================== --- allegro/branches/4.9/src/xglx/xdisplay.c 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/xglx/xdisplay.c 2008-08-21 14:45:30 UTC (rev 10451) @@ -7,7 +7,18 @@ #include "allegro5/internal/aintern_bitmap.h" #include "allegro5/internal/aintern_opengl.h" +#include <X11/cursorfont.h> +#ifdef ALLEGRO_XWINDOWS_WITH_XCURSOR +#include <X11/Xcursor/Xcursor.h> +#else +/* This requirement could be lifted for compatibility with older systems at the + * expense of functionality, but it's probably not worthwhile. + */ +#error This file requires Xcursor. +#endif + + static ALLEGRO_DISPLAY_INTERFACE *xdpy_vt; @@ -117,10 +128,11 @@ { ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; - _al_mutex_lock(&system->lock); Window root, parent, child, *children; unsigned int n; + _al_mutex_lock(&system->lock); + /* To account for the window border, we have to find the parent window which * draws the border. If the parent is the root though, then we should not * translate. @@ -297,6 +309,13 @@ ogl_disp->backbuffer = _al_ogl_create_backbuffer(display); + d->invisible_cursor = None; + d->current_cursor = XC_left_ptr; + d->cursor_hidden = false; + + d->icon = None; + d->icon_mask = None; + _al_mutex_unlock(&system->lock); return display; @@ -553,8 +572,157 @@ +static ALLEGRO_MOUSE_CURSOR *xdpy_create_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_BITMAP *bmp, int x_focus, int y_focus) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + + int bmp_w; + int bmp_h; + ALLEGRO_LOCKED_REGION lr; + ALLEGRO_MOUSE_CURSOR_XGLX *xcursor; + XcursorImage *image; + int c, ix, iy; + + bmp_w = al_get_bitmap_width(bmp); + bmp_h = al_get_bitmap_height(bmp); + if (!al_lock_bitmap(bmp, &lr, ALLEGRO_LOCK_READONLY)) { + return NULL; + } + + xcursor = _AL_MALLOC(sizeof *xcursor); + if (!xcursor) { + return NULL; + } + + image = XcursorImageCreate(bmp->w, bmp->h); + if (image == None) { + _AL_FREE(xcursor); + return NULL; + } + + c = 0; + for (iy = 0; iy < bmp_h; iy++) { + for (ix = 0; ix < bmp_w; ix++) { + ALLEGRO_COLOR col; + unsigned char r, g, b, a; + + col = al_get_pixel(bmp, ix, iy); + al_unmap_rgb(col, &r, &g, &b); + a = 255; + image->pixels[c++] = (a<<24) | (r<<16) | (g<<8) | (b); + } + } + + image->xhot = x_focus; + image->yhot = y_focus; + + _al_mutex_lock(&system->lock); + xcursor->cursor = XcursorImageLoadCursor(xdisplay, image); + _al_mutex_unlock(&system->lock); + + XcursorImageDestroy(image); + + al_unlock_bitmap(bmp); + + return (ALLEGRO_MOUSE_CURSOR *)xcursor; +} + + + +static void xdpy_destroy_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + ALLEGRO_MOUSE_CURSOR_XGLX *xcursor = (ALLEGRO_MOUSE_CURSOR_XGLX *)cursor; + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + + _al_mutex_lock(&system->lock); + + if (glx->current_cursor == xcursor->cursor) { + XUndefineCursor(xdisplay, xwindow); + glx->current_cursor = None; + } + + XFreeCursor(xdisplay, xcursor->cursor); + _AL_FREE(xcursor); + + _al_mutex_unlock(&system->lock); +} + + + +static bool xdpy_set_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + ALLEGRO_MOUSE_CURSOR_XGLX *xcursor = (ALLEGRO_MOUSE_CURSOR_XGLX *)cursor; + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + + glx->current_cursor = xcursor->cursor; + + if (!glx->cursor_hidden) { + _al_mutex_lock(&system->lock); + XDefineCursor(xdisplay, xwindow, glx->current_cursor); + _al_mutex_unlock(&system->lock); + } + + return true; +} + + + +static bool xdpy_set_system_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + unsigned int cursor_shape; + + switch (cursor_id) { + case ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW: + cursor_shape = XC_left_ptr; + break; + case ALLEGRO_SYSTEM_MOUSE_CURSOR_BUSY: + cursor_shape = XC_watch; + break; + case ALLEGRO_SYSTEM_MOUSE_CURSOR_QUESTION: + cursor_shape = XC_question_arrow; + break; + case ALLEGRO_SYSTEM_MOUSE_CURSOR_EDIT: + cursor_shape = XC_xterm; + break; + default: + return false; + } + + _al_mutex_lock(&system->lock); + + glx->current_cursor = XCreateFontCursor(xdisplay, cursor_shape); + /* XXX: leak? */ + + if (!glx->cursor_hidden) { + XDefineCursor(xdisplay, xwindow, glx->current_cursor); + } + + _al_mutex_unlock(&system->lock); + + return true; +} + + + /* Show the system mouse cursor. */ -static bool xdpy_show_cursor(ALLEGRO_DISPLAY *display) +static bool xdpy_show_mouse_cursor(ALLEGRO_DISPLAY *display) { ALLEGRO_DISPLAY_XGLX *glx = (void *)display; ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); @@ -564,15 +732,17 @@ if (!glx->cursor_hidden) return true; - XUndefineCursor(xdisplay, xwindow); + _al_mutex_lock(&system->lock); + XDefineCursor(xdisplay, xwindow, glx->current_cursor); glx->cursor_hidden = false; + _al_mutex_unlock(&system->lock); return true; } /* Hide the system mouse cursor. */ -static bool xdpy_hide_cursor(ALLEGRO_DISPLAY *display) +static bool xdpy_hide_mouse_cursor(ALLEGRO_DISPLAY *display) { ALLEGRO_DISPLAY_XGLX *glx = (void *)display; ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); @@ -582,6 +752,8 @@ if (glx->cursor_hidden) return true; + _al_mutex_lock(&system->lock); + if (glx->invisible_cursor == None) { unsigned long gcmask; XGCValues gcvalues; @@ -608,6 +780,9 @@ XDefineCursor(xdisplay, xwindow, glx->invisible_cursor); glx->cursor_hidden = true; + + _al_mutex_unlock(&system->lock); + return true; } @@ -647,8 +822,14 @@ xdpy_vt->set_target_bitmap = _al_ogl_set_target_bitmap; xdpy_vt->is_compatible_bitmap = xdpy_is_compatible_bitmap; xdpy_vt->resize_display = xdpy_resize_display; - xdpy_vt->show_cursor = xdpy_show_cursor; - xdpy_vt->hide_cursor = xdpy_hide_cursor; + + xdpy_vt->create_mouse_cursor = xdpy_create_mouse_cursor; + xdpy_vt->destroy_mouse_cursor = xdpy_destroy_mouse_cursor; + xdpy_vt->set_mouse_cursor = xdpy_set_mouse_cursor; + xdpy_vt->set_system_mouse_cursor = xdpy_set_system_mouse_cursor; + xdpy_vt->show_mouse_cursor = xdpy_show_mouse_cursor; + xdpy_vt->hide_mouse_cursor = xdpy_hide_mouse_cursor; + xdpy_vt->set_icon = xdpy_set_icon; xdpy_vt->set_window_position = xdpy_set_window_position; xdpy_vt->get_window_position = xdpy_get_window_position; @@ -657,3 +838,5 @@ return xdpy_vt; } + +/* vi: set sts=3 sw=3 et: */ Modified: allegro/branches/4.9/src/xglx/xglx.h =================================================================== --- allegro/branches/4.9/src/xglx/xglx.h 2008-08-21 12:43:21 UTC (rev 10450) +++ allegro/branches/4.9/src/xglx/xglx.h 2008-08-21 14:45:30 UTC (rev 10451) @@ -18,6 +18,7 @@ typedef struct ALLEGRO_SYSTEM_XGLX ALLEGRO_SYSTEM_XGLX; typedef struct ALLEGRO_DISPLAY_XGLX ALLEGRO_DISPLAY_XGLX; +typedef struct ALLEGRO_MOUSE_CURSOR_XGLX ALLEGRO_MOUSE_CURSOR_XGLX; /* This is our version of ALLEGRO_SYSTEM with driver specific extra data. */ struct ALLEGRO_SYSTEM_XGLX @@ -72,6 +73,7 @@ /* Cursor for this window. */ Cursor invisible_cursor; + Cursor current_cursor; bool cursor_hidden; /* Icon for this window. */ @@ -81,6 +83,11 @@ int x, y; }; +struct ALLEGRO_MOUSE_CURSOR_XGLX +{ + Cursor cursor; +}; + /* Functions private to the X11 driver. */ /* display */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tr...@us...> - 2008-08-21 20:19:35
|
Revision: 10455 http://alleg.svn.sourceforge.net/alleg/?rev=10455&view=rev Author: trentg Date: 2008-08-21 20:19:35 +0000 (Thu, 21 Aug 2008) Log Message: ----------- Purge unused files Modified Paths: -------------- allegro/branches/4.9/addons/iio/tga.c allegro/branches/4.9/cmake/FileList.cmake allegro/branches/4.9/include/allegro5/color.h allegro/branches/4.9/include/allegro5/inline/fmaths.inl allegro/branches/4.9/src/win/d3d_disp.cpp allegro/branches/4.9/src/win/wmcursor.c allegro/branches/4.9/src/win/wnewwin.c Removed Paths: ------------- allegro/branches/4.9/include/allegro5/3d.h allegro/branches/4.9/include/allegro5/3dmaths.h allegro/branches/4.9/include/allegro5/a4_stream.h allegro/branches/4.9/include/allegro5/compiled.h allegro/branches/4.9/include/allegro5/digi.h allegro/branches/4.9/include/allegro5/graphics.h allegro/branches/4.9/include/allegro5/inline/3dmaths.inl allegro/branches/4.9/include/allegro5/inline/asm.inl allegro/branches/4.9/include/allegro5/inline/draw.inl allegro/branches/4.9/include/allegro5/inline/gfx.inl allegro/branches/4.9/include/allegro5/inline/matrix.inl allegro/branches/4.9/include/allegro5/inline/rle.inl allegro/branches/4.9/include/allegro5/matrix.h allegro/branches/4.9/include/allegro5/palette.h allegro/branches/4.9/include/allegro5/qnxalleg.h allegro/branches/4.9/include/allegro5/quat.h allegro/branches/4.9/src/c/ allegro/branches/4.9/src/dither.c allegro/branches/4.9/src/drvlist.c allegro/branches/4.9/src/i386/ allegro/branches/4.9/src/quat.c allegro/branches/4.9/src/readfont.c allegro/branches/4.9/src/readsmp.c allegro/branches/4.9/src/rle.c allegro/branches/4.9/src/scene3d.c allegro/branches/4.9/src/sound.c allegro/branches/4.9/src/spline.c allegro/branches/4.9/src/stream.c allegro/branches/4.9/src/vtable.c allegro/branches/4.9/src/vtable15.c allegro/branches/4.9/src/vtable16.c allegro/branches/4.9/src/vtable24.c allegro/branches/4.9/src/vtable32.c allegro/branches/4.9/src/vtable8.c Modified: allegro/branches/4.9/addons/iio/tga.c =================================================================== --- allegro/branches/4.9/addons/iio/tga.c 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/addons/iio/tga.c 2008-08-21 20:19:35 UTC (rev 10455) @@ -24,6 +24,7 @@ #include "allegro5/allegro5.h" #include "allegro5/internal/aintern.h" +#include "iio.h" @@ -70,7 +71,7 @@ */ static INLINE int single_tga_read32(PACKFILE *f) { - RGB value; + PalEntry value; int alpha; value.b = pack_getc(f); @@ -128,7 +129,7 @@ */ static INLINE int single_tga_read24(PACKFILE *f) { - RGB value; + PalEntry value; value.b = pack_getc(f); value.g = pack_getc(f); Modified: allegro/branches/4.9/cmake/FileList.cmake =================================================================== --- allegro/branches/4.9/cmake/FileList.cmake 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/cmake/FileList.cmake 2008-08-21 20:19:35 UTC (rev 10455) @@ -4,9 +4,7 @@ src/blenders.c src/convert.c src/display_new.c - src/dither.c src/dtor.c - src/drvlist.c src/events.c src/evtsrc.c src/file.c @@ -332,7 +330,6 @@ include/allegro5/quat.h include/allegro5/rle.h include/allegro5/sound.h - include/allegro5/a4_stream.h include/allegro5/system.h include/allegro5/system_new.h include/allegro5/timer.h Deleted: allegro/branches/4.9/include/allegro5/3d.h =================================================================== --- allegro/branches/4.9/include/allegro5/3d.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/3d.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,104 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * 3D polygon drawing routines. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_3D_H -#define ALLEGRO_3D_H - -#include "allegro5/base.h" -#include "allegro5/fixed.h" - -#ifdef __cplusplus - extern "C" { -#endif - -struct BITMAP; - -typedef struct V3D /* a 3d point (fixed point version) */ -{ - fixed x, y, z; /* position */ - fixed u, v; /* texture map coordinates */ - int c; /* color */ -} V3D; - - -typedef struct V3D_f /* a 3d point (floating point version) */ -{ - float x, y, z; /* position */ - float u, v; /* texture map coordinates */ - int c; /* color */ -} V3D_f; - - -#define POLYTYPE_FLAT 0 -#define POLYTYPE_GCOL 1 -#define POLYTYPE_GRGB 2 -#define POLYTYPE_ATEX 3 -#define POLYTYPE_PTEX 4 -#define POLYTYPE_ATEX_MASK 5 -#define POLYTYPE_PTEX_MASK 6 -#define POLYTYPE_ATEX_LIT 7 -#define POLYTYPE_PTEX_LIT 8 -#define POLYTYPE_ATEX_MASK_LIT 9 -#define POLYTYPE_PTEX_MASK_LIT 10 -#define POLYTYPE_ATEX_TRANS 11 -#define POLYTYPE_PTEX_TRANS 12 -#define POLYTYPE_ATEX_MASK_TRANS 13 -#define POLYTYPE_PTEX_MASK_TRANS 14 -#define POLYTYPE_MAX 15 -#define POLYTYPE_ZBUF 16 - -AL_VAR(float, scene_gap); - -AL_FUNC(void, _soft_polygon3d, (struct BITMAP *bmp, int type, struct BITMAP *texture, int vc, V3D *vtx[])); -AL_FUNC(void, _soft_polygon3d_f, (struct BITMAP *bmp, int type, struct BITMAP *texture, int vc, V3D_f *vtx[])); -AL_FUNC(void, _soft_triangle3d, (struct BITMAP *bmp, int type, struct BITMAP *texture, V3D *v1, V3D *v2, V3D *v3)); -AL_FUNC(void, _soft_triangle3d_f, (struct BITMAP *bmp, int type, struct BITMAP *texture, V3D_f *v1, V3D_f *v2, V3D_f *v3)); -AL_FUNC(void, _soft_quad3d, (struct BITMAP *bmp, int type, struct BITMAP *texture, V3D *v1, V3D *v2, V3D *v3, V3D *v4)); -AL_FUNC(void, _soft_quad3d_f, (struct BITMAP *bmp, int type, struct BITMAP *texture, V3D_f *v1, V3D_f *v2, V3D_f *v3, V3D_f *v4)); -AL_FUNC(int, clip3d, (int type, fixed min_z, fixed max_z, int vc, AL_CONST V3D *vtx[], V3D *vout[], V3D *vtmp[], int out[])); -AL_FUNC(int, clip3d_f, (int type, float min_z, float max_z, int vc, AL_CONST V3D_f *vtx[], V3D_f *vout[], V3D_f *vtmp[], int out[])); - -AL_FUNC(fixed, polygon_z_normal, (AL_CONST V3D *v1, AL_CONST V3D *v2, AL_CONST V3D *v3)); -AL_FUNC(float, polygon_z_normal_f, (AL_CONST V3D_f *v1, AL_CONST V3D_f *v2, AL_CONST V3D_f *v3)); - -/* Note: You are not supposed to mix ZBUFFER with BITMAP even though it is - * currently possible. This is just the internal representation, and it may - * change in the future. - */ -typedef struct BITMAP ZBUFFER; - -AL_FUNC(ZBUFFER *, create_zbuffer, (struct BITMAP *bmp)); -AL_FUNC(ZBUFFER *, create_sub_zbuffer, (ZBUFFER *parent, int x, int y, int width, int height)); -AL_FUNC(void, set_zbuffer, (ZBUFFER *zbuf)); -AL_FUNC(void, clear_zbuffer, (ZBUFFER *zbuf, float z)); -AL_FUNC(void, destroy_zbuffer, (ZBUFFER *zbuf)); - -AL_FUNC(int, create_scene, (int nedge, int npoly)); -AL_FUNC(void, clear_scene, (struct BITMAP* bmp)); -AL_FUNC(void, destroy_scene, (void)); -AL_FUNC(int, scene_polygon3d, (int type, struct BITMAP *texture, int vx, V3D *vtx[])); -AL_FUNC(int, scene_polygon3d_f, (int type, struct BITMAP *texture, int vx, V3D_f *vtx[])); -AL_FUNC(void, render_scene, (void)); - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_3D_H */ - - Deleted: allegro/branches/4.9/include/allegro5/3dmaths.h =================================================================== --- allegro/branches/4.9/include/allegro5/3dmaths.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/3dmaths.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,64 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * 3D oriented math routines. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_3DMATHS_H -#define ALLEGRO_3DMATHS_H - -#include "allegro5/base.h" -#include "allegro5/fixed.h" - -#ifdef __cplusplus - extern "C" { -#endif - -struct QUAT; -struct MATRIX_f; - -AL_FUNC(fixed, vector_length, (fixed x, fixed y, fixed z)); -AL_FUNC(float, vector_length_f, (float x, float y, float z)); - -AL_FUNC(void, normalize_vector, (fixed *x, fixed *y, fixed *z)); -AL_FUNC(void, normalize_vector_f, (float *x, float *y, float *z)); - -AL_FUNC(void, cross_product, (fixed x1, fixed y_1, fixed z1, fixed x2, fixed y2, fixed z2, fixed *xout, fixed *yout, fixed *zout)); -AL_FUNC(void, cross_product_f, (float x1, float y_1, float z1, float x2, float y2, float z2, float *xout, float *yout, float *zout)); - -AL_VAR(fixed, _persp_xscale); -AL_VAR(fixed, _persp_yscale); -AL_VAR(fixed, _persp_xoffset); -AL_VAR(fixed, _persp_yoffset); - -AL_VAR(float, _persp_xscale_f); -AL_VAR(float, _persp_yscale_f); -AL_VAR(float, _persp_xoffset_f); -AL_VAR(float, _persp_yoffset_f); - -AL_FUNC(void, set_projection_viewport, (int x, int y, int w, int h)); - -AL_FUNC(void, quat_to_matrix, (AL_CONST struct QUAT *q, struct MATRIX_f *m)); -AL_FUNC(void, matrix_to_quat, (AL_CONST struct MATRIX_f *m, struct QUAT *q)); - -#ifdef __cplusplus - } -#endif - -#include "allegro5/inline/3dmaths.inl" - -#endif /* ifndef ALLEGRO_3DMATHS_H */ - - Deleted: allegro/branches/4.9/include/allegro5/a4_stream.h =================================================================== --- allegro/branches/4.9/include/allegro5/a4_stream.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/a4_stream.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,52 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Streaming sound routines. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_STREAM_H -#define ALLEGRO_STREAM_H - -#include "allegro5/base.h" - -#ifdef __cplusplus - extern "C" { -#endif - -struct SAMPLE; - -typedef struct AUDIOSTREAM -{ - int voice; /* the voice we are playing on */ - struct SAMPLE *samp; /* the sample we are using */ - int len; /* buffer length */ - int bufcount; /* number of buffers per sample half */ - int bufnum; /* current refill buffer */ - int active; /* which half is currently playing */ - void *locked; /* the locked buffer */ -} AUDIOSTREAM; - -AL_FUNC(AUDIOSTREAM *, play_audio_stream, (int len, int bits, int stereo, int freq, int vol, int pan)); -AL_FUNC(void, stop_audio_stream, (AUDIOSTREAM *stream)); -AL_FUNC(void *, get_audio_stream_buffer, (AUDIOSTREAM *stream)); -AL_FUNC(void, free_audio_stream_buffer, (AUDIOSTREAM *stream)); - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_STREAM_H */ - - Modified: allegro/branches/4.9/include/allegro5/color.h =================================================================== --- allegro/branches/4.9/include/allegro5/color.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/color.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -20,7 +20,6 @@ #define ALLEGRO_COLOR_H #include "allegro5/base.h" -#include "allegro5/palette.h" #ifdef __cplusplus extern "C" { Deleted: allegro/branches/4.9/include/allegro5/compiled.h =================================================================== --- allegro/branches/4.9/include/allegro5/compiled.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/compiled.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,62 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Compiled sprites. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_COMPILED_H -#define ALLEGRO_COMPILED_H - -#include "allegro5/base.h" - -#ifdef __cplusplus - extern "C" { -#endif - -struct BITMAP; - -#if (defined ALLEGRO_I386) && (!defined ALLEGRO_NO_ASM) - -/* compiled sprite structure */ -typedef struct COMPILED_SPRITE -{ - short planar; /* set if it's a planar (mode-X) sprite */ - short color_depth; /* color depth of the image */ - short w, h; /* size of the sprite */ - struct { - void *draw; /* routines to draw the image */ - int len; /* length of the drawing functions */ - } proc[4]; -} COMPILED_SPRITE; - -#else - -/* emulate compiled sprites using RLE on other platforms */ -struct RLE_SPRITE; -typedef struct RLE_SPRITE COMPILED_SPRITE; - -#endif - -AL_FUNC(COMPILED_SPRITE *, get_compiled_sprite, (struct BITMAP *bitmap, int planar)); -AL_FUNC(void, destroy_compiled_sprite, (COMPILED_SPRITE *sprite)); -AL_FUNC(void, draw_compiled_sprite, (struct BITMAP *bmp, AL_CONST COMPILED_SPRITE *sprite, int x, int y)); - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_COMPILED_H */ - - Deleted: allegro/branches/4.9/include/allegro5/digi.h =================================================================== --- allegro/branches/4.9/include/allegro5/digi.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/digi.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,219 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Digital sound routines. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_DIGI_H -#define ALLEGRO_DIGI_H - -#include "allegro5/base.h" - -#ifdef __cplusplus - extern "C" { -#endif - -struct PACKFILE; - - -#define DIGI_VOICES 64 /* Theoretical maximums: */ - /* actual drivers may not be */ - /* able to handle this many */ - -typedef struct SAMPLE /* a sample */ -{ - int bits; /* 8 or 16 */ - int stereo; /* sample type flag */ - int freq; /* sample frequency */ - int priority; /* 0-255 */ - unsigned long len; /* length (in samples) */ - unsigned long loop_start; /* loop start position */ - unsigned long loop_end; /* loop finish position */ - unsigned long param; /* for internal use by the driver */ - void *data; /* sample data */ -} SAMPLE; - - -#define DIGI_AUTODETECT -1 /* for passing to install_sound() */ -#define DIGI_NONE 0 - -typedef struct DIGI_DRIVER /* driver for playing digital sfx */ -{ - int id; /* driver ID code */ - AL_CONST char *name; /* driver name */ - AL_CONST char *desc; /* description string */ - AL_CONST char *ascii_name; /* ASCII format name string */ - int voices; /* available voices */ - int basevoice; /* voice number offset */ - int max_voices; /* maximum voices we can support */ - int def_voices; /* default number of voices to use */ - - /* setup routines */ - AL_METHOD(int, detect, (int input)); - AL_METHOD(int, init, (int input, int voices)); - AL_METHOD(void, exit, (int input)); - AL_METHOD(int, set_mixer_volume, (int volume)); - AL_METHOD(int, get_mixer_volume, (void)); - - /* for use by the audiostream functions */ - AL_METHOD(void *, lock_voice, (int voice, int start, int end)); - AL_METHOD(void, unlock_voice, (int voice)); - AL_METHOD(int, buffer_size, (void)); - - /* voice control functions */ - AL_METHOD(void, init_voice, (int voice, AL_CONST SAMPLE *sample)); - AL_METHOD(void, release_voice, (int voice)); - AL_METHOD(void, start_voice, (int voice)); - AL_METHOD(void, stop_voice, (int voice)); - AL_METHOD(void, loop_voice, (int voice, int playmode)); - - /* position control functions */ - AL_METHOD(int, get_position, (int voice)); - AL_METHOD(void, set_position, (int voice, int position)); - - /* volume control functions */ - AL_METHOD(int, get_volume, (int voice)); - AL_METHOD(void, set_volume, (int voice, int volume)); - AL_METHOD(void, ramp_volume, (int voice, int tyme, int endvol)); - AL_METHOD(void, stop_volume_ramp, (int voice)); - - /* pitch control functions */ - AL_METHOD(int, get_frequency, (int voice)); - AL_METHOD(void, set_frequency, (int voice, int frequency)); - AL_METHOD(void, sweep_frequency, (int voice, int tyme, int endfreq)); - AL_METHOD(void, stop_frequency_sweep, (int voice)); - - /* pan control functions */ - AL_METHOD(int, get_pan, (int voice)); - AL_METHOD(void, set_pan, (int voice, int pan)); - AL_METHOD(void, sweep_pan, (int voice, int tyme, int endpan)); - AL_METHOD(void, stop_pan_sweep, (int voice)); - - /* effect control functions */ - AL_METHOD(void, set_echo, (int voice, int strength, int delay)); - AL_METHOD(void, set_tremolo, (int voice, int rate, int depth)); - AL_METHOD(void, set_vibrato, (int voice, int rate, int depth)); - - /* input functions */ - int rec_cap_bits; - int rec_cap_stereo; - AL_METHOD(int, rec_cap_rate, (int bits, int stereo)); - AL_METHOD(int, rec_cap_parm, (int rate, int bits, int stereo)); - AL_METHOD(int, rec_source, (int source)); - AL_METHOD(int, rec_start, (int rate, int bits, int stereo)); - AL_METHOD(void, rec_stop, (void)); - AL_METHOD(int, rec_read, (void *buf)); -} DIGI_DRIVER; - -AL_ARRAY(_DRIVER_INFO, _digi_driver_list); - -/* macros for constructing the driver lists */ -#define BEGIN_DIGI_DRIVER_LIST \ - _DRIVER_INFO _digi_driver_list[] = \ - { - -#define END_DIGI_DRIVER_LIST \ - { 0, NULL, 0 } \ - }; - -AL_VAR(DIGI_DRIVER *, digi_driver); - -AL_VAR(DIGI_DRIVER *, digi_input_driver); - -AL_VAR(int, digi_card); - -AL_VAR(int, digi_input_card); - -AL_FUNC(int, detect_digi_driver, (int driver_id)); - - -AL_FUNC(SAMPLE *, load_sample, (AL_CONST char *filename)); -AL_FUNC(SAMPLE *, load_wav, (AL_CONST char *filename)); -AL_FUNC(SAMPLE *, load_wav_pf, (struct PACKFILE *f)); -AL_FUNC(SAMPLE *, load_voc, (AL_CONST char *filename)); -AL_FUNC(SAMPLE *, load_voc_pf, (struct PACKFILE *f)); -AL_FUNC(int, save_sample, (AL_CONST char *filename, SAMPLE *spl)); -AL_FUNC(SAMPLE *, create_sample, (int bits, int stereo, int freq, int len)); -AL_FUNC(void, destroy_sample, (SAMPLE *spl)); - -AL_FUNC(int, play_sample, (AL_CONST SAMPLE *spl, int vol, int pan, int freq, int loop)); -AL_FUNC(void, stop_sample, (AL_CONST SAMPLE *spl)); -AL_FUNC(void, adjust_sample, (AL_CONST SAMPLE *spl, int vol, int pan, int freq, int loop)); - -AL_FUNC(int, allocate_voice, (AL_CONST SAMPLE *spl)); -AL_FUNC(void, deallocate_voice, (int voice)); -AL_FUNC(void, reallocate_voice, (int voice, AL_CONST SAMPLE *spl)); -AL_FUNC(void, release_voice, (int voice)); -AL_FUNC(void, voice_start, (int voice)); -AL_FUNC(void, voice_stop, (int voice)); -AL_FUNC(void, voice_set_priority, (int voice, int priority)); -AL_FUNC(SAMPLE *, voice_check, (int voice)); - -#define PLAYMODE_PLAY 0 -#define PLAYMODE_LOOP 1 -#define PLAYMODE_FORWARD 0 -#define PLAYMODE_BACKWARD 2 -#define PLAYMODE_BIDIR 4 - -AL_FUNC(void, voice_set_playmode, (int voice, int playmode)); - -AL_FUNC(int, voice_get_position, (int voice)); -AL_FUNC(void, voice_set_position, (int voice, int position)); - -AL_FUNC(int, voice_get_volume, (int voice)); -AL_FUNC(void, voice_set_volume, (int voice, int volume)); -AL_FUNC(void, voice_ramp_volume, (int voice, int tyme, int endvol)); -AL_FUNC(void, voice_stop_volumeramp, (int voice)); - -AL_FUNC(int, voice_get_frequency, (int voice)); -AL_FUNC(void, voice_set_frequency, (int voice, int frequency)); -AL_FUNC(void, voice_sweep_frequency, (int voice, int tyme, int endfreq)); -AL_FUNC(void, voice_stop_frequency_sweep, (int voice)); - -AL_FUNC(int, voice_get_pan, (int voice)); -AL_FUNC(void, voice_set_pan, (int voice, int pan)); -AL_FUNC(void, voice_sweep_pan, (int voice, int tyme, int endpan)); -AL_FUNC(void, voice_stop_pan_sweep, (int voice)); - -AL_FUNC(void, voice_set_echo, (int voice, int strength, int delay)); -AL_FUNC(void, voice_set_tremolo, (int voice, int rate, int depth)); -AL_FUNC(void, voice_set_vibrato, (int voice, int rate, int depth)); - -#define SOUND_INPUT_MIC 1 -#define SOUND_INPUT_LINE 2 -#define SOUND_INPUT_CD 3 - -AL_FUNC(int, get_sound_input_cap_bits, (void)); -AL_FUNC(int, get_sound_input_cap_stereo, (void)); -AL_FUNC(int, get_sound_input_cap_rate, (int bits, int stereo)); -AL_FUNC(int, get_sound_input_cap_parm, (int rate, int bits, int stereo)); -AL_FUNC(int, set_sound_input_source, (int source)); -AL_FUNC(int, start_sound_input, (int rate, int bits, int stereo)); -AL_FUNC(void, stop_sound_input, (void)); -AL_FUNC(int, read_sound_input, (void *buffer)); - -AL_FUNCPTR(void, digi_recorder, (void)); - -AL_FUNC(void, lock_sample, (struct SAMPLE *spl)); - -AL_FUNC(void, register_sample_file_type, (AL_CONST char *ext, AL_METHOD(struct SAMPLE *, load, (AL_CONST char *filename)), AL_METHOD(int, save, (AL_CONST char *filename, struct SAMPLE *spl)))); - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_DIGI_H */ - - Deleted: allegro/branches/4.9/include/allegro5/graphics.h =================================================================== --- allegro/branches/4.9/include/allegro5/graphics.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/graphics.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,33 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Container for all graphics related routines. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_GRAPHICS_H -#define ALLEGRO_GRAPHICS_H - -#include "allegro5/base.h" -#include "allegro5/gfx.h" -#include "allegro5/text.h" -#include "allegro5/3d.h" -#include "allegro5/draw.h" -#include "allegro5/color.h" -#include "allegro5/palette.h" -#include "allegro5/rle.h" -#include "allegro5/compiled.h" - -#endif /* ifndef ALLEGRO_GRAPHICS_H */ - Deleted: allegro/branches/4.9/include/allegro5/inline/3dmaths.inl =================================================================== --- allegro/branches/4.9/include/allegro5/inline/3dmaths.inl 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/inline/3dmaths.inl 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,60 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * 3D maths inline functions (generic C). - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_3DMATHS_INL -#define ALLEGRO_3DMATHS_INL - -#ifdef __cplusplus - extern "C" { -#endif - - -AL_INLINE(fixed, dot_product, (fixed x1, fixed y_1, fixed z1, fixed x2, fixed y2, fixed z2), -{ - return fixmul(x1, x2) + fixmul(y_1, y2) + fixmul(z1, z2); -}) - - -AL_INLINE(float, dot_product_f, (float x1, float y_1, float z1, float x2, float y2, float z2), -{ - return (x1 * x2) + (y_1 * y2) + (z1 * z2); -}) - - -AL_INLINE(void, persp_project, (fixed x, fixed y, fixed z, fixed *xout, fixed *yout), -{ - *xout = fixmul(fixdiv(x, z), _persp_xscale) + _persp_xoffset; - *yout = fixmul(fixdiv(y, z), _persp_yscale) + _persp_yoffset; -}) - - -AL_INLINE(void, persp_project_f, (float x, float y, float z, float *xout, float *yout), -{ - float z1 = 1.0f / z; - *xout = ((x * z1) * _persp_xscale_f) + _persp_xoffset_f; - *yout = ((y * z1) * _persp_yscale_f) + _persp_yoffset_f; -}) - - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_3DMATHS_INL */ - - Deleted: allegro/branches/4.9/include/allegro5/inline/asm.inl =================================================================== --- allegro/branches/4.9/include/allegro5/inline/asm.inl 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/inline/asm.inl 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,59 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Imports asm definitions of various inline functions. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - -#ifdef __cplusplus - extern "C" { -#endif - - -#ifndef ALLEGRO_NO_ASM - -#if (defined ALLEGRO_GCC) && (defined ALLEGRO_I386) - - /* use i386 asm, GCC syntax */ - #include "allegro5/platform/al386gcc.h" - -#elif (defined ALLEGRO_MSVC) && (defined ALLEGRO_I386) - - /* use i386 asm, MSVC syntax */ - #include "allegro5/platform/al386vc.h" - -#elif (defined ALLEGRO_WATCOM) && (defined ALLEGRO_I386) - - /* use i386 asm, Watcom syntax */ - #include "allegro5/platform/al386wat.h" - -#else - - /* asm not supported */ - #define ALLEGRO_NO_ASM - -#endif - -#endif - -/* Define ALLEGRO_USE_C for backwards compatibility. It should not be used - * anywhere else in the sources for now. - */ -#ifdef ALLEGRO_NO_ASM -#define ALLEGRO_USE_C -#endif - -#ifdef __cplusplus - } -#endif - Deleted: allegro/branches/4.9/include/allegro5/inline/draw.inl =================================================================== --- allegro/branches/4.9/include/allegro5/inline/draw.inl 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/inline/draw.inl 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,544 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Draw inline functions (generic C). - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_DRAW_INL -#define ALLEGRO_DRAW_INL - -#include "allegro5/debug.h" -#include "allegro5/3d.h" -#include "allegro5/inline/gfx.inl" -#include "allegro5/fmaths.h" - -#ifdef __cplusplus - extern "C" { -#endif - -AL_INLINE(int, getpixel, (BITMAP *bmp, int x, int y), -{ - ASSERT(bmp); - - return bmp->vtable->getpixel(bmp, x, y); -}) - - -AL_INLINE(void, putpixel, (BITMAP *bmp, int x, int y, int color), -{ - ASSERT(bmp); - - bmp->vtable->putpixel(bmp, x, y, color); -}) - - -AL_INLINE(void, _allegro_vline, (BITMAP *bmp, int x, int y_1, int y2, int color), -{ - ASSERT(bmp); - - bmp->vtable->vline(bmp, x, y_1, y2, color); -}) - - -AL_INLINE(void, _allegro_hline, (BITMAP *bmp, int x1, int y, int x2, int color), -{ - ASSERT(bmp); - - bmp->vtable->hline(bmp, x1, y, x2, color); -}) - - -/* The curses API also contains functions called vline and hline so we have - * called our functions _allegro_vline and _allegro_hline. User programs - * should use the vline/hline aliases as they are the official names. - */ -#ifndef ALLEGRO_NO_VHLINE_ALIAS - AL_ALIAS_VOID_RET(vline(BITMAP *bmp, int x, int y_1, int y2, int color), _allegro_vline(bmp, x, y_1, y2, color)) - AL_ALIAS_VOID_RET(hline(BITMAP *bmp, int x1, int y, int x2, int color), _allegro_hline(bmp, x1, y, x2, color)) -#endif - - -AL_INLINE(void, line, (BITMAP *bmp, int x1, int y_1, int x2, int y2, int color), -{ - ASSERT(bmp); - - bmp->vtable->line(bmp, x1, y_1, x2, y2, color); -}) - - -AL_INLINE(void, fastline, (BITMAP *bmp, int x1, int y_1, int x2, int y2, int color), -{ - ASSERT(bmp); - - bmp->vtable->fastline(bmp, x1, y_1, x2, y2, color); -}) - - -AL_INLINE(void, rectfill, (BITMAP *bmp, int x1, int y_1, int x2, int y2, int color), -{ - ASSERT(bmp); - - bmp->vtable->rectfill(bmp, x1, y_1, x2, y2, color); -}) - - -AL_INLINE(void, triangle, (BITMAP *bmp, int x1, int y_1, int x2, int y2, int x3, int y3, int color), -{ - ASSERT(bmp); - - bmp->vtable->triangle(bmp, x1, y_1, x2, y2, x3, y3, color); -}) - - -AL_INLINE(void, polygon, (BITMAP *bmp, int vertices, AL_CONST int *points, int color), -{ - ASSERT(bmp); - - bmp->vtable->polygon(bmp, vertices, points, color); -}) - - -AL_INLINE(void, rect, (BITMAP *bmp, int x1, int y_1, int x2, int y2, int color), -{ - ASSERT(bmp); - - bmp->vtable->rect(bmp, x1, y_1, x2, y2, color); -}) - - -AL_INLINE(void, circle, (BITMAP *bmp, int x, int y, int radius, int color), -{ - ASSERT(bmp); - - bmp->vtable->circle(bmp, x, y, radius, color); -}) - - -AL_INLINE(void, circlefill, (BITMAP *bmp, int x, int y, int radius, int color), -{ - ASSERT(bmp); - - bmp->vtable->circlefill(bmp, x, y, radius, color); -}) - - - -AL_INLINE(void, ellipse, (BITMAP *bmp, int x, int y, int rx, int ry, int color), -{ - ASSERT(bmp); - - bmp->vtable->ellipse(bmp, x, y, rx, ry, color); -}) - - - -AL_INLINE(void, ellipsefill, (BITMAP *bmp, int x, int y, int rx, int ry, int color), -{ - ASSERT(bmp); - - bmp->vtable->ellipsefill(bmp, x, y, rx, ry, color); -}) - - - -AL_INLINE(void, arc, (BITMAP *bmp, int x, int y, fixed ang1, fixed ang2, int r, int color), -{ - ASSERT(bmp); - - bmp->vtable->arc(bmp, x, y, ang1, ang2, r, color); -}) - - - -AL_INLINE(void, spline, (BITMAP *bmp, AL_CONST int points[8], int color), -{ - ASSERT(bmp); - - bmp->vtable->spline(bmp, points, color); -}) - - - -AL_INLINE(void, floodfill, (BITMAP *bmp, int x, int y, int color), -{ - ASSERT(bmp); - - bmp->vtable->floodfill(bmp, x, y, color); -}) - - - -AL_INLINE(void, polygon3d, (BITMAP *bmp, int type, BITMAP *texture, int vc, V3D *vtx[]), -{ - ASSERT(bmp); - - bmp->vtable->polygon3d(bmp, type, texture, vc, vtx); -}) - - - -AL_INLINE(void, polygon3d_f, (BITMAP *bmp, int type, BITMAP *texture, int vc, V3D_f *vtx[]), -{ - ASSERT(bmp); - - bmp->vtable->polygon3d_f(bmp, type, texture, vc, vtx); -}) - - - -AL_INLINE(void, triangle3d, (BITMAP *bmp, int type, BITMAP *texture, V3D *v1, V3D *v2, V3D *v3), -{ - ASSERT(bmp); - - bmp->vtable->triangle3d(bmp, type, texture, v1, v2, v3); -}) - - - -AL_INLINE(void, triangle3d_f, (BITMAP *bmp, int type, BITMAP *texture, V3D_f *v1, V3D_f *v2, V3D_f *v3), -{ - ASSERT(bmp); - - bmp->vtable->triangle3d_f(bmp, type, texture, v1, v2, v3); -}) - - - -AL_INLINE(void, quad3d, (BITMAP *bmp, int type, BITMAP *texture, V3D *v1, V3D *v2, V3D *v3, V3D *v4), -{ - ASSERT(bmp); - - bmp->vtable->quad3d(bmp, type, texture, v1, v2, v3, v4); -}) - - - -AL_INLINE(void, quad3d_f, (BITMAP *bmp, int type, BITMAP *texture, V3D_f *v1, V3D_f *v2, V3D_f *v3, V3D_f *v4), -{ - ASSERT(bmp); - - bmp->vtable->quad3d_f(bmp, type, texture, v1, v2, v3, v4); -}) - - - - - -AL_INLINE(void, draw_sprite, (BITMAP *bmp, BITMAP *sprite, int x, int y), -{ - ASSERT(bmp); - ASSERT(sprite); - - if (sprite->vtable->color_depth == 8) { - bmp->vtable->draw_256_sprite(bmp, sprite, x, y); - } - else { - ASSERT(bmp->vtable->color_depth == sprite->vtable->color_depth); - bmp->vtable->draw_sprite(bmp, sprite, x, y); - } -}) - - -AL_INLINE(void, draw_sprite_v_flip, (BITMAP *bmp, BITMAP *sprite, int x, int y),{ - ASSERT(bmp); - ASSERT(sprite); - ASSERT(bmp->vtable->color_depth == sprite->vtable->color_depth); - - bmp->vtable->draw_sprite_v_flip(bmp, sprite, x, y); -}) - - -AL_INLINE(void, draw_sprite_h_flip, (BITMAP *bmp, BITMAP *sprite, int x, int y),{ - ASSERT(bmp); - ASSERT(sprite); - ASSERT(bmp->vtable->color_depth == sprite->vtable->color_depth); - - bmp->vtable->draw_sprite_h_flip(bmp, sprite, x, y); -}) - - -AL_INLINE(void, draw_sprite_vh_flip, (BITMAP *bmp, BITMAP *sprite, int x, int y), -{ - ASSERT(bmp); - ASSERT(sprite); - ASSERT(bmp->vtable->color_depth == sprite->vtable->color_depth); - - bmp->vtable->draw_sprite_vh_flip(bmp, sprite, x, y); -}) - - -AL_INLINE(void, draw_trans_sprite, (BITMAP *bmp, BITMAP *sprite, int x, int y), -{ - ASSERT(bmp); - ASSERT(sprite); - - if (sprite->vtable->color_depth == 32) { - ASSERT(bmp->vtable->draw_trans_rgba_sprite); - bmp->vtable->draw_trans_rgba_sprite(bmp, sprite, x, y); - } - else { - ASSERT((bmp->vtable->color_depth == sprite->vtable->color_depth) || - ((bmp->vtable->color_depth == 32) && - (sprite->vtable->color_depth == 8))); - bmp->vtable->draw_trans_sprite(bmp, sprite, x, y); - } -}) - - -AL_INLINE(void, draw_lit_sprite, (BITMAP *bmp, BITMAP *sprite, int x, int y, int color), -{ - ASSERT(bmp); - ASSERT(sprite); - ASSERT(bmp->vtable->color_depth == sprite->vtable->color_depth); - - bmp->vtable->draw_lit_sprite(bmp, sprite, x, y, color); -}) - - -AL_INLINE(void, draw_gouraud_sprite, (BITMAP *bmp, BITMAP *sprite, int x, int y, int c1, int c2, int c3, int c4), -{ - ASSERT(bmp); - ASSERT(sprite); - ASSERT(bmp->vtable->color_depth == sprite->vtable->color_depth); - - bmp->vtable->draw_gouraud_sprite(bmp, sprite, x, y, c1, c2, c3, c4); -}) - - -AL_INLINE(void, draw_character_ex, (BITMAP *bmp, BITMAP *sprite, int x, int y, int color, int bg), -{ - ASSERT(bmp); - ASSERT(sprite); - ASSERT(sprite->vtable->color_depth == 8); - - bmp->vtable->draw_character(bmp, sprite, x, y, color, bg); -}) - - -AL_INLINE(void, rotate_sprite, (BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle), -{ - ASSERT(bmp); - ASSERT(sprite); - - bmp->vtable->pivot_scaled_sprite_flip(bmp, sprite, (x<<16) + (sprite->w * 0x10000) / 2, - (y<<16) + (sprite->h * 0x10000) / 2, - sprite->w << 15, sprite->h << 15, - angle, 0x10000, FALSE); -}) - - -AL_INLINE(void, rotate_sprite_v_flip, (BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle), -{ - ASSERT(bmp); - ASSERT(sprite); - - bmp->vtable->pivot_scaled_sprite_flip(bmp, sprite, (x<<16) + (sprite->w * 0x10000) / 2, - (y<<16) + (sprite->h * 0x10000) / 2, - sprite->w << 15, sprite->h << 15, - angle, 0x10000, TRUE); -}) - - -AL_INLINE(void, rotate_scaled_sprite, (BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle, fixed scale), -{ - ASSERT(bmp); - ASSERT(sprite); - - bmp->vtable->pivot_scaled_sprite_flip(bmp, sprite, (x<<16) + (sprite->w * scale) / 2, - (y<<16) + (sprite->h * scale) / 2, - sprite->w << 15, sprite->h << 15, - angle, scale, FALSE); -}) - - -AL_INLINE(void, rotate_scaled_sprite_v_flip, (BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle, fixed scale), -{ - ASSERT(bmp); - ASSERT(sprite); - - bmp->vtable->pivot_scaled_sprite_flip(bmp, sprite, (x<<16) + (sprite->w * scale) / 2, - (y<<16) + (sprite->h * scale) / 2, - sprite->w << 15, sprite->h << 15, - angle, scale, TRUE); -}) - - -AL_INLINE(void, pivot_sprite, (BITMAP *bmp, BITMAP *sprite, int x, int y, int cx, int cy, fixed angle), -{ - ASSERT(bmp); - ASSERT(sprite); - - bmp->vtable->pivot_scaled_sprite_flip(bmp, sprite, x<<16, y<<16, cx<<16, cy<<16, angle, 0x10000, FALSE); -}) - - -AL_INLINE(void, pivot_sprite_v_flip, (BITMAP *bmp, BITMAP *sprite, int x, int y, int cx, int cy, fixed angle), -{ - ASSERT(bmp); - ASSERT(sprite); - - bmp->vtable->pivot_scaled_sprite_flip(bmp, sprite, x<<16, y<<16, cx<<16, cy<<16, angle, 0x10000, TRUE); -}) - - -AL_INLINE(void, pivot_scaled_sprite, (BITMAP *bmp, BITMAP *sprite, int x, int y, int cx, int cy, fixed angle, fixed scale), -{ - ASSERT(bmp); - ASSERT(sprite); - - bmp->vtable->pivot_scaled_sprite_flip(bmp, sprite, x<<16, y<<16, cx<<16, cy<<16, angle, scale, FALSE); -}) - - -AL_INLINE(void, pivot_scaled_sprite_v_flip, (BITMAP *bmp, BITMAP *sprite, int x, int y, int cx, int cy, fixed angle, fixed scale), -{ - ASSERT(bmp); - ASSERT(sprite); - - bmp->vtable->pivot_scaled_sprite_flip(bmp, sprite, x<<16, y<<16, cx<<16, cy<<16, angle, scale, TRUE); -}) - - -AL_INLINE(void, _putpixel, (BITMAP *bmp, int x, int y, int color), -{ - uintptr_t addr; - - bmp_select(bmp); - addr = bmp_write_line(bmp, y); - bmp_write8(addr+x, color); - bmp_unwrite_line(bmp); -}) - - -AL_INLINE(int, _getpixel, (BITMAP *bmp, int x, int y), -{ - uintptr_t addr; - int c; - - bmp_select(bmp); - addr = bmp_read_line(bmp, y); - c = bmp_read8(addr+x); - bmp_unwrite_line(bmp); - - return c; -}) - - -AL_INLINE(void, _putpixel15, (BITMAP *bmp, int x, int y, int color), -{ - uintptr_t addr; - - bmp_select(bmp); - addr = bmp_write_line(bmp, y); - bmp_write15(addr+x*sizeof(short), color); - bmp_unwrite_line(bmp); -}) - - -AL_INLINE(int, _getpixel15, (BITMAP *bmp, int x, int y), -{ - uintptr_t addr; - int c; - - bmp_select(bmp); - addr = bmp_read_line(bmp, y); - c = bmp_read15(addr+x*sizeof(short)); - bmp_unwrite_line(bmp); - - return c; -}) - - -AL_INLINE(void, _putpixel16, (BITMAP *bmp, int x, int y, int color), -{ - uintptr_t addr; - - bmp_select(bmp); - addr = bmp_write_line(bmp, y); - bmp_write16(addr+x*sizeof(short), color); - bmp_unwrite_line(bmp); -}) - - -AL_INLINE(int, _getpixel16, (BITMAP *bmp, int x, int y), -{ - uintptr_t addr; - int c; - - bmp_select(bmp); - addr = bmp_read_line(bmp, y); - c = bmp_read16(addr+x*sizeof(short)); - bmp_unwrite_line(bmp); - - return c; -}) - - -AL_INLINE(void, _putpixel24, (BITMAP *bmp, int x, int y, int color), -{ - uintptr_t addr; - - bmp_select(bmp); - addr = bmp_write_line(bmp, y); - bmp_write24(addr+x*3, color); - bmp_unwrite_line(bmp); -}) - - -AL_INLINE(int, _getpixel24, (BITMAP *bmp, int x, int y), -{ - uintptr_t addr; - int c; - - bmp_select(bmp); - addr = bmp_read_line(bmp, y); - c = bmp_read24(addr+x*3); - bmp_unwrite_line(bmp); - - return c; -}) - - -AL_INLINE(void, _putpixel32, (BITMAP *bmp, int x, int y, int color), -{ - uintptr_t addr; - - bmp_select(bmp); - addr = bmp_write_line(bmp, y); - bmp_write32(addr+x*sizeof(int32_t), color); - bmp_unwrite_line(bmp); -}) - - -AL_INLINE(int, _getpixel32, (BITMAP *bmp, int x, int y), -{ - uintptr_t addr; - int c; - - bmp_select(bmp); - addr = bmp_read_line(bmp, y); - c = bmp_read32(addr+x*sizeof(int32_t)); - bmp_unwrite_line(bmp); - - return c; -}) - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_DRAW_INL */ - - Modified: allegro/branches/4.9/include/allegro5/inline/fmaths.inl =================================================================== --- allegro/branches/4.9/include/allegro5/inline/fmaths.inl 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/inline/fmaths.inl 2008-08-21 20:19:35 UTC (rev 10455) @@ -19,10 +19,6 @@ #ifndef ALLEGRO_FMATHS_INL #define ALLEGRO_FMATHS_INL -#define ALLEGRO_IMPORT_MATH_ASM -#include "allegro5/inline/asm.inl" -#undef ALLEGRO_IMPORT_MATH_ASM - #ifdef __cplusplus extern "C" { #endif Deleted: allegro/branches/4.9/include/allegro5/inline/gfx.inl =================================================================== --- allegro/branches/4.9/include/allegro5/inline/gfx.inl 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/inline/gfx.inl 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,327 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Graphics inline functions (generic C). - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_GFX_INL -#define ALLEGRO_GFX_INL - -#include "allegro5/debug.h" - -#define ALLEGRO_IMPORT_GFX_ASM -#include "allegro5/inline/asm.inl" -#undef ALLEGRO_IMPORT_GFX_ASM - -#include "allegro5/internal/aintern_display.h" - - -#define _AL_UPDATE_DIRTY_REGION(bmp, x, y, w, h) \ - if (bmp->dirty_x1 < 0) { \ - bmp->dirty_x1 = x; \ - bmp->dirty_y1 = y; \ - bmp->dirty_x2 = x+w; \ - bmp->dirty_y2 = y+h; \ - } \ - else { \ - if (x < bmp->dirty_x1) \ - bmp->dirty_x1 = x; \ - if (x+w > bmp->dirty_x2) \ - bmp->dirty_x2 = x+w; \ - if (y < bmp->dirty_y1) \ - bmp->dirty_y1 = y; \ - if (y+h > bmp->dirty_y2) \ - bmp->dirty_y2 = y+h; \ - } - - -#ifdef __cplusplus - extern "C" { -#endif - - -#ifdef ALLEGRO_NO_ASM - - /* use generic C versions */ - -AL_INLINE(int, _default_ds, (void), -{ - return 0; -}) - -#ifdef ALLEGRO_BCC32 - - /* BCC32 is a somewhat unusual platform because it mixes a MSVC/MinGW generated DLL - * (for which ALLEGRO_NO_ASM is not defined) with Borland C++ compiled programs for - * which ALLEGRO_NO_ASM is defined. As a result, Borland C++ compiled programs can't - * use the inlined version of bmp_write_line(), bmp_read_line() and bmp_unwrite_line() - * because the write_bank() and read_bank() methods of the BITMAP class don't expect - * the same calling convention on both sides. - */ - -AL_FUNC(uintptr_t, bmp_write_line, (BITMAP *bmp, int lyne)); -AL_FUNC(uintptr_t, bmp_read_line, (BITMAP *bmp, int lyne)); -AL_FUNC(void, bmp_unwrite_line, (BITMAP *bmp)); - -#else - -typedef AL_METHOD(uintptr_t, _BMP_BANK_SWITCHER, (BITMAP *bmp, int lyne)); -typedef AL_METHOD(void, _BMP_UNBANK_SWITCHER, (BITMAP *bmp)); - - -AL_INLINE(uintptr_t, bmp_write_line, (BITMAP *bmp, int lyne), -{ - _BMP_BANK_SWITCHER switcher = (_BMP_BANK_SWITCHER)bmp->write_bank; - _AL_UPDATE_DIRTY_REGION(bmp, 0, lyne, bmp->w, 1); - return switcher(bmp, lyne); -}) - - -AL_INLINE(uintptr_t, bmp_read_line, (BITMAP *bmp, int lyne), -{ - _BMP_BANK_SWITCHER switcher = (_BMP_BANK_SWITCHER)bmp->read_bank; - return switcher(bmp, lyne); -}) - - -AL_INLINE(void, bmp_unwrite_line, (BITMAP *bmp), -{ - _BMP_UNBANK_SWITCHER switcher = (_BMP_UNBANK_SWITCHER)bmp->vtable->unwrite_bank; - switcher(bmp); - - if (bmp->needs_upload && !bmp->acquired) { - bmp->display->vt->upload_compat_screen(bmp, - bmp->dirty_x1, bmp->dirty_y1, - bmp->dirty_x2-bmp->dirty_x1, - bmp->dirty_y2-bmp->dirty_y1); - bmp->dirty_x1 = bmp->dirty_x2 = bmp->dirty_y1 = bmp->dirty_y2 = -1; - } -}) - -#endif /* defined ALLEGRO_BCC32 */ - -#endif /* C vs. inline asm */ - - -AL_INLINE(int, is_windowed_mode, (void), -{ - ASSERT (gfx_driver); - - return gfx_driver->windowed; -}) - - - -AL_INLINE(void, clear_to_color, (BITMAP *bitmap, int color), -{ - ASSERT(bitmap); - - bitmap->vtable->clear_to_color(bitmap, color); -}) - - -AL_INLINE(int, bitmap_color_depth, (BITMAP *bmp), -{ - ASSERT(bmp); - - return bmp->vtable->color_depth; -}) - - -AL_INLINE(int, bitmap_mask_color, (BITMAP *bmp), -{ - ASSERT(bmp); - - return bmp->vtable->mask_color; -}) - - -AL_INLINE(int, is_same_bitmap, (BITMAP *bmp1, BITMAP *bmp2), -{ - unsigned long m1; - unsigned long m2; - - if ((!bmp1) || (!bmp2)) - return FALSE; - - if (bmp1 == bmp2) - return TRUE; - - m1 = bmp1->id & BMP_ID_MASK; - m2 = bmp2->id & BMP_ID_MASK; - - return ((m1) && (m1 == m2)); -}) - - -AL_INLINE(int, is_linear_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - return (bmp->id & BMP_ID_PLANAR) == 0; -}) - - -AL_INLINE(int, is_planar_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - return (bmp->id & BMP_ID_PLANAR) != 0; -}) - - -AL_INLINE(int, is_memory_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - return (bmp->id & (BMP_ID_VIDEO | BMP_ID_SYSTEM)) == 0; -}) - - -AL_INLINE(int, is_screen_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - return is_same_bitmap(bmp, screen); -}) - - -AL_INLINE(int, is_video_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - return (bmp->id & BMP_ID_VIDEO) != 0; -}) - - -AL_INLINE(int, is_system_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - return (bmp->id & BMP_ID_SYSTEM) != 0; -}) - - -AL_INLINE(int, is_sub_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - return (bmp->id & BMP_ID_SUB) != 0; -}) - - -#ifdef ALLEGRO_MPW - - #define acquire_bitmap(bmp) - #define release_bitmap(bmp) - #define acquire_screen() - #define release_screen() - -#else - -AL_INLINE(void, acquire_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - if (bmp->vtable->acquire) - bmp->vtable->acquire(bmp); -}) - - -AL_INLINE(void, release_bitmap, (BITMAP *bmp), -{ - ASSERT(bmp); - - if (bmp->vtable->release) - bmp->vtable->release(bmp); -}) - - -AL_INLINE(void, acquire_screen, (void), -{ - acquire_bitmap(screen); - - if (screen->needs_upload) { - screen->acquired = true; - } -}) - - -AL_INLINE(void, release_screen, (void), -{ - release_bitmap(screen); - - if (screen->needs_upload && screen->acquired) { - screen->acquired = false; - screen->display->vt->upload_compat_screen(screen, - screen->dirty_x1, screen->dirty_y1, - screen->dirty_x2-screen->dirty_x1, screen->dirty_y2-screen->dirty_y1); - screen->dirty_x1 = screen->dirty_x2 = screen->dirty_y1 = screen->dirty_y2 = -1; - } -}) - -#endif - - -AL_INLINE(int, is_inside_bitmap, (BITMAP *bmp, int x, int y, int clip), -{ - ASSERT(bmp); - - if (clip) { - if (bmp->clip) - /* internal clipping is inclusive-exclusive */ - return (x >= bmp->cl) && (y >= bmp->ct) && (x < bmp->cr) && (y < bmp->cb); - else - return TRUE; - } - else - /* bitmap dimensions are always non-negative */ - return (unsigned int)x < (unsigned int)bmp->w && (unsigned int)y < (unsigned int)bmp->h; -}) - - -AL_INLINE(void, get_clip_rect, (BITMAP *bitmap, int *x1, int *y_1, int *x2, int *y2), -{ - ASSERT(bitmap); - - /* internal clipping is inclusive-exclusive */ - *x1 = bitmap->cl; - *y_1 = bitmap->ct; - *x2 = bitmap->cr-1; - *y2 = bitmap->cb-1; -}) - -AL_INLINE(void, set_clip_state, (BITMAP *bitmap, int state), -{ - ASSERT(bitmap); - - bitmap->clip = state; -}) - -AL_INLINE(int, get_clip_state, (BITMAP *bitmap), -{ - ASSERT(bitmap); - - return bitmap->clip; -}) - - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_GFX_INL */ - - Deleted: allegro/branches/4.9/include/allegro5/inline/matrix.inl =================================================================== --- allegro/branches/4.9/include/allegro5/inline/matrix.inl 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/inline/matrix.inl 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,48 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Matrix math inline functions (generic C). - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_MATRIX_INL -#define ALLEGRO_MATRIX_INL - -#ifdef __cplusplus - extern "C" { -#endif - - -#define CALC_ROW(n) (fixmul(x, m->v[n][0]) + \ - fixmul(y, m->v[n][1]) + \ - fixmul(z, m->v[n][2]) + \ - m->t[n]) - -AL_INLINE(void, apply_matrix, (MATRIX *m, fixed x, fixed y, fixed z, fixed *xout, fixed *yout, fixed *zout), -{ - *xout = CALC_ROW(0); - *yout = CALC_ROW(1); - *zout = CALC_ROW(2); -}) - -#undef CALC_ROW - - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_MATRIX_INL */ - - Deleted: allegro/branches/4.9/include/allegro5/inline/rle.inl =================================================================== --- allegro/branches/4.9/include/allegro5/inline/rle.inl 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/inline/rle.inl 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,70 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * RLE sprite inline functions (generic C). - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_RLE_INL -#define ALLEGRO_RLE_INL - -#include "allegro5/debug.h" - -#ifdef __cplusplus - extern "C" { -#endif - - -AL_INLINE(void, draw_rle_sprite, (struct BITMAP *bmp, AL_CONST struct RLE_SPRITE *sprite, int x, int y), -{ - ASSERT(bmp); - ASSERT(sprite); - ASSERT(bmp->vtable->color_depth == sprite->color_depth); - - bmp->vtable->draw_rle_sprite(bmp, sprite, x, y); -}) - - -AL_INLINE(void, draw_trans_rle_sprite, (struct BITMAP *bmp, AL_CONST struct RLE_SPRITE *sprite, int x, int y), -{ - ASSERT(bmp); - ASSERT(sprite); - - if (sprite->color_depth == 32) { - ASSERT(bmp->vtable->draw_trans_rgba_rle_sprite); - bmp->vtable->draw_trans_rgba_rle_sprite(bmp, sprite, x, y); - } - else { - ASSERT(bmp->vtable->color_depth == sprite->color_depth); - bmp->vtable->draw_trans_rle_sprite(bmp, sprite, x, y); - } -}) - - -AL_INLINE(void, draw_lit_rle_sprite, (struct BITMAP *bmp, AL_CONST struct RLE_SPRITE *sprite, int x, int y, int color), -{ - ASSERT(bmp); - ASSERT(sprite); - ASSERT(bmp->vtable->color_depth == sprite->color_depth); - - bmp->vtable->draw_lit_rle_sprite(bmp, sprite, x, y, color); -}) - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_RLE_INL */ - - Deleted: allegro/branches/4.9/include/allegro5/matrix.h =================================================================== --- allegro/branches/4.9/include/allegro5/matrix.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/matrix.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,96 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Matrix math routines. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_MATRIX_H -#define ALLEGRO_MATRIX_H - -#include "allegro5/base.h" -#include "allegro5/fixed.h" -#include "allegro5/fmaths.h" - -#ifdef __cplusplus - extern "C" { -#endif - -typedef struct MATRIX /* transformation matrix (fixed point) */ -{ - fixed v[3][3]; /* scaling and rotation */ - fixed t[3]; /* translation */ -} MATRIX; - - -typedef struct MATRIX_f /* transformation matrix (floating point) */ -{ - float v[3][3]; /* scaling and rotation */ - float t[3]; /* translation */ -} MATRIX_f; - - -AL_VAR(MATRIX, identity_matrix); -AL_VAR(MATRIX_f, identity_matrix_f); - -AL_FUNC(void, get_translation_matrix, (MATRIX *m, fixed x, fixed y, fixed z)); -AL_FUNC(void, get_translation_matrix_f, (MATRIX_f *m, float x, float y, float z)); - -AL_FUNC(void, get_scaling_matrix, (MATRIX *m, fixed x, fixed y, fixed z)); -AL_FUNC(void, get_scaling_matrix_f, (MATRIX_f *m, float x, float y, float z)); - -AL_FUNC(void, get_x_rotate_matrix, (MATRIX *m, fixed r)); -AL_FUNC(void, get_x_rotate_matrix_f, (MATRIX_f *m, float r)); - -AL_FUNC(void, get_y_rotate_matrix, (MATRIX *m, fixed r)); -AL_FUNC(void, get_y_rotate_matrix_f, (MATRIX_f *m, float r)); - -AL_FUNC(void, get_z_rotate_matrix, (MATRIX *m, fixed r)); -AL_FUNC(void, get_z_rotate_matrix_f, (MATRIX_f *m, float r)); - -AL_FUNC(void, get_rotation_matrix, (MATRIX *m, fixed x, fixed y, fixed z)); -AL_FUNC(void, get_rotation_matrix_f, (MATRIX_f *m, float x, float y, float z)); - -AL_FUNC(void, get_align_matrix, (MATRIX *m, fixed xfront, fixed yfront, fixed zfront, fixed xup, fixed yup, fixed zup)); -AL_FUNC(void, get_align_matrix_f, (MATRIX_f *m, float xfront, float yfront, float zfront, float xup, float yup, float zup)); - -AL_FUNC(void, get_vector_rotation_matrix, (MATRIX *m, fixed x, fixed y, fixed z, fixed a)); -AL_FUNC(void, get_vector_rotation_matrix_f, (MATRIX_f *m, float x, float y, float z, float a)); - -AL_FUNC(void, get_transformation_matrix, (MATRIX *m, fixed scale, fixed xrot, fixed yrot, fixed zrot, fixed x, fixed y, fixed z)); -AL_FUNC(void, get_transformation_matrix_f, (MATRIX_f *m, float scale, float xrot, float yrot, float zrot, float x, float y, float z)); - -AL_FUNC(void, get_camera_matrix, (MATRIX *m, fixed x, fixed y, fixed z, fixed xfront, fixed yfront, fixed zfront, fixed xup, fixed yup, fixed zup, fixed fov, fixed aspect)); -AL_FUNC(void, get_camera_matrix_f, (MATRIX_f *m, float x, float y, float z, float xfront, float yfront, float zfront, float xup, float yup, float zup, float fov, float aspect)); - -AL_FUNC(void, qtranslate_matrix, (MATRIX *m, fixed x, fixed y, fixed z)); -AL_FUNC(void, qtranslate_matrix_f, (MATRIX_f *m, float x, float y, float z)); - -AL_FUNC(void, qscale_matrix, (MATRIX *m, fixed scale)); -AL_FUNC(void, qscale_matrix_f, (MATRIX_f *m, float scale)); - -AL_FUNC(void, matrix_mul, (AL_CONST MATRIX *m1, AL_CONST MATRIX *m2, MATRIX *out)); -AL_FUNC(void, matrix_mul_f, (AL_CONST MATRIX_f *m1, AL_CONST MATRIX_f *m2, MATRIX_f *out)); - -AL_FUNC(void, apply_matrix_f, (AL_CONST MATRIX_f *m, float x, float y, float z, float *xout, float *yout, float *zout)); - -#ifdef __cplusplus - } -#endif - -#include "allegro5/inline/matrix.inl" - -#endif /* ifndef ALLEGRO_MATRIX_H */ - - Deleted: allegro/branches/4.9/include/allegro5/palette.h =================================================================== --- allegro/branches/4.9/include/allegro5/palette.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/palette.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,42 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Palette type. - * - * By Shawn Hargreaves. - * - * See readme.txt for copyright information. - */ - - -#ifndef ALLEGRO_PALETTE_H -#define ALLEGRO_PALETTE_H - -#ifdef __cplusplus - extern "C" { -#endif - -typedef struct RGB -{ - unsigned char r, g, b; - unsigned char filler; -} RGB; - -#define PAL_SIZE 256 - -typedef RGB PALETTE[PAL_SIZE]; - -#ifdef __cplusplus - } -#endif - -#endif /* ifndef ALLEGRO_PALETTE_H */ - - Deleted: allegro/branches/4.9/include/allegro5/qnxalleg.h =================================================================== --- allegro/branches/4.9/include/allegro5/qnxalleg.h 2008-08-21 15:59:30 UTC (rev 10454) +++ allegro/branches/4.9/include/allegro5/qnxalleg.h 2008-08-21 20:19:35 UTC (rev 10455) @@ -1,41 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Header file for the QNX Allegro library port. - * - * This doesn't need to be included; it prototypes functions you - * can use to control the library more closely. - */ - - -#ifndef QNX_ALLEGRO_H -#define QNX_ALLEGRO_H - -#ifndef ALLEGRO_H -#error Please include allegro.h before qnxalleg.h! -#endif - -#ifndef SCAN_DEPEND - #include <Pt.h> -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -A... [truncated message content] |
From: <mm...@us...> - 2008-08-21 23:21:37
|
Revision: 10459 http://alleg.svn.sourceforge.net/alleg/?rev=10459&view=rev Author: mmimica Date: 2008-08-21 23:21:47 +0000 (Thu, 21 Aug 2008) Log Message: ----------- Fixed some MSVC warnings. Modified Paths: -------------- allegro/branches/4.9/addons/acodec/CMakeLists.txt allegro/branches/4.9/addons/audio/CMakeLists.txt allegro/branches/4.9/addons/icodec/CMakeLists.txt allegro/branches/4.9/examples/exnew_drawpixels.c allegro/branches/4.9/examples/exnew_monitorinfo.c allegro/branches/4.9/examples/exnew_threads2.c Modified: allegro/branches/4.9/addons/acodec/CMakeLists.txt =================================================================== --- allegro/branches/4.9/addons/acodec/CMakeLists.txt 2008-08-21 23:20:14 UTC (rev 10458) +++ allegro/branches/4.9/addons/acodec/CMakeLists.txt 2008-08-21 23:21:47 UTC (rev 10459) @@ -149,22 +149,12 @@ set(ACODEC_LINK_WITH ${ACODEC_LINK_WITH} sndfile) endif(SUPPORT_SNDFILE) -macro(add_acodec_example nm) - add_executable(${nm} ${EXECUTABLE_TYPE} ${ARGN}) - set_target_properties(${nm} PROPERTIES - COMPILE_FLAGS "${MAYBE_ALLEGRO_STATICLINK} ${WFLAGS} ${EXE_CFLAGS}" - LINK_FLAGS "${MAYBE_ALLEGRO_STATICLINK}" - ) - target_link_libraries(${nm} ${LINK_WITH}) - target_link_libraries(${nm} ${ACODEC_LINK_WITH}) -endmacro(add_acodec_example) +example(ex_acodec ${ACODEC_LINK_WITH}) +example(ex_acodec_multi ${ACODEC_LINK_WITH}) +example(ex_acodec_stream ${ACODEC_LINK_WITH}) -add_acodec_example(ex_acodec ex_acodec.c) -add_acodec_example(ex_acodec_multi ex_acodec_multi.c) -add_acodec_example(ex_acodec_stream ex_acodec_stream.c) +#example(ex_acodec_mixer ${ACODEC_LINK_WITH}) -#add_acodec_example(ex_acodec_mixer ex_acodec_mixer.c) - #-----------------------------------------------------------------------------# # # Install header files. Modified: allegro/branches/4.9/addons/audio/CMakeLists.txt =================================================================== --- allegro/branches/4.9/addons/audio/CMakeLists.txt 2008-08-21 23:20:14 UTC (rev 10458) +++ allegro/branches/4.9/addons/audio/CMakeLists.txt 2008-08-21 23:21:47 UTC (rev 10459) @@ -73,18 +73,6 @@ set(AUDIO_LINK_WITH ${AUDIO_LIB_TO_LINK}_shared CACHE INTERNAL "internal") endif(STATIC) -macro(add_audio_example nm) - add_executable(${nm} ${EXECUTABLE_TYPE} ${ARGN}) - set_target_properties(${nm} PROPERTIES - COMPILE_FLAGS "${MAYBE_ALLEGRO_STATICLINK} ${WFLAGS} ${EXE_CFLAGS}" - LINK_FLAGS "${MAYBE_ALLEGRO_STATICLINK}" - ) - target_link_libraries(${nm} ${LINK_WITH}) - target_link_libraries(${nm} ${AUDIO_LINK_WITH}) -endmacro(add_audio_example) - -#add_audio_example(ex_audio ex_audio.c) - #-----------------------------------------------------------------------------# # # Install header files. Modified: allegro/branches/4.9/addons/icodec/CMakeLists.txt =================================================================== --- allegro/branches/4.9/addons/icodec/CMakeLists.txt 2008-08-21 23:20:14 UTC (rev 10458) +++ allegro/branches/4.9/addons/icodec/CMakeLists.txt 2008-08-21 23:21:47 UTC (rev 10459) @@ -79,19 +79,8 @@ set(ICODEC_LINK_WITH ${ICODEC_LINK_WITH} Magick++) - -macro(add_icodec_example nm) - add_executable(${nm} ${EXECUTABLE_TYPE} ${ARGN}) - set_target_properties(${nm} PROPERTIES - COMPILE_FLAGS "${MAYBE_ALLEGRO_STATICLINK} ${WFLAGS} ${EXE_CFLAGS}" - LINK_FLAGS "${MAYBE_ALLEGRO_STATICLINK}" - ) - target_link_libraries(${nm} ${LINK_WITH}) - target_link_libraries(${nm} ${ICODEC_LINK_WITH}) -endmacro(add_icodec_example) - if(SUPPORT_MAGICK) - add_icodec_example(ex_icodec ex_icodec.c) + example(ex_icodec ${ICODEC_LINK_WITH}) endif(SUPPORT_MAGICK) #-----------------------------------------------------------------------------# Modified: allegro/branches/4.9/examples/exnew_drawpixels.c =================================================================== --- allegro/branches/4.9/examples/exnew_drawpixels.c 2008-08-21 23:20:14 UTC (rev 10458) +++ allegro/branches/4.9/examples/exnew_drawpixels.c 2008-08-21 23:21:47 UTC (rev 10459) @@ -58,6 +58,8 @@ frame_count += elapsed; } else { + int X, Y; + frame_count -= (1000/TARGET_FPS); al_clear(al_map_rgb(0, 0, 0)); for (star = 0; star < NUM_STARS/3; star++) { @@ -75,8 +77,8 @@ } /* Check that dots appear at the window extremes. */ - int X = al_get_display_width() - 1; - int Y = al_get_display_height() - 1; + X = al_get_display_width() - 1; + Y = al_get_display_height() - 1; al_put_pixel(0, 0, al_map_rgb_f(1, 1, 1)); al_put_pixel(X, 0, al_map_rgb_f(1, 1, 1)); al_put_pixel(0, Y, al_map_rgb_f(1, 1, 1)); Modified: allegro/branches/4.9/examples/exnew_monitorinfo.c =================================================================== --- allegro/branches/4.9/examples/exnew_monitorinfo.c 2008-08-21 23:20:14 UTC (rev 10458) +++ allegro/branches/4.9/examples/exnew_monitorinfo.c 2008-08-21 23:21:47 UTC (rev 10459) @@ -5,7 +5,7 @@ { ALLEGRO_MONITOR_INFO info; int num_adapters; - int i, j; + int i; al_init(); Modified: allegro/branches/4.9/examples/exnew_threads2.c =================================================================== --- allegro/branches/4.9/examples/exnew_threads2.c 2008-08-21 23:20:14 UTC (rev 10458) +++ allegro/branches/4.9/examples/exnew_threads2.c 2008-08-21 23:21:47 UTC (rev 10459) @@ -139,7 +139,7 @@ Viewport viewport; unsigned char palette[256][3]; ALLEGRO_TIMEOUT timeout; - int x, y, w, h; + int y, w, h; y = 0; w = al_get_bitmap_width(info->bitmap); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tr...@us...> - 2008-08-22 01:15:48
|
Revision: 10462 http://alleg.svn.sourceforge.net/alleg/?rev=10462&view=rev Author: trentg Date: 2008-08-22 01:15:55 +0000 (Fri, 22 Aug 2008) Log Message: ----------- Made it compile with MSVC Modified Paths: -------------- allegro/branches/4.9/addons/iio/iio.c allegro/branches/4.9/include/allegro5/color.h allegro/branches/4.9/include/allegro5/file.h allegro/branches/4.9/include/allegro5/platform/aintwin.h allegro/branches/4.9/include/allegro5/winalleg.h allegro/branches/4.9/src/memblit2.c allegro/branches/4.9/src/win/wthread.c allegro/branches/4.9/src/win/wwnd.c Modified: allegro/branches/4.9/addons/iio/iio.c =================================================================== --- allegro/branches/4.9/addons/iio/iio.c 2008-08-21 23:49:26 UTC (rev 10461) +++ allegro/branches/4.9/addons/iio/iio.c 2008-08-22 01:15:55 UTC (rev 10462) @@ -3,7 +3,6 @@ #include "allegro5/allegro5.h" #include "allegro5/internal/aintern.h" -#include "allegro5/internal/aintern_vector.h" #include "iio.h" @@ -18,8 +17,9 @@ } Loader; -static _AL_VECTOR loaders = _AL_VECTOR_INITIALIZER(Loader *); +static Loader **loaders = NULL; static bool inited = false; +static int num_loaders = 0; bool iio_init(void) @@ -57,16 +57,23 @@ l->extension = strdup(extension); l->function = function; - add = _al_vector_alloc_back(&loaders); + num_loaders++; - if (add) { - *add = l; - return true; + if (loaders == NULL) { + loaders = _AL_MALLOC(sizeof(Loader*)); } else { + loaders = _AL_REALLOC(loaders, num_loaders*sizeof(Loader*)); + } + + if (!loaders) { _AL_FREE(l); return false; } + + loaders[num_loaders-1] = l; + + return true; } @@ -122,9 +129,8 @@ _AL_FREE(p); - for (i = 0; i < loaders._size; i++) { - Loader **lptr = _al_vector_ref(&loaders, i); - Loader *l = *lptr; + for (i = 0; i < num_loaders; i++) { + Loader *l = loaders[i]; if (!iio_stricmp(extension, l->extension)) { return l->function(filename); } Modified: allegro/branches/4.9/include/allegro5/color.h =================================================================== --- allegro/branches/4.9/include/allegro5/color.h 2008-08-21 23:49:26 UTC (rev 10461) +++ allegro/branches/4.9/include/allegro5/color.h 2008-08-22 01:15:55 UTC (rev 10462) @@ -52,26 +52,6 @@ #define MASK_COLOR_32 0xFF00FF */ -AL_FUNC(int, makecol, (int r, int g, int b)); -AL_FUNC(int, makecol8, (int r, int g, int b)); -AL_FUNC(int, makecol_depth, (int color_depth, int r, int g, int b)); - -AL_FUNC(int, makeacol, (int r, int g, int b, int a)); -AL_FUNC(int, makeacol_depth, (int color_depth, int r, int g, int b, int a)); - -AL_FUNC(int, makecol15_dither, (int r, int g, int b, int x, int y)); -AL_FUNC(int, makecol16_dither, (int r, int g, int b, int x, int y)); - -AL_FUNC(int, getr, (int c)); -AL_FUNC(int, getg, (int c)); -AL_FUNC(int, getb, (int c)); -AL_FUNC(int, geta, (int c)); - -AL_FUNC(int, getr_depth, (int color_depth, int c)); -AL_FUNC(int, getg_depth, (int color_depth, int c)); -AL_FUNC(int, getb_depth, (int color_depth, int c)); -AL_FUNC(int, geta_depth, (int color_depth, int c)); - #ifdef __cplusplus } #endif Modified: allegro/branches/4.9/include/allegro5/file.h =================================================================== --- allegro/branches/4.9/include/allegro5/file.h 2008-08-21 23:49:26 UTC (rev 10461) +++ allegro/branches/4.9/include/allegro5/file.h 2008-08-22 01:15:55 UTC (rev 10462) @@ -44,7 +44,6 @@ AL_FUNC(int, delete_file, (AL_CONST char *filename)); AL_FUNC(int, for_each_file_ex, (AL_CONST char *name, int in_attrib, int out_attrib, AL_METHOD(int, callback, (AL_CONST char *filename, int attrib, void *param)), void *param)); AL_FUNC(int, set_allegro_resource_path, (int priority, AL_CONST char *path)); -AL_FUNC(int, find_allegro_resource, (char *dest, AL_CONST char *resource, AL_CONST char *ext, AL_CONST char *datafile, AL_CONST char *objectname, AL_CONST char *envvar, AL_CONST char *subdir, int size)); struct al_ffblk /* file info block for the al_find*() routines */ { Modified: allegro/branches/4.9/include/allegro5/platform/aintwin.h =================================================================== --- allegro/branches/4.9/include/allegro5/platform/aintwin.h 2008-08-21 23:49:26 UTC (rev 10461) +++ allegro/branches/4.9/include/allegro5/platform/aintwin.h 2008-08-22 01:15:55 UTC (rev 10462) @@ -79,17 +79,6 @@ AL_FUNCPTR(void, user_close_proc, (void)); -/* gfx synchronization */ -AL_VAR(CRITICAL_SECTION, gfx_crit_sect); -AL_VAR(int, gfx_crit_sect_nesting); - -#define _enter_gfx_critical() EnterCriticalSection(&gfx_crit_sect); \ - gfx_crit_sect_nesting++ -#define _exit_gfx_critical() LeaveCriticalSection(&gfx_crit_sect); \ - gfx_crit_sect_nesting-- -#define GFX_CRITICAL_RELEASED (!gfx_crit_sect_nesting) - - /* switch routines */ AL_VAR(int, _win_app_foreground); Modified: allegro/branches/4.9/include/allegro5/winalleg.h =================================================================== --- allegro/branches/4.9/include/allegro5/winalleg.h 2008-08-21 23:49:26 UTC (rev 10461) +++ allegro/branches/4.9/include/allegro5/winalleg.h 2008-08-22 01:15:55 UTC (rev 10462) @@ -68,29 +68,9 @@ #endif -/* external graphics driver support */ -typedef struct WIN_GFX_DRIVER { - int has_backing_store; - AL_METHOD(void, switch_in, (void)); - AL_METHOD(void, switch_out, (void)); - AL_METHOD(void, enter_sysmode, (void)); - AL_METHOD(void, exit_sysmode, (void)); - AL_METHOD(void, move, (int x, int y, int w, int h)); - AL_METHOD(void, iconify, (void)); - AL_METHOD(void, paint, (RECT *rect)); -} WIN_GFX_DRIVER; - -AL_VAR(WIN_GFX_DRIVER *, win_gfx_driver); - AL_FUNC(void, win_grab_input, (void)); -/* external window support */ -AL_FUNC(HWND, win_get_window, (void)); -AL_FUNC(void, win_set_window, (HWND wnd)); -AL_FUNC(void, win_set_wnd_create_proc, (AL_METHOD(HWND, proc, (WNDPROC)))); - - /* D3D stuff */ Modified: allegro/branches/4.9/src/memblit2.c =================================================================== --- allegro/branches/4.9/src/memblit2.c 2008-08-21 23:49:26 UTC (rev 10461) +++ allegro/branches/4.9/src/memblit2.c 2008-08-22 01:15:55 UTC (rev 10462) @@ -88,24 +88,24 @@ switch (size) { case 2: for (x = 0; x < xend; x++) { - uint16_t pix = bmp_read16(src_region.data+(int)_sy*src_region.pitch+(int)_sx*2); - bmp_write16(dst_region.data+(int)_dy*dst_region.pitch+(int)_dx*2, pix); + uint16_t pix = bmp_read16((char *)src_region.data+(int)_sy*src_region.pitch+(int)_sx*2); + bmp_write16((char *)dst_region.data+(int)_dy*dst_region.pitch+(int)_dx*2, pix); _sx += sxinc; _dx += dxinc; } break; case 3: for (x = 0; x < xend; x++) { - int pix = READ3BYTES(src_region.data+(int)_sy*src_region.pitch+(int)_sx*3); - WRITE3BYTES(dst_region.data+(int)_dy*dst_region.pitch+(int)_dx*3, pix); + int pix = READ3BYTES((char *)src_region.data+(int)_sy*src_region.pitch+(int)_sx*3); + WRITE3BYTES((char *)dst_region.data+(int)_dy*dst_region.pitch+(int)_dx*3, pix); _sx += sxinc; _dx += dxinc; } break; case 4: for (x = 0; x < xend; x++) { - uint32_t pix = bmp_read32(src_region.data+(int)_sy*src_region.pitch+(int)_sx*4); - bmp_write32(dst_region.data+(int)_dy*dst_region.pitch+(int)_dx*4, pix); + uint32_t pix = bmp_read32((char *)src_region.data+(int)_sy*src_region.pitch+(int)_sx*4); + bmp_write32((char *)dst_region.data+(int)_dy*dst_region.pitch+(int)_dx*4, pix); _sx += sxinc; _dx += dxinc; } Modified: allegro/branches/4.9/src/win/wthread.c =================================================================== --- allegro/branches/4.9/src/win/wthread.c 2008-08-21 23:49:26 UTC (rev 10461) +++ allegro/branches/4.9/src/win/wthread.c 2008-08-22 01:15:55 UTC (rev 10462) @@ -21,6 +21,7 @@ #include "allegro5/allegro5.h" #include "allegro5/internal/aintern.h" #include "allegro5/platform/aintwin.h" +#include "win_new.h" #ifndef SCAN_DEPEND #include <objbase.h> @@ -48,7 +49,7 @@ void _win_thread_init(void) { HMODULE ole32 = NULL; - HWND allegro_wnd = win_get_window(); + HWND allegro_wnd = _al_win_active_window; if (first_call) { first_call = 0; Modified: allegro/branches/4.9/src/win/wwnd.c =================================================================== --- allegro/branches/4.9/src/win/wwnd.c 2008-08-21 23:49:26 UTC (rev 10461) +++ allegro/branches/4.9/src/win/wwnd.c 2008-08-22 01:15:55 UTC (rev 10462) @@ -53,9 +53,6 @@ static int window_is_initialized = FALSE; /* graphics */ -WIN_GFX_DRIVER *win_gfx_driver; -CRITICAL_SECTION gfx_crit_sect; -int gfx_crit_sect_nesting = 0; /* close button user hook */ void (*user_close_proc)(void) = NULL; @@ -211,7 +208,7 @@ */ void wnd_schedule_proc(int (*proc) (void)) { - PostMessage(win_get_window(), _al_win_msg_call_proc, (DWORD) proc, 0); + PostMessage(_al_win_active_window, _al_win_msg_call_proc, (DWORD) proc, 0); } #if 0 @@ -279,7 +276,7 @@ if (_al_display_type() == 0) { /* 1.2s delay to let Windows complete the switch in fullscreen mode */ - SetTimer(win_get_window(), SWITCH_TIMER, 1200, NULL); + SetTimer(_al_win_active_window, SWITCH_TIMER, 1200, NULL); } else { /* no delay in windowed mode */ @@ -290,7 +287,7 @@ case WM_TIMER: if (wparam == SWITCH_TIMER) { - KillTimer(win_get_window(), SWITCH_TIMER); + KillTimer(_al_win_active_window, SWITCH_TIMER); _win_switch_in(); return 0; } @@ -307,8 +304,8 @@ break; case WM_MOVE: - if (GetActiveWindow() == win_get_window()) { - if (!IsIconic(win_get_window())) { + if (GetActiveWindow() == _al_win_active_window) { + if (!IsIconic(_al_win_active_window)) { wnd_x = (short) LOWORD(lparam); wnd_y = (short) HIWORD(lparam); @@ -603,7 +600,7 @@ wnd_thread = NULL; } - DeleteCriticalSection(&gfx_crit_sect); + //DeleteCriticalSection(&gfx_crit_sect); _win_input_exit(); @@ -617,8 +614,8 @@ */ void restore_window_style(void) { - SetWindowLong(win_get_window(), GWL_STYLE, old_style); - SetWindowPos(win_get_window(), 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); + SetWindowLong(_al_win_active_window, GWL_STYLE, old_style); + SetWindowPos(_al_win_active_window, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mm...@us...> - 2008-08-22 01:22:25
|
Revision: 10463 http://alleg.svn.sourceforge.net/alleg/?rev=10463&view=rev Author: mmimica Date: 2008-08-22 01:22:35 +0000 (Fri, 22 Aug 2008) Log Message: ----------- Added mouse cursor routines in WGL. Modified Paths: -------------- allegro/branches/4.9/addons/iio/iio.c allegro/branches/4.9/src/win/d3d_disp.cpp allegro/branches/4.9/src/win/wgl.h allegro/branches/4.9/src/win/wgl_disp.c Modified: allegro/branches/4.9/addons/iio/iio.c =================================================================== --- allegro/branches/4.9/addons/iio/iio.c 2008-08-22 01:15:55 UTC (rev 10462) +++ allegro/branches/4.9/addons/iio/iio.c 2008-08-22 01:22:35 UTC (rev 10463) @@ -19,7 +19,7 @@ static Loader **loaders = NULL; static bool inited = false; -static int num_loaders = 0; +static unsigned int num_loaders = 0; bool iio_init(void) @@ -44,7 +44,6 @@ bool iio_add_loader(AL_CONST char *extension, IIO_LOADER_FUNCTION function) { - Loader **add; Loader *l; ASSERT(extension); Modified: allegro/branches/4.9/src/win/d3d_disp.cpp =================================================================== --- allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-22 01:15:55 UTC (rev 10462) +++ allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-22 01:22:35 UTC (rev 10463) @@ -2115,12 +2115,12 @@ return ((ALLEGRO_BITMAP_D3D *)bitmap)->video_texture; } -void d3d_set_window_position(ALLEGRO_DISPLAY *display, int x, int y) +static void d3d_set_window_position(ALLEGRO_DISPLAY *display, int x, int y) { _al_win_set_window_position(((ALLEGRO_DISPLAY_D3D *)display)->window, x, y); } -void d3d_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y) +static void d3d_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y) { if (display->flags & ALLEGRO_FULLSCREEN) { ALLEGRO_MONITOR_INFO info; @@ -2134,7 +2134,7 @@ } } -void d3d_toggle_frame(ALLEGRO_DISPLAY *display, bool onoff) +static void d3d_toggle_frame(ALLEGRO_DISPLAY *display, bool onoff) { _al_win_toggle_window_frame( display, @@ -2142,19 +2142,6 @@ display->w, display->h, onoff); } -bool d3d_set_system_cursor(ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) -{ - HCURSOR hcursor; - - hcursor = _al_win_system_cursor_to_hcursor(cursor_id); - if (hcursor) { - _al_win_set_mouse_hcursor(hcursor); - return true; - } - - return false; -} - /* Obtain a reference to this driver. */ ALLEGRO_DISPLAY_INTERFACE *_al_display_d3d_driver(void) { Modified: allegro/branches/4.9/src/win/wgl.h =================================================================== --- allegro/branches/4.9/src/win/wgl.h 2008-08-22 01:15:55 UTC (rev 10462) +++ allegro/branches/4.9/src/win/wgl.h 2008-08-22 01:22:35 UTC (rev 10463) @@ -17,6 +17,14 @@ HDC dc; HGLRC glrc; + int mouse_range_x1; + int mouse_range_y1; + int mouse_range_x2; + int mouse_range_y2; + + HCURSOR mouse_selected_hcursor; + bool mouse_cursor_shown; + bool thread_ended; bool end_thread; } ALLEGRO_DISPLAY_WGL; Modified: allegro/branches/4.9/src/win/wgl_disp.c =================================================================== --- allegro/branches/4.9/src/win/wgl_disp.c 2008-08-22 01:15:55 UTC (rev 10462) +++ allegro/branches/4.9/src/win/wgl_disp.c 2008-08-22 01:22:35 UTC (rev 10463) @@ -926,11 +926,23 @@ win_grab_input(); + wgl_display->mouse_range_x1 = 0; + wgl_display->mouse_range_y1 = 0; + wgl_display->mouse_range_x2 = w; + wgl_display->mouse_range_y2 = h; if (al_is_mouse_installed()) { al_set_mouse_xy(w/2, h/2); al_set_mouse_range(0, 0, w, h); } + wgl_display->mouse_selected_hcursor = 0; + wgl_display->mouse_cursor_shown = false; + + if (al_is_mouse_installed()) { + al_set_mouse_xy(w/2, h/2); + al_set_mouse_range(0, 0, w, h); + } + return display; } @@ -1233,8 +1245,11 @@ static void wgl_switch_in(ALLEGRO_DISPLAY *display) { + ALLEGRO_DISPLAY_WGL *wgl_disp = (ALLEGRO_DISPLAY_WGL*)display; + if (al_is_mouse_installed()) - al_set_mouse_range(0, 0, display->w, display->h); + al_set_mouse_range(wgl_disp->mouse_range_x1, wgl_disp->mouse_range_y1, + wgl_disp->mouse_range_x2, wgl_disp->mouse_range_y2); } @@ -1263,6 +1278,101 @@ display->w, display->h, onoff); } +static bool wgl_set_system_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id); + +ALLEGRO_MOUSE_CURSOR *wgl_create_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_BITMAP *sprite, int xfocus, int yfocus) +{ + ALLEGRO_DISPLAY_WGL *wgl_display = (ALLEGRO_DISPLAY_WGL *) display; + HWND wnd = wgl_display->window; + ALLEGRO_MOUSE_CURSOR_WIN *win_cursor; + + win_cursor = _al_win_create_mouse_cursor(wnd, sprite, xfocus, yfocus); + return (ALLEGRO_MOUSE_CURSOR *) win_cursor; +} + +static void wgl_destroy_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor) +{ + ALLEGRO_DISPLAY_WGL *wgl_display = (ALLEGRO_DISPLAY_WGL *) display; + ALLEGRO_MOUSE_CURSOR_WIN *win_cursor = (ALLEGRO_MOUSE_CURSOR_WIN *) cursor; + + ASSERT(win_cursor); + + if (win_cursor->hcursor == wgl_display->mouse_selected_hcursor) { + wgl_set_system_mouse_cursor(display, ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); + } + + _al_win_destroy_mouse_cursor(win_cursor); +} + +static bool wgl_set_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor) +{ + ALLEGRO_DISPLAY_WGL *wgl_display = (ALLEGRO_DISPLAY_WGL *) display; + ALLEGRO_MOUSE_CURSOR_WIN *win_cursor = (ALLEGRO_MOUSE_CURSOR_WIN *) cursor; + + ASSERT(win_cursor); + ASSERT(win_cursor->hcursor); + + wgl_display->mouse_selected_hcursor = win_cursor->hcursor; + + if (wgl_display->mouse_cursor_shown) { + _al_win_set_mouse_hcursor(win_cursor->hcursor); + } + + return true; +} + +static bool wgl_set_system_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) +{ + ALLEGRO_DISPLAY_WGL *wgl_display = (ALLEGRO_DISPLAY_WGL *) display; + HCURSOR wc; + + wc = _al_win_system_cursor_to_hcursor(cursor_id); + if (!wc) { + return false; + } + + wgl_display->mouse_selected_hcursor = wc; + if (wgl_display->mouse_cursor_shown) { + /* + MySetCursor(wc); + PostMessage(wgl_display->window, WM_MOUSEMOVE, 0, 0); + */ + _al_win_set_mouse_hcursor(wc); + } + return true; +} + +static bool wgl_show_mouse_cursor(ALLEGRO_DISPLAY *display) +{ + ALLEGRO_DISPLAY_WGL *wgl_display = (ALLEGRO_DISPLAY_WGL *) display; + + /* XXX do we need this? */ + if (!wgl_display->mouse_selected_hcursor) { + wgl_set_system_mouse_cursor(display, ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); + } + + _al_win_set_mouse_hcursor(wgl_display->mouse_selected_hcursor); + wgl_display->mouse_cursor_shown = true; + + return true; +} + +static bool wgl_hide_mouse_cursor(ALLEGRO_DISPLAY *display) +{ + ALLEGRO_DISPLAY_WGL *wgl_display = (ALLEGRO_DISPLAY_WGL *) display; + + _al_win_set_mouse_hcursor(NULL); + wgl_display->mouse_cursor_shown = false; + + return true; +} + + /* Obtain a reference to this driver. */ ALLEGRO_DISPLAY_INTERFACE *_al_display_wgl_driver(void) { @@ -1287,13 +1397,12 @@ vt->switch_out = wgl_switch_in; vt->switch_in = wgl_switch_out; - /* XXX sorry, these need to be filled in */ - vt->create_mouse_cursor = NULL; - vt->destroy_mouse_cursor = NULL; - vt->set_mouse_cursor = NULL; - vt->set_system_mouse_cursor = NULL; - vt->show_mouse_cursor = NULL; - vt->hide_mouse_cursor = NULL; + vt->create_mouse_cursor = wgl_create_mouse_cursor; + vt->destroy_mouse_cursor = wgl_destroy_mouse_cursor; + vt->set_mouse_cursor = wgl_set_mouse_cursor; + vt->set_system_mouse_cursor = wgl_set_system_mouse_cursor; + vt->show_mouse_cursor = wgl_show_mouse_cursor; + vt->hide_mouse_cursor = wgl_hide_mouse_cursor; vt->set_icon = _al_win_set_display_icon; vt->set_window_position = wgl_set_window_position; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2008-08-22 18:07:53
|
Revision: 10467 http://alleg.svn.sourceforge.net/alleg/?rev=10467&view=rev Author: elias Date: 2008-08-22 18:08:01 +0000 (Fri, 22 Aug 2008) Log Message: ----------- tried to make the demo work again (also had to fix some minor other stuff), but sound is broken Modified Paths: -------------- allegro/branches/4.9/addons/acodec/allegro5/acodec.h allegro/branches/4.9/addons/audio/allegro5/audio_common.h allegro/branches/4.9/addons/audio/allegro5/sample.h allegro/branches/4.9/addons/audio/allegro5/stream.h allegro/branches/4.9/addons/audio/allegro5/voice.h allegro/branches/4.9/addons/iio/allegro5/a5_iio.h allegro/branches/4.9/demo/include/SampleResource.hpp allegro/branches/4.9/demo/include/a5teroids.hpp allegro/branches/4.9/demo/src/BitmapResource.cpp allegro/branches/4.9/demo/src/Misc.cpp allegro/branches/4.9/demo/src/Player.cpp allegro/branches/4.9/demo/src/SampleResource.cpp allegro/branches/4.9/demo/src/a5teroids.cpp allegro/branches/4.9/demo/src/sound.cpp allegro/branches/4.9/include/allegro5/platform/aintlnx.h allegro/branches/4.9/scons/all.scons Modified: allegro/branches/4.9/addons/acodec/allegro5/acodec.h =================================================================== --- allegro/branches/4.9/addons/acodec/allegro5/acodec.h 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/addons/acodec/allegro5/acodec.h 2008-08-22 18:08:01 UTC (rev 10467) @@ -10,6 +10,10 @@ #include "allegro5/allegro5.h" +#ifdef __cplusplus +extern "C" { +#endif + #if (defined ALLEGRO_MINGW32) || (defined ALLEGRO_MSVC) #ifndef ALLEGRO_STATICLINK #ifdef A5_ACODEC_SRC @@ -34,4 +38,8 @@ A5_ACODEC_FUNC(ALLEGRO_SAMPLE*, al_load_sample,(const char* filename)); A5_ACODEC_FUNC(ALLEGRO_STREAM*, al_load_stream,(const char* filename)); +#ifdef __cplusplus +} #endif + +#endif Modified: allegro/branches/4.9/addons/audio/allegro5/audio_common.h =================================================================== --- allegro/branches/4.9/addons/audio/allegro5/audio_common.h 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/addons/audio/allegro5/audio_common.h 2008-08-22 18:08:01 UTC (rev 10467) @@ -4,6 +4,10 @@ #ifndef A5_AUDIO_COMMON_H #define A5_AUDIO_COMMON_H +#ifdef __cplusplus +extern "C" { +#endif + #if (defined ALLEGRO_MINGW32) || (defined ALLEGRO_MSVC) #ifndef ALLEGRO_STATICLINK #ifdef A5_AUDIO_SRC @@ -86,4 +90,8 @@ A5_AUDIO_FUNC(int, al_audio_channel_count, (ALLEGRO_AUDIO_ENUM conf)); A5_AUDIO_FUNC(int, al_audio_depth_size, (ALLEGRO_AUDIO_ENUM conf)); +#ifdef __cplusplus +} #endif + +#endif Modified: allegro/branches/4.9/addons/audio/allegro5/sample.h =================================================================== --- allegro/branches/4.9/addons/audio/allegro5/sample.h 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/addons/audio/allegro5/sample.h 2008-08-22 18:08:01 UTC (rev 10467) @@ -6,6 +6,10 @@ #ifndef A5_SAMPLE_H #define A5_SAMPLE_H +#ifdef __cplusplus +extern "C" { +#endif + typedef struct ALLEGRO_SAMPLE ALLEGRO_SAMPLE; A5_AUDIO_FUNC(ALLEGRO_SAMPLE*, al_sample_create, (void *buf, unsigned long samples, unsigned long frequency, ALLEGRO_AUDIO_ENUM depth, ALLEGRO_AUDIO_ENUM chan_conf, bool free_buffer)); A5_AUDIO_FUNC(void, al_sample_destroy, (ALLEGRO_SAMPLE *sample)); @@ -19,4 +23,9 @@ /* FIXME: rename or make internal */ A5_AUDIO_FUNC(int, al_audio_buffer_size, (const ALLEGRO_SAMPLE* sample)); A5_AUDIO_FUNC(int, al_audio_size_bytes, (int samples, ALLEGRO_AUDIO_ENUM channels, ALLEGRO_AUDIO_ENUM depth)); + +#ifdef __cplusplus +} #endif + +#endif Modified: allegro/branches/4.9/addons/audio/allegro5/stream.h =================================================================== --- allegro/branches/4.9/addons/audio/allegro5/stream.h 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/addons/audio/allegro5/stream.h 2008-08-22 18:08:01 UTC (rev 10467) @@ -6,10 +6,19 @@ #ifndef A5_STREAM_H #define A5_STREAM_H +#ifdef __cplusplus +extern "C" { +#endif + /* ALLEGRO_STREAM: */ typedef struct ALLEGRO_STREAM ALLEGRO_STREAM; /* yes this is very long and I cannot break it into multiple lines due to AL_FUNC. I also leave named parameters for the natural docs */ A5_AUDIO_FUNC(ALLEGRO_STREAM*,al_stream_create,(unsigned long frequency, enum ALLEGRO_AUDIO_ENUM depth, enum ALLEGRO_AUDIO_ENUM chan_conf, bool (*stream_update)(ALLEGRO_STREAM* stream, void* data, unsigned long samples),void (*stream_close)(ALLEGRO_STREAM*))); A5_AUDIO_FUNC(void, al_stream_destroy, (ALLEGRO_STREAM* stream)); A5_AUDIO_FUNC(bool, al_stream_is_dry, (ALLEGRO_STREAM* stream)); + +#ifdef __cplusplus +} #endif + +#endif Modified: allegro/branches/4.9/addons/audio/allegro5/voice.h =================================================================== --- allegro/branches/4.9/addons/audio/allegro5/voice.h 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/addons/audio/allegro5/voice.h 2008-08-22 18:08:01 UTC (rev 10467) @@ -9,6 +9,10 @@ #ifndef A5_VOICE_H #define A5_VOICE_H +#ifdef __cplusplus +extern "C" { +#endif + /* struct ALLEGRO_VOICE: */ typedef struct ALLEGRO_VOICE ALLEGRO_VOICE; @@ -23,4 +27,9 @@ A5_AUDIO_FUNC(int, al_voice_pause, (ALLEGRO_VOICE* voice)); A5_AUDIO_FUNC(int, al_voice_stop, (ALLEGRO_VOICE* voice)); A5_AUDIO_FUNC(int, al_voice_start, (ALLEGRO_VOICE* voice)); + +#ifdef __cplusplus +} #endif + +#endif Modified: allegro/branches/4.9/addons/iio/allegro5/a5_iio.h =================================================================== --- allegro/branches/4.9/addons/iio/allegro5/a5_iio.h 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/addons/iio/allegro5/a5_iio.h 2008-08-22 18:08:01 UTC (rev 10467) @@ -1,6 +1,9 @@ #ifndef A5_IIO_H #define A5_IIO_H +#ifdef __cplusplus +extern "C" { +#endif typedef ALLEGRO_BITMAP *(*IIO_LOADER_FUNCTION)(AL_CONST char *filename); @@ -9,6 +12,9 @@ AL_FUNC(bool, iio_add_loader, (AL_CONST char *ext, IIO_LOADER_FUNCTION function)); AL_FUNC(ALLEGRO_BITMAP *, iio_load, (AL_CONST char *filename)); +#ifdef __cplusplus +} +#endif #endif // A5_IIO_H Modified: allegro/branches/4.9/demo/include/SampleResource.hpp =================================================================== --- allegro/branches/4.9/demo/include/SampleResource.hpp 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/demo/include/SampleResource.hpp 2008-08-22 18:08:01 UTC (rev 10467) @@ -10,7 +10,7 @@ void* get(void); SampleResource(const char* filename); private: - SAMPLE *sample; + ALLEGRO_SAMPLE *sample; std::string filename; }; Modified: allegro/branches/4.9/demo/include/a5teroids.hpp =================================================================== --- allegro/branches/4.9/demo/include/a5teroids.hpp 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/demo/include/a5teroids.hpp 2008-08-22 18:08:01 UTC (rev 10467) @@ -2,7 +2,10 @@ #define A5TEROIDS_HPP #include "allegro5/allegro5.h" +#include "allegro5/a5_iio.h" #include "allegro5/a5_font.h" +#include "allegro5/audio.h" +#include "allegro5/acodec.h" #ifdef ALLEGRO_UNIX #define MAX_PATH 5000 Modified: allegro/branches/4.9/demo/src/BitmapResource.cpp =================================================================== --- allegro/branches/4.9/demo/src/BitmapResource.cpp 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/demo/src/BitmapResource.cpp 2008-08-22 18:08:01 UTC (rev 10467) @@ -11,7 +11,7 @@ bool BitmapResource::load(void) { al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ANY_WITH_ALPHA); - bitmap = al_load_bitmap(filename.c_str()); + bitmap = iio_load(filename.c_str()); if (!bitmap) debug_message("Error loading bitmap %s\n", filename.c_str()); return bitmap != 0; Modified: allegro/branches/4.9/demo/src/Misc.cpp =================================================================== --- allegro/branches/4.9/demo/src/Misc.cpp 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/demo/src/Misc.cpp 2008-08-22 18:08:01 UTC (rev 10467) @@ -231,9 +231,9 @@ srand(time(NULL)); al_init(); + iio_init(); + al_audio_init(ALLEGRO_AUDIO_DRIVER_AUTODETECT); - install_sound(DIGI_AUTODETECT, MIDI_NONE, 0); - al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ANY_WITH_ALPHA); // Read configuration file Modified: allegro/branches/4.9/demo/src/Player.cpp =================================================================== --- allegro/branches/4.9/demo/src/Player.cpp 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/demo/src/Player.cpp 2008-08-22 18:08:01 UTC (rev 10467) @@ -187,7 +187,7 @@ bool Player::load(void) { - bitmap = al_load_bitmap(getResource("gfx/ship.tga")); + bitmap = iio_load(getResource("gfx/ship.tga")); if (!bitmap) { debug_message("Error loading %s\n", getResource("gfx/ship.tga")); return false; @@ -219,7 +219,7 @@ } al_set_target_bitmap(old_target); - trail_bitmap = al_load_bitmap(getResource("gfx/trail.tga")); + trail_bitmap = iio_load(getResource("gfx/trail.tga")); if (!trail_bitmap) { debug_message("Error loading %s\n", getResource("gfx/trail.tga")); al_destroy_bitmap(bitmap); @@ -227,7 +227,7 @@ return false; } - icon = al_load_bitmap(getResource("gfx/ship_icon.tga")); + icon = iio_load(getResource("gfx/ship_icon.tga")); if (!icon) { debug_message("Error loading %s\n", getResource("gfx/icon.tga")); al_destroy_bitmap(bitmap); Modified: allegro/branches/4.9/demo/src/SampleResource.cpp =================================================================== --- allegro/branches/4.9/demo/src/SampleResource.cpp 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/demo/src/SampleResource.cpp 2008-08-22 18:08:01 UTC (rev 10467) @@ -4,13 +4,13 @@ { if (!sample) return; - destroy_sample(sample); + al_sample_destroy(sample); sample = 0; } bool SampleResource::load(void) { - sample = load_sample(filename.c_str()); + sample = al_load_sample(filename.c_str()); if (!sample) debug_message("Error loading sample %s\n", filename.c_str()); return sample != 0; Modified: allegro/branches/4.9/demo/src/a5teroids.cpp =================================================================== --- allegro/branches/4.9/demo/src/a5teroids.cpp 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/demo/src/a5teroids.cpp 2008-08-22 18:08:01 UTC (rev 10467) @@ -23,12 +23,12 @@ return 1; } - SAMPLE *game_music = load_sample(getResource("sfx/game_music.wav")); + ALLEGRO_SAMPLE *game_music = al_load_sample(getResource("sfx/game_music.wav")); if (!game_music) { printf("Failed to load %s\n", getResource("sfx/game_music.wav")); return 1; } - SAMPLE *title_music = load_sample(getResource("sfx/title_music.wav")); + ALLEGRO_SAMPLE *title_music = al_load_sample(getResource("sfx/title_music.wav")); if (!title_music) { printf("Failed to load %s\n", getResource("sfx/title_music.wav")); return 1; @@ -39,26 +39,32 @@ ResourceManager& rm = ResourceManager::getInstance(); Player *player = (Player *)rm.getData(RES_PLAYER); + ALLEGRO_VOICE *title_voice = al_voice_create(title_music); + ALLEGRO_VOICE *game_voice = al_voice_create(game_music); + al_voice_set_loop_mode(title_voice, ALLEGRO_AUDIO_ONE_DIR); + al_voice_set_loop_mode(game_voice, ALLEGRO_AUDIO_ONE_DIR); for (;;) { player->load(); al_rest(0.500); - play_sample(title_music, 255, 128, 1000, 1); + + al_voice_start(title_voice); + int choice = do_menu(); if (choice != 0) { if (joystick) al_release_joystick(joystick); break; } - stop_sample(title_music); + al_voice_stop(title_voice); al_rest(0.250); lastUFO = -1; canUFO = true; w.init(); - play_sample(game_music, 255, 128, 1000, 1); + al_voice_start(game_voice); int step = 0; long start = (long) (al_current_time() * 1000); @@ -87,7 +93,7 @@ } entities.clear(); - stop_sample(game_music); + al_voice_stop(game_voice); if (won) { // FIXME: show end screen Modified: allegro/branches/4.9/demo/src/sound.cpp =================================================================== --- allegro/branches/4.9/demo/src/sound.cpp 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/demo/src/sound.cpp 2008-08-22 18:08:01 UTC (rev 10467) @@ -1,9 +1,30 @@ #include "a5teroids.hpp" +#define MAX_VOICES 16 +static ALLEGRO_VOICE *voices[MAX_VOICES]; + +// FIXME: I want my play_sample back, this new API is.. not for me :( +static void bleh_need_better_sound_api_in_A5(ALLEGRO_SAMPLE *s) +{ + + for (int i = 0; i < MAX_VOICES; i++) { + if (!voices[i]) { + voices[i] = al_voice_create(s); + al_voice_start(voices[i]); + } + else { + if (!al_voice_is_playing(voices[i])) { + al_voice_destroy(voices[i]); + voices[i] = NULL; + } + } + } +} + void my_play_sample(int resourceID) { ResourceManager &rm = ResourceManager::getInstance(); - SAMPLE *s = (SAMPLE *)rm.getData(resourceID); - play_sample(s, 255, 128, 1000, 0); + ALLEGRO_SAMPLE *s = (ALLEGRO_SAMPLE *)rm.getData(resourceID); + bleh_need_better_sound_api_in_A5(s); } Modified: allegro/branches/4.9/include/allegro5/platform/aintlnx.h =================================================================== --- allegro/branches/4.9/include/allegro5/platform/aintlnx.h 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/include/allegro5/platform/aintlnx.h 2008-08-22 18:08:01 UTC (rev 10467) @@ -99,7 +99,6 @@ unsigned long flags; union { unsigned char vga[768]; - PALETTE allegro; } palette; } MODE_REGISTERS; Modified: allegro/branches/4.9/scons/all.scons =================================================================== --- allegro/branches/4.9/scons/all.scons 2008-08-22 14:37:38 UTC (rev 10466) +++ allegro/branches/4.9/scons/all.scons 2008-08-22 18:08:01 UTC (rev 10467) @@ -83,7 +83,8 @@ def demo(env,appendDir,buildDir,libDir): demoEnv = env.Clone() demoEnv.Append( CPPPATH = 'demo/include' ) - demoEnv.Append( CPPPATH = 'addons/font' ) + demoEnv.Append(CPPPATH = ['addons/font', 'addons/iio', + 'addons/audio', 'addons/acodec']) sources = Split(""" Asteroid.cpp BitmapResource.cpp @@ -119,8 +120,10 @@ wave.cpp """); demoEnv.Append( LIBPATH = libDir ) - demoEnv.Append( LIBS = [context.libraryName('a5_font')]) + demoEnv.Append(LIBS = [context.libraryName('a5_font')]) demoEnv.Append(LIBS = [context.libraryName('a5_iio')]) + demoEnv.Append(LIBS = [context.libraryName('a5_audio')]) + demoEnv.Append(LIBS = [context.libraryName('a5_acodec')]) demo = demoEnv.Program('demo/demo', appendDir(buildDir + '/demo/src', sources)) Alias('demo', demo) return demo @@ -193,7 +196,7 @@ # addon_dirs = ['#addons/font','#addons/acodec','#addons/audio'] # SConscript( dirs = addon_dirs, exports = 'context' ) -#context.addExtra(demo) +context.addExtra(demo) context.addExtra(examples) # context.addExtra(addons) # context.addExtra(tools) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tr...@us...> - 2008-08-22 20:56:47
|
Revision: 10468 http://alleg.svn.sourceforge.net/alleg/?rev=10468&view=rev Author: trentg Date: 2008-08-22 20:56:56 +0000 (Fri, 22 Aug 2008) Log Message: ----------- Added an intermediate ALLEGRO_DISPLAY_WIN, removed ALLEGRO_DISPLAY_OGL and put a ogl_extras pointer in ALLEGRO_DISPLAY. Modified Paths: -------------- allegro/branches/4.9/include/allegro5/internal/aintern_display.h allegro/branches/4.9/include/allegro5/internal/aintern_opengl.h allegro/branches/4.9/src/opengl/extensions.c allegro/branches/4.9/src/opengl/ogl_bitmap.c allegro/branches/4.9/src/opengl/ogl_display.c allegro/branches/4.9/src/opengl/ogl_draw.c allegro/branches/4.9/src/win/d3d.h allegro/branches/4.9/src/win/d3d_bmp.cpp allegro/branches/4.9/src/win/d3d_disp.cpp allegro/branches/4.9/src/win/wgl.h allegro/branches/4.9/src/win/wgl_disp.c allegro/branches/4.9/src/win/wmouse.c allegro/branches/4.9/src/win/wnewwin.c allegro/branches/4.9/src/xglx/xglx.h Modified: allegro/branches/4.9/include/allegro5/internal/aintern_display.h =================================================================== --- allegro/branches/4.9/include/allegro5/internal/aintern_display.h 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/include/allegro5/internal/aintern_display.h 2008-08-22 20:56:56 UTC (rev 10468) @@ -67,6 +67,10 @@ void (*toggle_frame)(ALLEGRO_DISPLAY *display, bool onoff); }; + +struct ALLEGRO_OGL_EXTRAS; + + struct ALLEGRO_DISPLAY { /* Must be first, so the display can be used as event source. */ @@ -77,9 +81,30 @@ int flags; int w, h; + struct ALLEGRO_OGL_EXTRAS *ogl_extras; + _AL_VECTOR bitmaps; /* A list of bitmaps created for this display. */ }; + +#ifdef ALLEGRO_WINDOWS +typedef struct ALLEGRO_DISPLAY_WIN ALLEGRO_DISPLAY_WIN; + +struct ALLEGRO_DISPLAY_WIN +{ + ALLEGRO_DISPLAY display; + + HWND window; + int mouse_range_x1; + int mouse_range_y1; + int mouse_range_x2; + int mouse_range_y2; + HCURSOR mouse_selected_hcursor; + bool mouse_cursor_shown; +}; +#endif + + //ALLEGRO_DISPLAY_INTERFACE *_al_display_d3ddummy_driver(void); void _al_clear_memory(ALLEGRO_COLOR *color); Modified: allegro/branches/4.9/include/allegro5/internal/aintern_opengl.h =================================================================== --- allegro/branches/4.9/include/allegro5/internal/aintern_opengl.h 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/include/allegro5/internal/aintern_opengl.h 2008-08-22 20:56:56 UTC (rev 10468) @@ -53,10 +53,8 @@ } OGL_PIXEL_FORMAT; -typedef struct ALLEGRO_DISPLAY_OGL +typedef struct ALLEGRO_OGL_EXTRAS { - ALLEGRO_DISPLAY display; /* This must be the first member. */ - /* 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. */ @@ -68,18 +66,15 @@ ALLEGRO_BITMAP_OGL *backbuffer; -} ALLEGRO_DISPLAY_OGL; +} ALLEGRO_OGL_EXTRAS; /* extensions */ int _al_ogl_look_for_an_extension(AL_CONST char *name, AL_CONST GLubyte *extensions); void _al_ogl_set_extensions(ALLEGRO_OGL_EXT_API *ext); -void _al_ogl_manage_extensions(ALLEGRO_DISPLAY_OGL *disp); -void _al_ogl_unmanage_extensions(ALLEGRO_DISPLAY_OGL *disp); +void _al_ogl_manage_extensions(ALLEGRO_DISPLAY *disp); +void _al_ogl_unmanage_extensions(ALLEGRO_DISPLAY *disp); -/* draw */ -void _al_ogl_add_drawing_functions(ALLEGRO_DISPLAY_INTERFACE *vt); - /* 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, @@ -93,4 +88,9 @@ 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); + #endif Modified: allegro/branches/4.9/src/opengl/extensions.c =================================================================== --- allegro/branches/4.9/src/opengl/extensions.c 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/src/opengl/extensions.c 2008-08-22 20:56:56 UTC (rev 10468) @@ -22,6 +22,7 @@ #include "allegro5/display_new.h" #include "allegro5/opengl/gl_ext.h" #include "allegro5/internal/aintern_opengl.h" +#include "allegro5/internal/aintern_display.h" /* We need some driver specific details not worth of a vtable entry. */ @@ -148,13 +149,13 @@ */ float al_opengl_version(void) { - ALLEGRO_DISPLAY_OGL *ogl_disp; + ALLEGRO_DISPLAY *ogl_disp; - ogl_disp = (ALLEGRO_DISPLAY_OGL*)al_get_current_display(); + ogl_disp = (ALLEGRO_DISPLAY*)al_get_current_display(); if (!ogl_disp) return 0.0f; - return ogl_disp->ogl_info.version; + return ogl_disp->ogl_extras->ogl_info.version; } @@ -338,7 +339,7 @@ static int _ogl_is_extension_supported(AL_CONST char *extension, - ALLEGRO_DISPLAY_OGL *disp) + ALLEGRO_DISPLAY *disp) { int ret; @@ -408,7 +409,7 @@ if (!(disp->flags & ALLEGRO_OPENGL)) return FALSE; - return _ogl_is_extension_supported(extension, (ALLEGRO_DISPLAY_OGL*)disp); + return _ogl_is_extension_supported(extension, (ALLEGRO_DISPLAY*)disp); } @@ -560,7 +561,7 @@ * This functions fills the extensions API table and extension list * structures and displays on the log file which extensions are available. */ -void _al_ogl_manage_extensions(ALLEGRO_DISPLAY_OGL *gl_disp) +void _al_ogl_manage_extensions(ALLEGRO_DISPLAY *gl_disp) { //AL_CONST GLubyte *buf; #if defined ALLEGRO_MACOSX @@ -612,21 +613,21 @@ CFRelease(bundle_url); #endif - fill_in_info_struct(glGetString(GL_RENDERER), &(gl_disp->ogl_info)); + fill_in_info_struct(glGetString(GL_RENDERER), &(gl_disp->ogl_extras->ogl_info)); /* Create & load extension API table */ ext_api = create_extension_api_table(); load_extensions(ext_api); - gl_disp->extension_api = ext_api; + gl_disp->ogl_extras->extension_api = ext_api; /* Create the list of supported extensions. */ ext_list = create_extension_list(); - gl_disp->extension_list = ext_list; + gl_disp->ogl_extras->extension_list = ext_list; /* Fill the list. */ #define AGL_EXT(name, ver) { \ ext_list->ALLEGRO_GL_##name = _ogl_is_extension_supported("GL_" #name, gl_disp) \ - || (gl_disp->ogl_info.version >= ver && ver > 0); \ + || (gl_disp->ogl_extras->ogl_info.version >= ver && ver > 0); \ } #include "allegro5/opengl/GLext/gl_ext_list.h" #undef AGL_EXT @@ -634,14 +635,14 @@ #ifdef ALLEGRO_UNIX #define AGL_EXT(name, ver) { \ ext_list->ALLEGRO_GLX_##name = _ogl_is_extension_supported("GLX_" #name, gl_disp) \ - || (gl_disp->ogl_info.version >= ver && ver > 0); \ + || (gl_disp->ogl_extras->ogl_info.version >= ver && ver > 0); \ } #include "allegro5/opengl/GLext/glx_ext_list.h" #undef AGL_EXT #elif defined ALLEGRO_WINDOWS #define AGL_EXT(name, ver) { \ ext_list->ALLEGRO_WGL_##name = _ogl_is_extension_supported("WGL_" #name, gl_disp) \ - || (gl_disp->ogl_info.version >= ver && ver > 0); \ + || (gl_disp->ogl_extras->ogl_info.version >= ver && ver > 0); \ } #include "allegro5/opengl/GLext/wgl_ext_list.h" #undef AGL_EXT @@ -661,20 +662,20 @@ /* Get number of texture units */ if (ext_list->ALLEGRO_GL_ARB_multitexture) { glGetIntegerv(GL_MAX_TEXTURE_UNITS, - (GLint *) & gl_disp->ogl_info.num_texture_units); + (GLint *) & gl_disp->ogl_extras->ogl_info.num_texture_units); } else { - gl_disp->ogl_info.num_texture_units = 1; + gl_disp->ogl_extras->ogl_info.num_texture_units = 1; } /* Get max texture size */ glGetIntegerv(GL_MAX_TEXTURE_SIZE, - (GLint *) & gl_disp->ogl_info.max_texture_size); + (GLint *) & gl_disp->ogl_extras->ogl_info.max_texture_size); /* Note: Voodoo (even V5) don't seem to correctly support * packed pixel formats. Disabling them for those cards. */ - ext_list->ALLEGRO_GL_EXT_packed_pixels &= !gl_disp->ogl_info.is_voodoo; + ext_list->ALLEGRO_GL_EXT_packed_pixels &= !gl_disp->ogl_extras->ogl_info.is_voodoo; if (ext_list->ALLEGRO_GL_EXT_packed_pixels) { @@ -707,7 +708,7 @@ else if (strstr(vendor, "ATI Technologies")) { if (!strstr((const char *)glGetString(GL_EXTENSIONS), "GL_ARB_texture_non_power_of_two") - && gl_disp->ogl_info.version >= 2.0f) { + && gl_disp->ogl_extras->ogl_info.version >= 2.0f) { ext_list->ALLEGRO_GL_ARB_texture_non_power_of_two = 0; } } @@ -716,15 +717,15 @@ -/* Function: al_get_opengl_extension_list +/* Function: al_get_opengl_ogl_extras->extension_list * Returns the list of OpenGL extensions supported by Allegro, for * the current display. * * Allegro will keep information about all extensions it knows about in a - * structure returned by <al_get_opengl_extension_list>. + * structure returned by <al_get_opengl_ogl_extras->extension_list>. * * For example: - * > if (al_get_opengl_extension_list()->ALLEGRO_GL_ARB_multitexture) { use it } + * > if (al_get_opengl_ogl_extras->extension_list()->ALLEGRO_GL_ARB_multitexture) { use it } * * The extension will be set to true if available for the current display and * false otherwise. This means to use the definitions and functions from an @@ -745,7 +746,7 @@ disp = al_get_current_display(); ASSERT(disp); - return ((ALLEGRO_DISPLAY_OGL*)disp)->extension_list; + return ((ALLEGRO_DISPLAY*)disp)->ogl_extras->extension_list; } @@ -775,12 +776,12 @@ -void _al_ogl_unmanage_extensions(ALLEGRO_DISPLAY_OGL *gl_disp) +void _al_ogl_unmanage_extensions(ALLEGRO_DISPLAY *gl_disp) { - destroy_extension_api_table(gl_disp->extension_api); - destroy_extension_list(gl_disp->extension_list); - gl_disp->extension_api = NULL; - gl_disp->extension_list = NULL; + destroy_extension_api_table(gl_disp->ogl_extras->extension_api); + destroy_extension_list(gl_disp->ogl_extras->extension_list); + gl_disp->ogl_extras->extension_api = NULL; + gl_disp->ogl_extras->extension_list = NULL; #ifdef ALLEGRO_MACOSX CFRelease(opengl_bundle_ref); Modified: allegro/branches/4.9/src/opengl/ogl_bitmap.c =================================================================== --- allegro/branches/4.9/src/opengl/ogl_bitmap.c 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/src/opengl/ogl_bitmap.c 2008-08-22 20:56:56 UTC (rev 10468) @@ -136,8 +136,8 @@ // FIXME: need format conversion if they don't match ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_BITMAP_OGL *ogl_target = (ALLEGRO_BITMAP_OGL *)target; - ALLEGRO_DISPLAY_OGL *disp = (void *)al_get_current_display(); - if (disp->opengl_target != ogl_target) { + ALLEGRO_DISPLAY *disp = (void *)al_get_current_display(); + if (disp->ogl_extras->opengl_target != ogl_target) { _al_draw_bitmap_memory(bitmap, x, y, flags); return; } @@ -155,8 +155,8 @@ // FIXME: need format conversion if they don't match ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_BITMAP_OGL *ogl_target = (ALLEGRO_BITMAP_OGL *)target; - ALLEGRO_DISPLAY_OGL *disp = (void *)al_get_current_display(); - if (disp->opengl_target != ogl_target) { + ALLEGRO_DISPLAY *disp = (void *)al_get_current_display(); + if (disp->ogl_extras->opengl_target != ogl_target) { _al_draw_scaled_bitmap_memory(bitmap, sx, sy, sw, sh, dx, dy, dw, dh, flags); return; @@ -174,8 +174,8 @@ // FIXME: need format conversion if they don't match ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_BITMAP_OGL *ogl_target = (ALLEGRO_BITMAP_OGL *)target; - ALLEGRO_DISPLAY_OGL *disp = (void *)al_get_current_display(); - if (disp->opengl_target != ogl_target) { + ALLEGRO_DISPLAY *disp = (void *)al_get_current_display(); + if (disp->ogl_extras->opengl_target != ogl_target) { _al_draw_bitmap_region_memory(bitmap, sx, sy, sw, sh, dx, dy, flags); return; } @@ -192,8 +192,8 @@ // FIXME: need format conversion if they don't match ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_BITMAP_OGL *ogl_target = (ALLEGRO_BITMAP_OGL *)target; - ALLEGRO_DISPLAY_OGL *disp = (void *)al_get_current_display(); - if (disp->opengl_target != ogl_target) { + ALLEGRO_DISPLAY *disp = (void *)al_get_current_display(); + if (disp->ogl_extras->opengl_target != ogl_target) { _al_draw_rotated_bitmap_memory(bitmap, cx, cy, dx, dy, angle, flags); return; } @@ -212,8 +212,8 @@ // FIXME: need format conversion if they don't match ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_BITMAP_OGL *ogl_target = (ALLEGRO_BITMAP_OGL *)target; - ALLEGRO_DISPLAY_OGL *disp = (void *)al_get_current_display(); - if (disp->opengl_target != ogl_target) { + ALLEGRO_DISPLAY *disp = (void *)al_get_current_display(); + if (disp->ogl_extras->opengl_target != ogl_target) { _al_draw_rotated_scaled_bitmap_memory(bitmap, cx, cy, dx, dy, xscale, yscale, angle, flags); return; @@ -315,10 +315,10 @@ static void ogl_update_clipping_rectangle(ALLEGRO_BITMAP *bitmap) { ALLEGRO_DISPLAY *display = al_get_current_display(); - ALLEGRO_DISPLAY_OGL *ogl_disp = (void *)display; + ALLEGRO_DISPLAY *ogl_disp = (void *)display; ALLEGRO_BITMAP_OGL *ogl_bitmap = (void *)bitmap; - if (ogl_disp->opengl_target == ogl_bitmap) { + if (ogl_disp->ogl_extras->opengl_target == ogl_bitmap) { _al_ogl_setup_bitmap_clipping(bitmap); } } @@ -478,7 +478,7 @@ ALLEGRO_BITMAP *_al_ogl_create_bitmap(ALLEGRO_DISPLAY *d, int w, int h) { - const ALLEGRO_DISPLAY_OGL *ogl_dpy = (void *)d; + const ALLEGRO_DISPLAY *ogl_dpy = (void *)d; ALLEGRO_BITMAP_OGL *bitmap; int format = al_get_new_bitmap_format(); const int flags = al_get_new_bitmap_flags(); @@ -487,7 +487,7 @@ int pitch; size_t bytes; - if (ogl_dpy->extension_list->ALLEGRO_GL_ARB_texture_non_power_of_two) { + if (ogl_dpy->ogl_extras->extension_list->ALLEGRO_GL_ARB_texture_non_power_of_two) { true_w = w; true_h = h; } Modified: allegro/branches/4.9/src/opengl/ogl_display.c =================================================================== --- allegro/branches/4.9/src/opengl/ogl_display.c 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/src/opengl/ogl_display.c 2008-08-22 20:56:56 UTC (rev 10468) @@ -21,7 +21,7 @@ void _al_ogl_set_target_bitmap(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *bitmap) { - ALLEGRO_DISPLAY_OGL *ogl_disp = (void *)display; + ALLEGRO_DISPLAY *ogl_disp = (void *)display; /* If it is a memory bitmap, this display vtable entry would not even get * called, so the cast below is always safe. */ @@ -30,7 +30,7 @@ if (!ogl_bitmap->is_backbuffer) { if (ogl_bitmap->fbo) { /* Bind to the FBO. */ - ASSERT(ogl_disp->extension_list->ALLEGRO_GL_EXT_framebuffer_object); + ASSERT(ogl_disp->ogl_extras->extension_list->ALLEGRO_GL_EXT_framebuffer_object); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, ogl_bitmap->fbo); /* Attach the texture. */ @@ -41,7 +41,7 @@ // FIXME: handle this somehow! } - ogl_disp->opengl_target = ogl_bitmap; + ogl_disp->ogl_extras->opengl_target = ogl_bitmap; glViewport(0, 0, bitmap->w, bitmap->h); glMatrixMode(GL_PROJECTION); @@ -61,10 +61,10 @@ } } else { - if (ogl_disp->extension_list->ALLEGRO_GL_EXT_framebuffer_object) { + if (ogl_disp->ogl_extras->extension_list->ALLEGRO_GL_EXT_framebuffer_object) { glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } - ogl_disp->opengl_target = ogl_bitmap; + ogl_disp->ogl_extras->opengl_target = ogl_bitmap; glViewport(0, 0, display->w, display->h); @@ -79,7 +79,7 @@ glLoadIdentity(); } - if (ogl_disp->opengl_target == ogl_bitmap) { + if (ogl_disp->ogl_extras->opengl_target == ogl_bitmap) { _al_ogl_setup_bitmap_clipping(bitmap); } } @@ -115,8 +115,8 @@ ALLEGRO_BITMAP *_al_ogl_get_backbuffer(ALLEGRO_DISPLAY *d) { - ALLEGRO_DISPLAY_OGL *dpy = (void *)d; - return (ALLEGRO_BITMAP *)dpy->backbuffer; + ALLEGRO_DISPLAY *dpy = (void *)d; + return (ALLEGRO_BITMAP *)dpy->ogl_extras->backbuffer; } Modified: allegro/branches/4.9/src/opengl/ogl_draw.c =================================================================== --- allegro/branches/4.9/src/opengl/ogl_draw.c 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/src/opengl/ogl_draw.c 2008-08-22 20:56:56 UTC (rev 10468) @@ -41,12 +41,12 @@ /* Dummy implementation of clear. */ static void ogl_clear(ALLEGRO_DISPLAY *d, ALLEGRO_COLOR *color) { - ALLEGRO_DISPLAY_OGL *ogl_disp = (void *)d; + ALLEGRO_DISPLAY *ogl_disp = (void *)d; ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_BITMAP_OGL *ogl_target = (void *)target; unsigned char r, g, b, a; - if (!ogl_target->is_backbuffer && ogl_disp->opengl_target != ogl_target) { + if (!ogl_target->is_backbuffer && ogl_disp->ogl_extras->opengl_target != ogl_target) { _al_clear_memory(color); return; } @@ -63,11 +63,11 @@ static void ogl_draw_line(ALLEGRO_DISPLAY *d, float fx, float fy, float tx, float ty, ALLEGRO_COLOR *color) { - ALLEGRO_DISPLAY_OGL *ogl_disp = (void *)d; + ALLEGRO_DISPLAY *ogl_disp = (void *)d; ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_BITMAP_OGL *ogl_target = (void *)target; - if (!ogl_target->is_backbuffer && ogl_disp->opengl_target != ogl_target) { + if (!ogl_target->is_backbuffer && ogl_disp->ogl_extras->opengl_target != ogl_target) { _al_draw_line_memory(fx, fy, tx, ty, color); return; } @@ -93,11 +93,11 @@ static void ogl_draw_rectangle(ALLEGRO_DISPLAY *d, float tlx, float tly, float brx, float bry, ALLEGRO_COLOR *color, int flags) { - ALLEGRO_DISPLAY_OGL *ogl_disp = (void *)d; + ALLEGRO_DISPLAY *ogl_disp = (void *)d; ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_BITMAP_OGL *ogl_target = (void *)target; - if (!ogl_target->is_backbuffer && ogl_disp->opengl_target != ogl_target) { + if (!ogl_target->is_backbuffer && ogl_disp->ogl_extras->opengl_target != ogl_target) { _al_draw_rectangle_memory(tlx, tly, brx, bry, color, flags); return; } Modified: allegro/branches/4.9/src/win/d3d.h =================================================================== --- allegro/branches/4.9/src/win/d3d.h 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/src/win/d3d.h 2008-08-22 20:56:56 UTC (rev 10468) @@ -43,10 +43,9 @@ typedef struct ALLEGRO_DISPLAY_D3D { - ALLEGRO_DISPLAY display; /* This must be the first member. */ + ALLEGRO_DISPLAY_WIN win_display; /* This must be the first member. */ /* Driver specifics */ - HWND window; LPDIRECT3DDEVICE9 device; LPDIRECT3DSURFACE9 render_target; @@ -65,14 +64,6 @@ ALLEGRO_BITMAP_D3D backbuffer_bmp; - int mouse_range_x1; - int mouse_range_y1; - int mouse_range_x2; - int mouse_range_y2; - - HCURSOR mouse_selected_hcursor; - bool mouse_cursor_shown; - bool device_lost; bool ignore_ack; // al_resize_display doesn't need acknowledge_resize Modified: allegro/branches/4.9/src/win/d3d_bmp.cpp =================================================================== --- allegro/branches/4.9/src/win/d3d_bmp.cpp 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/src/win/d3d_bmp.cpp 2008-08-22 20:56:56 UTC (rev 10468) @@ -360,6 +360,7 @@ void _al_d3d_release_default_pool_textures(ALLEGRO_DISPLAY_D3D *disp) { unsigned int i; + ALLEGRO_DISPLAY *al_display = (ALLEGRO_DISPLAY *)disp; if (!_al_d3d_render_to_texture_supported()) return; @@ -373,8 +374,8 @@ } */ - for (i = 0; i < disp->display.bitmaps._size; i++) { - ALLEGRO_BITMAP **bptr = (ALLEGRO_BITMAP **)_al_vector_ref(&disp->display.bitmaps, i); + for (i = 0; i < al_display->bitmaps._size; i++) { + ALLEGRO_BITMAP **bptr = (ALLEGRO_BITMAP **)_al_vector_ref(&al_display->bitmaps, i); ALLEGRO_BITMAP *albmp = *bptr; ALLEGRO_BITMAP_D3D *d3d_bmp; if (albmp->flags & ALLEGRO_MEMORY_BITMAP) Modified: allegro/branches/4.9/src/win/d3d_disp.cpp =================================================================== --- allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-22 18:08:01 UTC (rev 10467) +++ allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-22 20:56:56 UTC (rev 10468) @@ -337,9 +337,10 @@ { int ret; bool reset_all = false; + ALLEGRO_DISPLAY_WIN *win_display = &d->win_display; + ALLEGRO_DISPLAY *al_display = &win_display->display; - TRACE("before check_mode\n"); - if (!d3d_check_mode(d->display.w, d->display.h, format, refresh_rate, d->adapter)) { + if (!d3d_check_mode(al_display->w, al_display->h, format, refresh_rate, d->adapter)) { TRACE("d3d_create_fullscreen_device: Mode not supported.\n"); return 0; } @@ -347,8 +348,8 @@ ZeroMemory(&d3d_pp, sizeof(d3d_pp)); d3d_pp.BackBufferFormat = (D3DFORMAT)_al_format_to_d3d(format); - d3d_pp.BackBufferWidth = d->display.w; - d3d_pp.BackBufferHeight = d->display.h; + d3d_pp.BackBufferWidth = al_display->w; + d3d_pp.BackBufferHeight = al_display->h; d3d_pp.BackBufferCount = 1; d3d_pp.Windowed = 0; d3d_pp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; @@ -359,7 +360,7 @@ else { d3d_pp.SwapEffect = D3DSWAPEFFECT_DISCARD; } - d3d_pp.hDeviceWindow = d->window; + d3d_pp.hDeviceWindow = win_display->window; TRACE("d3d_pp.hDeviceWindow=%p\n", d3d_pp.hDeviceWindow); TRACE("getting refresh rate\n"); @@ -373,24 +374,20 @@ TRACE("HERE before if is vista\n"); if (ffw_set == false) { - fullscreen_focus_window = d->window; + fullscreen_focus_window = win_display->window; ffw_set = true; } else { reset_all = true; } - TRACE("ffw=%p d->window=%p\n", fullscreen_focus_window, d->window); - #ifdef WANT_D3D9EX if (is_vista) { - TRACE("is_vista=true\n"); - D3DDISPLAYMODEEX mode; IDirect3D9Ex *d3d = (IDirect3D9Ex *)_al_d3d; mode.Size = sizeof(D3DDISPLAYMODEEX); - mode.Width = d->display.w; - mode.Height = d->display.h; + mode.Width = al_display->w; + mode.Height = al_display->h; mode.RefreshRate = d3d_pp.FullScreen_RefreshRateInHz; mode.Format = d3d_pp.BackBufferFormat; mode.ScanLineOrdering = D3DSCANLINEORDERING_PROGRESSIVE; @@ -556,13 +553,15 @@ int format, int refresh_rate, int flags) { HRESULT hr; + ALLEGRO_DISPLAY_WIN *win_display = &d->win_display; + ALLEGRO_DISPLAY *al_display = &win_display->display; TRACE("in d3d_create_device\n"); ZeroMemory(&d3d_pp, sizeof(d3d_pp)); d3d_pp.BackBufferFormat = (D3DFORMAT)_al_format_to_d3d(format); - d3d_pp.BackBufferWidth = d->display.w; - d3d_pp.BackBufferHeight = d->display.h; + d3d_pp.BackBufferWidth = al_display->w; + d3d_pp.BackBufferHeight = al_display->h; d3d_pp.BackBufferCount = 1; d3d_pp.Windowed = 1; d3d_pp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; @@ -573,10 +572,10 @@ else { d3d_pp.SwapEffect = D3DSWAPEFFECT_DISCARD; } - d3d_pp.hDeviceWindow = d->window; + d3d_pp.hDeviceWindow = win_display->window; if ((hr = _al_d3d->CreateDevice(D3DADAPTER_DEFAULT, - D3DDEVTYPE_HAL, d->window, + D3DDEVTYPE_HAL, win_display->window, D3DCREATE_HARDWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE|D3DCREATE_MULTITHREADED, &d3d_pp, (LPDIRECT3DDEVICE9 *)&d->device)) != D3D_OK) { if (hr == D3DERR_NOTAVAILABLE) { @@ -657,34 +656,36 @@ } -static void d3d_destroy_display_internals(ALLEGRO_DISPLAY_D3D *display) +static void d3d_destroy_display_internals(ALLEGRO_DISPLAY_D3D *d3d_display) { - display->device->EndScene(); + ALLEGRO_DISPLAY_WIN *win_display = &d3d_display->win_display; + + d3d_display->device->EndScene(); - d3d_release_bitmaps((ALLEGRO_DISPLAY *)display); + d3d_release_bitmaps((ALLEGRO_DISPLAY *)d3d_display); //_al_d3d_release_default_pool_textures(); d3d_release_current_target(false); - if (display->render_target->Release() != 0) { - TRACE("d3d_destroy_display_internals: (bb) ref count not 0\n"); + if (d3d_display->render_target->Release() != 0) { + TRACE("d3d_destroy_d3d_display_internals: (bb) ref count not 0\n"); } - display->end_thread = true; - while (!display->thread_ended) + d3d_display->end_thread = true; + while (!d3d_display->thread_ended) al_rest(0.001); _al_win_ungrab_input(); - SendMessage(display->window, _al_win_msg_suicide, 0, 0); + SendMessage(win_display->window, _al_win_msg_suicide, 0, 0); } static void d3d_destroy_display(ALLEGRO_DISPLAY *display) { ALLEGRO_SYSTEM_WIN *system = (ALLEGRO_SYSTEM_WIN *)al_system_driver(); - ALLEGRO_DISPLAY_D3D *d3d_disp = (ALLEGRO_DISPLAY_D3D *)display; + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *)display; - d3d_destroy_display_internals(d3d_disp); + d3d_destroy_display_internals(d3d_display); _al_vector_find_and_delete(&system->system.displays, &display); @@ -702,8 +703,6 @@ _al_event_source_free(&display->es); - //_al_mutex_destroy(&d3d_disp->mutex); - _al_vector_free(&display->bitmaps); _AL_FREE(display); } @@ -717,45 +716,46 @@ } } -static bool _al_d3d_reset_device(ALLEGRO_DISPLAY_D3D *disp) +static bool _al_d3d_reset_device(ALLEGRO_DISPLAY_D3D *d3d_display) { ALLEGRO_BITMAP *curr = al_get_target_bitmap(); bool reset_target = false; + ALLEGRO_DISPLAY_WIN *win_display = &d3d_display->win_display; + ALLEGRO_DISPLAY *al_display = &win_display->display; - TRACE("in reset\n"); - _al_d3d_prepare_for_reset(disp); + _al_d3d_prepare_for_reset(d3d_display); - if (disp->display.flags & ALLEGRO_FULLSCREEN) { + if (al_display->flags & ALLEGRO_FULLSCREEN) { HRESULT hr; ZeroMemory(&d3d_pp, sizeof(d3d_pp)); - d3d_pp.BackBufferFormat = (D3DFORMAT)_al_format_to_d3d(disp->display.format); - d3d_pp.BackBufferWidth = disp->display.w; - d3d_pp.BackBufferHeight = disp->display.h; + d3d_pp.BackBufferFormat = (D3DFORMAT)_al_format_to_d3d(al_display->format); + d3d_pp.BackBufferWidth = al_display->w; + d3d_pp.BackBufferHeight = al_display->h; d3d_pp.BackBufferCount = 1; d3d_pp.Windowed = 0; d3d_pp.SwapEffect = D3DSWAPEFFECT_DISCARD; - d3d_pp.hDeviceWindow = disp->window; + d3d_pp.hDeviceWindow = win_display->window; d3d_pp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; d3d_pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - if (disp->display.flags & ALLEGRO_SINGLEBUFFER) { + if (al_display->flags & ALLEGRO_SINGLEBUFFER) { d3d_pp.SwapEffect = D3DSWAPEFFECT_COPY; } else { d3d_pp.SwapEffect = D3DSWAPEFFECT_DISCARD; } - if (disp->display.refresh_rate) { + if (al_display->refresh_rate) { d3d_pp.FullScreen_RefreshRateInHz = - disp->display.refresh_rate; + al_display->refresh_rate; } else { - d3d_pp.FullScreen_RefreshRateInHz = d3d_get_default_refresh_rate(disp->adapter); + d3d_pp.FullScreen_RefreshRateInHz = d3d_get_default_refresh_rate(d3d_display->adapter); } #ifdef WANT_D3D9EX if (is_vista) { D3DDISPLAYMODEEX mode; - IDirect3DDevice9Ex *dev = (IDirect3DDevice9Ex *)disp->device; + IDirect3DDevice9Ex *dev = (IDirect3DDevice9Ex *)d3d_display->device; mode.Size = sizeof(D3DDISPLAYMODEEX); mode.Width = d3d_pp.BackBufferWidth; mode.Height = d3d_pp.BackBufferHeight; @@ -766,7 +766,7 @@ } else { #endif - hr = disp->device->Reset(&d3d_pp); + hr = d3d_display->device->Reset(&d3d_pp); #ifdef WANT_D3D9EX } #endif @@ -795,18 +795,18 @@ unsigned int i; ZeroMemory(&d3d_pp, sizeof(d3d_pp)); - d3d_pp.BackBufferFormat = (D3DFORMAT)_al_format_to_d3d(disp->display.format); - d3d_pp.BackBufferWidth = disp->display.w; - d3d_pp.BackBufferHeight = disp->display.h; + d3d_pp.BackBufferFormat = (D3DFORMAT)_al_format_to_d3d(al_display->format); + d3d_pp.BackBufferWidth = al_display->w; + d3d_pp.BackBufferHeight = al_display->h; d3d_pp.BackBufferCount = 1; d3d_pp.Windowed = 1; d3d_pp.SwapEffect = D3DSWAPEFFECT_DISCARD; - d3d_pp.hDeviceWindow = disp->window; + d3d_pp.hDeviceWindow = win_display->window; d3d_pp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; /* Try to reset a few times */ for (i = 0; i < 5; i++) { - if (disp->device->Reset(&d3d_pp) == D3D_OK) { + if (d3d_display->device->Reset(&d3d_pp) == D3D_OK) { break; } al_rest(0.100); @@ -817,11 +817,11 @@ } } - disp->device->GetRenderTarget(0, &disp->render_target); + d3d_display->device->GetRenderTarget(0, &d3d_display->render_target); - _al_d3d_refresh_texture_memory(disp); + _al_d3d_refresh_texture_memory(d3d_display); - d3d_reset_state(disp); + d3d_reset_state(d3d_display); return 1; } @@ -954,7 +954,9 @@ */ static void d3d_display_thread_proc(void *arg) { - ALLEGRO_DISPLAY_D3D *d; + ALLEGRO_DISPLAY_D3D *d3d_display; + ALLEGRO_DISPLAY_WIN *win_display; + ALLEGRO_DISPLAY *al_display; DWORD result; MSG msg; HRESULT hr; @@ -963,12 +965,14 @@ D3DCAPS9 caps; int new_format; - d = params->display; + d3d_display = params->display; + win_display = &d3d_display->win_display; + al_display = &win_display->display; - new_format = d->display.format; + new_format = al_display->format; - if (!_al_pixel_format_is_real(d->display.format)) { - int f = d3d_choose_display_format(d->display.format); + if (!_al_pixel_format_is_real(al_display->format)) { + int f = d3d_choose_display_format(al_display->format); if (f < 0) { params->init_failed = true; return; @@ -976,15 +980,15 @@ new_format = f; } - if (!d3d_parameters_are_valid(d->display.format, d->display.refresh_rate, d->display.flags)) { + if (!d3d_parameters_are_valid(al_display->format, al_display->refresh_rate, al_display->flags)) { TRACE("d3d_display_thread_proc: Invalid parameters.\n"); params->init_failed = true; return; } - d->display.format = new_format; + al_display->format = new_format; - if (d->faux_fullscreen) { + if (d3d_display->faux_fullscreen) { ALLEGRO_MONITOR_INFO mi; DEVMODE dm; bool found = true; @@ -996,7 +1000,7 @@ for (i = 0; i < (int)d3d_created_displays._size; i++) { ALLEGRO_DISPLAY_D3D **dptr = (ALLEGRO_DISPLAY_D3D **)_al_vector_ref(&d3d_created_displays, i); ALLEGRO_DISPLAY_D3D *disp = *dptr; - if (disp != d) { + if (disp != d3d_display) { TRACE("Destroying internals\n"); d3d_destroy_display_internals(disp); disp->end_thread = false; @@ -1007,8 +1011,8 @@ } } - TRACE("Here d->adapter=%d\n", d->adapter); - al_get_monitor_info(d->adapter, &mi); + TRACE("Here d3d_display->adapter=%d\n", d3d_display->adapter); + al_get_monitor_info(d3d_display->adapter, &mi); TRACE("mi.x1=%d mi.y1=%d mi.x2=%d mi.y2=%d\n", mi.x1, mi.y1, mi.x2, mi.y2); /* Yes this is an "infinite" loop (suggested by MS on msdn) */ for (int i = 0; ; i++) { @@ -1034,17 +1038,17 @@ params->init_failed = true; return; } - if (d->display.refresh_rate) { - refresh_rate = d->display.refresh_rate; + if (al_display->refresh_rate) { + refresh_rate = al_display->refresh_rate; } else { - refresh_rate = d3d_get_default_refresh_rate(d->adapter); + refresh_rate = d3d_get_default_refresh_rate(d3d_display->adapter); } - strcpy(d->device_name, dd.DeviceName); + strcpy(d3d_display->device_name, dd.DeviceName); TRACE("going to call _al_win_create_faux_fullscreen_window\n"); - d->window = _al_win_create_faux_fullscreen_window(dd.DeviceName, (ALLEGRO_DISPLAY *)d, - mi.x1, mi.y1, d->display.w, d->display.h, - refresh_rate, d->display.flags); + win_display->window = _al_win_create_faux_fullscreen_window(dd.DeviceName, al_display, + mi.x1, mi.y1, al_display->w, al_display->h, + refresh_rate, al_display->flags); TRACE("Called _al_win_create_faux_fullscreen_window\n"); if (already_fullscreen) { @@ -1053,7 +1057,7 @@ for (i = 0; i < (int)d3d_created_displays._size; i++) { ALLEGRO_DISPLAY_D3D **dptr = (ALLEGRO_DISPLAY_D3D **)_al_vector_ref(&d3d_created_displays, i); ALLEGRO_DISPLAY_D3D *disp = *dptr; - if (disp != d) { + if (disp != d3d_display) { TRACE("Creating internals\n"); disp->faux_fullscreen = true; TRACE("Before create, disp=%p\n", disp); @@ -1067,28 +1071,28 @@ } else { TRACE("Normal window\n"); - d->window = _al_win_create_window((ALLEGRO_DISPLAY *)d, d->display.w, - d->display.h, d->display.flags); + win_display->window = _al_win_create_window(al_display, al_display->w, + al_display->h, al_display->flags); } - if (!d->window) { + if (!win_display->window) { params->init_failed = true; return; } - if (!(d->display.flags & ALLEGRO_FULLSCREEN) || d->faux_fullscreen) { - if (!d3d_create_device(d, d->display.format, d->display.refresh_rate, d->display.flags)) { - d->thread_ended = true; - d3d_destroy_display((ALLEGRO_DISPLAY *)d); + if (!(al_display->flags & ALLEGRO_FULLSCREEN) || d3d_display->faux_fullscreen) { + if (!d3d_create_device(d3d_display, al_display->format, al_display->refresh_rate, al_display->flags)) { + d3d_display->thread_ended = true; + d3d_destroy_display(al_display); params->init_failed = true; return; } } else { TRACE("Creating real fullscreen device\n"); - if (!d3d_create_fullscreen_device(d, d->display.format, d->display.refresh_rate, d->display.flags)) { - d->thread_ended = true; - d3d_destroy_display((ALLEGRO_DISPLAY *)d); + if (!d3d_create_fullscreen_device(d3d_display, al_display->format, al_display->refresh_rate, al_display->flags)) { + d3d_display->thread_ended = true; + d3d_destroy_display(al_display); params->init_failed = true; return; } @@ -1096,15 +1100,15 @@ } - d->device->GetDeviceCaps(&caps); + d3d_display->device->GetDeviceCaps(&caps); d3d_can_wait_for_vsync = ((caps.Caps & D3DCAPS_READ_SCANLINE) != 0); - d->thread_ended = false; + d3d_display->thread_ended = false; - d->initialized = true; + d3d_display->initialized = true; for (;;) { - if (d->end_thread) { + if (d3d_display->end_thread) { break; } /* FIXME: How long should we wait? */ @@ -1123,90 +1127,76 @@ goto End; } } - hr = d->device->TestCooperativeLevel(); + hr = d3d_display->device->TestCooperativeLevel(); if (hr == D3D_OK) { - d->device_lost = false; + d3d_display->device_lost = false; } else if (hr == D3DERR_DEVICELOST) { /* device remains lost */ if (!lost_event_generated) { - _al_event_source_lock(&d->display.es); - if (_al_event_source_needs_to_generate_event(&d->display.es)) { - ALLEGRO_EVENT *event = _al_event_source_get_unused_event(&d->display.es); + _al_event_source_lock(&al_display->es); + if (_al_event_source_needs_to_generate_event(&al_display->es)) { + ALLEGRO_EVENT *event = _al_event_source_get_unused_event(&al_display->es); if (event) { event->display.type = ALLEGRO_EVENT_DISPLAY_LOST; event->display.timestamp = al_current_time(); - _al_event_source_emit_event(&d->display.es, event); + _al_event_source_emit_event(&al_display->es, event); } } - _al_event_source_unlock(&d->display.es); + _al_event_source_unlock(&al_display->es); lost_event_generated = true; } } else if (hr == D3DERR_DEVICENOTRESET) { - if (_al_d3d_reset_device(d)) { - d->device_lost = false; - _al_event_source_lock(&d->display.es); - if (_al_event_source_needs_to_generate_event(&d->display.es)) { - ALLEGRO_EVENT *event = _al_event_source_get_unused_event(&d->display.es); + if (_al_d3d_reset_device(d3d_display)) { + d3d_display->device_lost = false; + _al_event_source_lock(&al_display->es); + if (_al_event_source_needs_to_generate_event(&al_display->es)) { + ALLEGRO_EVENT *event = _al_event_source_get_unused_event(&al_display->es); if (event) { event->display.type = ALLEGRO_EVENT_DISPLAY_FOUND; event->display.timestamp = al_current_time(); - _al_event_source_emit_event(&d->display.es, event); + _al_event_source_emit_event(&al_display->es, event); } } - _al_event_source_unlock(&d->display.es); + _al_event_source_unlock(&al_display->es); lost_event_generated = false; } } - if (d->do_reset) { - d->reset_success = _al_d3d_reset_device(d); - d->reset_done = true; - d->do_reset = false; + if (d3d_display->do_reset) { + d3d_display->reset_success = _al_d3d_reset_device(d3d_display); + d3d_display->reset_done = true; + d3d_display->do_reset = false; } } } End: - //_al_mutex_lock(&d->mutex); + d3d_destroy_device(d3d_display); - //TRACE("Releasing device\n"); -// if (d->display.flags & ALLEGRO_FULLSCREEN) { - //_al_d3d_release_bitmap_textures(d); - - /* - if (IDirect3DDevice9_Release(d->device) != D3D_OK) { - TRACE("Releasing fullscreen D3D device failed.\n"); - } - */ - d3d_destroy_device(d); - - if (d->faux_fullscreen) { + if (d3d_display->faux_fullscreen) { TRACE("Changing resolution back\n"); - ChangeDisplaySettingsEx(d->device_name, NULL, NULL, 0, NULL);//CDS_FULLSCREEN + ChangeDisplaySettingsEx(d3d_display->device_name, NULL, NULL, 0, NULL);//CDS_FULLSCREEN num_faux_fullscreen_windows--; TRACE("Res changed back\n"); } _al_win_delete_thread_handle(GetCurrentThreadId()); - //_al_mutex_unlock(&d->mutex); + d3d_display->thread_ended = true; - d->thread_ended = true; - TRACE("d3d display thread exits\n"); } -static bool d3d_create_display_internals(ALLEGRO_DISPLAY_D3D *display) +static bool d3d_create_display_internals(ALLEGRO_DISPLAY_D3D *d3d_display) { - new_display_parameters params;// = (new_display_parameters *)_AL_MALLOC(sizeof(new_display_parameters)); - int w, h; + new_display_parameters params; + ALLEGRO_DISPLAY_WIN *win_display = &d3d_display->win_display; + ALLEGRO_DISPLAY *al_display = &win_display->display; - TRACE("display=%p\n", display); - - params.display = display; + params.display = d3d_display; params.init_failed = false; _beginthread(d3d_display_thread_proc, 0, ¶ms); @@ -1216,49 +1206,30 @@ if (params.init_failed) { - //_AL_FREE(params); return false; } - //_AL_FREE(params); - // Activate the window (grabs input) - PostMessage(display->window, WM_ACTIVATEAPP, 1, 0); + PostMessage(win_display->window, WM_ACTIVATEAPP, 1, 0); - display->backbuffer_bmp.is_backbuffer = true; - display->backbuffer_bmp.bitmap.display = (ALLEGRO_DISPLAY *)display; - display->backbuffer_bmp.bitmap.format = display->display.format; - display->backbuffer_bmp.bitmap.flags = 0; - display->backbuffer_bmp.bitmap.w = display->display.w; - display->backbuffer_bmp.bitmap.h = display->display.h; - display->backbuffer_bmp.bitmap.cl = 0; - display->backbuffer_bmp.bitmap.ct = 0; - display->backbuffer_bmp.bitmap.cr = display->display.w-1; - display->backbuffer_bmp.bitmap.cb = display->display.h-1; - display->backbuffer_bmp.bitmap.vt = (ALLEGRO_BITMAP_INTERFACE *)_al_bitmap_d3d_driver(); - display->backbuffer_bmp.display = display; + d3d_display->backbuffer_bmp.is_backbuffer = true; + d3d_display->backbuffer_bmp.bitmap.display = al_display; + d3d_display->backbuffer_bmp.bitmap.format = al_display->format; + d3d_display->backbuffer_bmp.bitmap.flags = 0; + d3d_display->backbuffer_bmp.bitmap.w = al_display->w; + d3d_display->backbuffer_bmp.bitmap.h = al_display->h; + d3d_display->backbuffer_bmp.bitmap.cl = 0; + d3d_display->backbuffer_bmp.bitmap.ct = 0; + d3d_display->backbuffer_bmp.bitmap.cr = al_display->w-1; + d3d_display->backbuffer_bmp.bitmap.cb = al_display->h-1; + d3d_display->backbuffer_bmp.bitmap.vt = (ALLEGRO_BITMAP_INTERFACE *)_al_bitmap_d3d_driver(); + d3d_display->backbuffer_bmp.display = d3d_display; /* Alpha blending is the default */ - display->device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); - display->device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); - display->device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); - - w = display->display.w; - h = display->display.h; + d3d_display->device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); + d3d_display->device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); + d3d_display->device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); - /* Setup the mouse */ - display->mouse_range_x1 = 0; - display->mouse_range_y1 = 0; - display->mouse_range_x2 = w; - display->mouse_range_y2 = h; - if (al_is_mouse_installed()) { - al_set_mouse_xy(w/2, h/2); - al_set_mouse_range(0, 0, w, h); - } - - display->mouse_selected_hcursor = 0; - display->mouse_cursor_shown = false; - return true; } @@ -1266,79 +1237,91 @@ static ALLEGRO_DISPLAY *d3d_create_display(int w, int h) { ALLEGRO_SYSTEM_WIN *system = (ALLEGRO_SYSTEM_WIN *)al_system_driver(); - ALLEGRO_DISPLAY_D3D *display = (ALLEGRO_DISPLAY_D3D *)_AL_MALLOC(sizeof *display); + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *)_AL_MALLOC(sizeof(ALLEGRO_DISPLAY_D3D)); ALLEGRO_DISPLAY_D3D **add; + ALLEGRO_DISPLAY_WIN *win_display = &d3d_display->win_display; + ALLEGRO_DISPLAY *al_display = &win_display->display; - memset(display, 0, sizeof *display); + memset(d3d_display, 0, sizeof *d3d_display); - //_al_mutex_init(&display->mutex); - - display->adapter = al_get_current_video_adapter(); - display->ignore_ack = false; - display->display.w = w; - display->display.h = h; - display->display.format = al_get_new_display_format(); - display->display.refresh_rate = al_get_new_display_refresh_rate(); - display->display.flags = al_get_new_display_flags(); - display->display.vt = vt; + d3d_display->adapter = al_get_current_video_adapter(); + d3d_display->ignore_ack = false; + al_display->w = w; + al_display->h = h; + al_display->format = al_get_new_display_format(); + al_display->refresh_rate = al_get_new_display_refresh_rate(); + al_display->flags = al_get_new_display_flags(); + al_display->vt = vt; #ifdef WANT_D3D9EX if (!is_vista) { #endif - if (display->display.flags & ALLEGRO_FULLSCREEN) { + if (al_display->flags & ALLEGRO_FULLSCREEN) { if (already_fullscreen || d3d_created_displays._size != 0) { - display->faux_fullscreen = true; + d3d_display->faux_fullscreen = true; } else { already_fullscreen = true; - display->faux_fullscreen = false; + d3d_display->faux_fullscreen = false; } } else { - display->faux_fullscreen = false; + d3d_display->faux_fullscreen = false; } #ifdef WANT_D3D9EX } else { - display->faux_fullscreen = false; + d3d_display->faux_fullscreen = false; } #endif - TRACE("faux_fullscreen=%d\n", display->faux_fullscreen); + TRACE("faux_fullscreen=%d\n", d3d_display->faux_fullscreen); - if (!d3d_create_display_internals(display)) { + if (!d3d_create_display_internals(d3d_display)) { TRACE("d3d_create_display failed.\n"); - _AL_FREE(display); + _AL_FREE(d3d_display); return NULL; } /* Add ourself to the list of displays. */ add = (ALLEGRO_DISPLAY_D3D **)_al_vector_alloc_back(&system->system.displays); - *add = display; + *add = d3d_display; /* Each display is an event source. */ - _al_event_source_init(&display->display.es); + _al_event_source_init(&al_display->es); /* Keep track of the displays created */ add = (ALLEGRO_DISPLAY_D3D **)_al_vector_alloc_back(&d3d_created_displays); - *add = display; + *add = d3d_display; - _al_win_active_window = display->window; + _al_win_active_window = win_display->window; - return (ALLEGRO_DISPLAY *)display; + /* Setup the mouse */ + + win_display->mouse_range_x1 = 0; + win_display->mouse_range_y1 = 0; + win_display->mouse_range_x2 = w; + win_display->mouse_range_y2 = h; + if (al_is_mouse_installed()) { + al_set_mouse_xy(w/2, h/2); + al_set_mouse_range(0, 0, w, h); + } + + win_display->mouse_selected_hcursor = 0; + win_display->mouse_cursor_shown = false; + + return al_display; } static bool d3d_set_current_display(ALLEGRO_DISPLAY *d) { - ALLEGRO_DISPLAY_D3D *d3d_disp = (ALLEGRO_DISPLAY_D3D *)d; + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *)d; - if (d3d_disp->do_reset) + if (d3d_display->do_reset) return false; - al_set_current_video_adapter(d3d_disp->adapter); + al_set_current_video_adapter(d3d_display->adapter); - _al_win_wnd = d3d_disp->window; - return true; } @@ -1374,7 +1357,7 @@ return D3DBLEND_ONE; } -void _al_d3d_set_blender(ALLEGRO_DISPLAY_D3D *disp) +void _al_d3d_set_blender(ALLEGRO_DISPLAY_D3D *d3d_display) { int src, dst; @@ -1383,9 +1366,9 @@ src = d3d_al_blender_to_d3d(src); dst = d3d_al_blender_to_d3d(dst); - if (disp->device->SetRenderState(D3DRS_SRCBLEND, src) != D3D_OK) + if (d3d_display->device->SetRenderState(D3DRS_SRCBLEND, src) != D3D_OK) TRACE("Failed to set source blender"); - if (disp->device->SetRenderState(D3DRS_DESTBLEND, dst) != D3D_OK) + if (d3d_display->device->SetRenderState(D3DRS_DESTBLEND, dst) != D3D_OK) TRACE("Failed to set dest blender"); } @@ -1410,16 +1393,16 @@ } /* Dummy implementation of line. */ -static void d3d_draw_line(ALLEGRO_DISPLAY *d, float fx, float fy, float tx, float ty, +static void d3d_draw_line(ALLEGRO_DISPLAY *al_display, float fx, float fy, float tx, float ty, ALLEGRO_COLOR *color) { static D3D_COLORED_VERTEX points[2] = { { 0.0f, 0.0f, 0.0f, 0 }, }; ALLEGRO_BITMAP *target = al_get_target_bitmap(); ALLEGRO_COLOR *bc = _al_get_blend_color(); DWORD d3d_color; - ALLEGRO_DISPLAY_D3D *disp = (ALLEGRO_DISPLAY_D3D *)d; + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *)al_display; - if (disp->device_lost) return; + if (d3d_display->device_lost) return; if (!_al_d3d_render_to_texture_supported()) { _al_draw_line_memory(fx, fy, tx, ty, color); @@ -1450,17 +1433,17 @@ points[1].y = ty; points[1].color = d3d_color; - _al_d3d_set_blender(disp); + _al_d3d_set_blender(d3d_display); - disp->device->SetFVF(D3DFVF_COLORED_VERTEX); + d3d_display->device->SetFVF(D3DFVF_COLORED_VERTEX); - if (disp->device->DrawPrimitiveUP(D3DPT_LINELIST, 1, + if (d3d_display->device->DrawPrimitiveUP(D3DPT_LINELIST, 1, points, sizeof(D3D_COLORED_VERTEX)) != D3D_OK) { TRACE("DrawPrimitive failed in d3d_draw_line.\n"); } } -static void d3d_draw_rectangle(ALLEGRO_DISPLAY *d, float tlx, float tly, +static void d3d_draw_rectangle(ALLEGRO_DISPLAY *al_display, float tlx, float tly, float brx, float bry, ALLEGRO_COLOR *color, int flags) { D3DRECT rect; @@ -1469,13 +1452,13 @@ ALLEGRO_BITMAP *target; ALLEGRO_COLOR *bc = _al_get_blend_color(); DWORD d3d_color; - ALLEGRO_DISPLAY_D3D *disp = (ALLEGRO_DISPLAY_D3D *)d; + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *)al_display; if (!(flags & ALLEGRO_FILLED)) { - d3d_draw_line(d, tlx, tly, brx, tly, color); - d3d_draw_line(d, tlx, bry, brx, bry, color); - d3d_draw_line(d, tlx, tly, tlx, bry, color); - d3d_draw_line(d, brx, tly, brx, bry, color); + d3d_draw_line(al_display, tlx, tly, brx, tly, color); + d3d_draw_line(al_display, tlx, bry, brx, bry, color); + d3d_draw_line(al_display, tlx, tly, tlx, bry, color); + d3d_draw_line(al_display, brx, tly, brx, bry, color); return; } @@ -1484,7 +1467,7 @@ brx -= 0.5f; bry -= 0.5f; - if (disp->device_lost) return; + if (d3d_display->device_lost) return; if (!_al_d3d_render_to_texture_supported()) { _al_draw_rectangle_memory(tlx, tly, brx, bry, color, flags); @@ -1513,18 +1496,18 @@ rect.x2 = brx; rect.y2 = bry; - _al_d3d_set_blender(disp); + _al_d3d_set_blender(d3d_display); - _al_d3d_draw_textured_quad(disp, NULL, + _al_d3d_draw_textured_quad(d3d_display, NULL, 0.0f, 0.0f, w, h, tlx, tly, w, h, w/2, h/2, 0.0f, d3d_color, 0, false); } -static void d3d_clear(ALLEGRO_DISPLAY *d, ALLEGRO_COLOR *color) +static void d3d_clear(ALLEGRO_DISPLAY *al_display, ALLEGRO_COLOR *color) { - ALLEGRO_DISPLAY_D3D* disp = (ALLEGRO_DISPLAY_D3D*)d; + ALLEGRO_DISPLAY_D3D* d3d_display = (ALLEGRO_DISPLAY_D3D*)al_display; D3DRECT rect; int src, dst; ALLEGRO_COLOR blend_color; @@ -1555,53 +1538,55 @@ al_get_blender(&src, &dst, &blend_color); al_set_blender(ALLEGRO_ONE, ALLEGRO_ZERO, al_map_rgb(255, 255, 255)); - d3d_draw_rectangle(d, rect.x1, rect.y1, rect.x2+1, rect.y2+1, color, ALLEGRO_FILLED); + d3d_draw_rectangle(al_display, rect.x1, rect.y1, rect.x2+1, rect.y2+1, color, ALLEGRO_FILLED); al_set_blender(src, dst, blend_color); } -void d3d_draw_pixel(ALLEGRO_DISPLAY *d, float x, float y, ALLEGRO_COLOR *color) +void d3d_draw_pixel(ALLEGRO_DISPLAY *al_display, float x, float y, ALLEGRO_COLOR *color) { - d3d_draw_rectangle(d, x, y, x+1, y+1, color, ALLEGRO_FILLED); + d3d_draw_rectangle(al_display, x, y, x+1, y+1, color, ALLEGRO_FILLED); } -static void d3d_flip_display(ALLEGRO_DISPLAY *d) +static void d3d_flip_display(ALLEGRO_DISPLAY *al_display) { - ALLEGRO_DISPLAY_D3D* disp = (ALLEGRO_DISPLAY_D3D*)d; + ALLEGRO_DISPLAY_D3D* d3d_display = (ALLEGRO_DISPLAY_D3D*)al_display; + ALLEGRO_DISPLAY_WIN *win_display = &d3d_display->win_display; HRESULT hr; - if (disp->device_lost) return; + if (d3d_display->device_lost) return; - disp->device->EndScene(); + d3d_display->device->EndScene(); - hr = disp->device->Present(NULL, NULL, disp->window, NULL); + hr = d3d_display->device->Present(NULL, NULL, win_display->window, NULL); - disp->device->BeginScene(); + d3d_display->device->BeginScene(); if (hr == D3DERR_DEVICELOST) { - disp->device_lost = true; + d3d_display->device_lost = true; return; } } -static bool d3d_update_display_region(ALLEGRO_DISPLAY *d, +static bool d3d_update_display_region(ALLEGRO_DISPLAY *al_display, int x, int y, int width, int height) { - ALLEGRO_DISPLAY_D3D* disp = (ALLEGRO_DISPLAY_D3D*)d; + ALLEGRO_DISPLAY_D3D* d3d_display = (ALLEGRO_DISPLAY_D3D*)al_display; + ALLEGRO_DISPLAY_WIN *win_display = &d3d_display->win_display; HRESULT hr; RGNDATA *rgndata; bool ret; - if (disp->device_lost) return false; + if (d3d_display->device_lost) return false; - if (d->flags & ALLEGRO_SINGLEBUFFER) { + if (al_display->flags & ALLEGRO_SINGLEBUFFER) { RECT rect; - ALLEGRO_DISPLAY_D3D* disp = (ALLEGRO_DISPLAY_D3D*)d; + ALLEGRO_DISPLAY_D3D* disp = (ALLEGRO_DISPLAY_D3D*)al_display; rect.left = x; rect.right = x+width; @@ -1616,16 +1601,16 @@ memcpy(&rgndata->rdh.rcBound, &rect, sizeof(RECT)); memcpy(rgndata->Buffer, &rect, sizeof(RECT)); - disp->device->EndScene(); + d3d_display->device->EndScene(); - hr = disp->device->Present(&rect, &rect, disp->window, rgndata); + hr = d3d_display->device->Present(&rect, &rect, win_display->window, rgndata); - disp->device->BeginScene(); + d3d_display->device->BeginScene(); free(rgndata); if (hr == D3DERR_DEVICELOST) { - disp->device_lost = true; + d3d_display->device_lost = true; return true; } @@ -1705,6 +1690,7 @@ static bool d3d_resize_display(ALLEGRO_DISPLAY *d, int width, int height) { ALLEGRO_DISPLAY_D3D *disp = (ALLEGRO_DISPLAY_D3D *)d; + ALLEGRO_DISPLAY_WIN *win_display = &disp->win_display; bool ret; disp->ignore_ack = true; @@ -1744,11 +1730,11 @@ win_size.bottom = height; wi.cbSize = sizeof(WINDOWINFO); - GetWindowInfo(disp->window, &wi); + GetWindowInfo(win_display->window, &wi); AdjustWindowRectEx(&win_size, wi.dwStyle, FALSE, wi.dwExStyle); - ret = (SetWindowPos(disp->window, HWND_TOP, + ret = (SetWindowPos(win_display->window, HWND_TOP, 0, 0, win_size.right-win_size.left, win_size.bottom-win_size.top, @@ -1802,6 +1788,7 @@ WINDOWINFO wi; ALLEGRO_DISPLAY *old; ALLEGRO_DISPLAY_D3D *disp = (ALLEGRO_DISPLAY_D3D *)d; + ALLEGRO_DISPLAY_WIN *win_display = &disp->win_display; if (disp->ignore_ack) { disp->ignore_ack = false; @@ -1809,7 +1796,7 @@ } wi.cbSize = sizeof(WINDOWINFO); - GetWindowInfo(disp->window, &wi); + GetWindowInfo(win_display->window, &wi); d->w = wi.rcClient.right - wi.rcClient.left; d->h = wi.rcClient.bottom - wi.rcClient.top; @@ -1967,11 +1954,11 @@ static void d3d_switch_in(ALLEGRO_DISPLAY *display) { - ALLEGRO_DISPLAY_D3D *d3d_disp = (ALLEGRO_DISPLAY_D3D *)display; + ALLEGRO_DISPLAY_WIN *win_display = (ALLEGRO_DISPLAY_WIN *)display; if (al_is_mouse_installed()) - al_set_mouse_range(d3d_disp->mouse_range_x1, d3d_disp->mouse_range_y1, - d3d_disp->mouse_range_x2, d3d_disp->mouse_range_y2); + al_set_mouse_range(win_display->mouse_range_x1, win_display->mouse_range_y1, + win_display->mouse_range_x2, win_display->mouse_range_y2); } static bool d3d_wait_for_vsync(ALLEGRO_DISPLAY *display) @@ -1999,8 +1986,8 @@ ALLEGRO_MOUSE_CURSOR *d3d_create_mouse_cursor(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *sprite, int xfocus, int yfocus) { - ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; - HWND wnd = d3d_display->window; + ALLEGRO_DISPLAY_WIN *win_display = (ALLEGRO_DISPLAY_WIN *) display; + HWND wnd = win_display->window; ALLEGRO_MOUSE_CURSOR_WIN *win_cursor; win_cursor = _al_win_create_mouse_cursor(wnd, sprite, xfocus, yfocus); @@ -2010,12 +1997,12 @@ static void d3d_destroy_mouse_cursor(ALLEGRO_DISPLAY *display, ALLEGRO_MOUSE_CURSOR *cursor) { - ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + ALLEGRO_DISPLAY_WIN *win_display = (ALLEGRO_DISPLAY_WIN *) display; ALLEGRO_MOUSE_CURSOR_WIN *win_cursor = (ALLEGRO_MOUSE_CURSOR_WIN *) cursor; ASSERT(win_cursor); - if (win_cursor->hcursor == d3d_display->mouse_selected_hcursor) { + if (win_cursor->hcursor == win_display->mouse_selected_hcursor) { d3d_set_system_mouse_cursor(display, ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); } @@ -2025,15 +2012,15 @@ static bool d3d_set_mouse_cursor(ALLEGRO_DISPLAY *display, ALLEGRO_MOUSE_CURSOR *cursor) { - ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + ALLEGRO_DISPLAY_WIN *win_display = (ALLEGRO_DISPLAY_WIN *) display; ALLEGRO_MOUSE_CURSOR_WIN *win_cursor = (ALLEGRO_MOUSE_CURSOR_WIN *) cursor; ASSERT(win_cursor); ASSERT(win_cursor->hcursor); - d3d_display->mouse_selected_hcursor = win_cursor->hcursor; + win_display->mouse_selected_hcursor = win_cursor->hcursor; - if (d3d_display->mouse_cursor_shown) { + if (win_display->mouse_cursor_shown) { _al_win_set_mouse_hcursor(win_cursor->hcursor); } @@ -2043,7 +2030,7 @@ static bool d3d_set_system_mouse_cursor(ALLEGRO_DISPLAY *display, ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) { - ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + ALLEGRO_DISPLAY_WIN *win_display = (ALLEGRO_DISPLAY_WIN *) display; HCURSOR wc; wc = _al_win_system_cursor_to_hcursor(cursor_id); @@ -2051,8 +2038,8 @@ return false; } - d3d_display->mouse_selected_hcursor = wc; - if (d3d_display->mouse_cursor_shown) { + win_display->mouse_selected_hcursor = wc; + if (win_display->mouse_cursor_shown) { /* MySetCursor(wc); PostMessage(wgl_display->window, WM_MOUSEMOVE, 0, 0); @@ -2064,25 +2051,25 @@ static bool d3d_show_mouse_cursor(ALLEGRO_DISPLAY *display) { - ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + ALLEGRO_DISPLAY_WIN *win_display = (ALLEGRO_DISPLAY_WIN *) display; /* XXX do we need this? */ - if (!d3d_display->mouse_selected_hcursor) { + if (!win_display->mouse_selected_hcursor) { d3d_set_system_mouse_cursor(display, ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW); } - _al_win_set_mouse_hcursor(d3d_display->mouse_selected_hcursor); - d3d_display->mouse_cursor_shown = true; + _al_win_set_mouse_hcursor(win_display->mouse_selected_hcursor); + win_display->mouse_cursor_shown = true; return true; } static bool d3d_hide_mouse_cursor(ALLEGRO_DISPLAY *display) { - ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *) display; + ALLEGRO_DISPLAY_WIN *win_display = (ALLEGRO_DISPLAY_WIN *) display; _al_win_set_mouse_hcursor(NULL); - d3d_display->mouse_cursor_shown = false; + win_display->mouse_cursor_shown = false; return true; } @@ -2093,14 +2080,14 @@ LPDIRECT3DDEVICE9 al_d3d_get_device(ALLEGRO_DISPLAY *display) { - ALLEGRO_DISPLAY_D3D *d3d_disp = (ALLEGRO_DISPLAY_D3D *)display; - return d3d_disp->device; + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *)display; + return d3d_display->device; } HWND al_d3d_get_hwnd(ALLEGRO_DISPLAY *display) { - return ((ALLEGRO_DISPLAY_D3D *)display)->window; + return ((ALLEGRO_DISPLAY_WIN *)display)->window; } @@ -2117,20 +2104,20 @@ static void d3d_set_window_position(ALLEGRO_DISPLAY *display, int x, int y) { - _al_win_set_window_position(((ALLEGRO_DISPLAY_D3D *)display)->window, x, y); + _al_win_set_window_position(((ALLEGRO_DISPLAY_WIN *)display)->window, x, y); } static void d3d_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y) { if (display->flags & ALLEGRO_FULLSCREEN) { ALLEGRO_MONITOR_INFO info; - ALLEGRO_DISPLAY_D3D *d3d_disp = (ALLEGRO_DISPLAY_D3D *)display; - al_get_monitor_info(d3d_disp->adapter, &info); + ALLEGRO_DISPLAY_D3D *d3d_display = (ALLEGRO_DISPLAY_D3D *)display; + al_get_monitor_info(d3d_display->adapter, &info); *x = info.x1; *y = info.y1; ... [truncated message content] |
From: <tr...@us...> - 2008-08-23 00:37:00
|
Revision: 10474 http://alleg.svn.sourceforge.net/alleg/?rev=10474&view=rev Author: trentg Date: 2008-08-23 00:37:10 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Added al_set_window_title to D3D and WGL Modified Paths: -------------- allegro/branches/4.9/examples/exnew_icon.c allegro/branches/4.9/include/allegro5/display_new.h allegro/branches/4.9/include/allegro5/internal/aintern_display.h allegro/branches/4.9/src/display_new.c allegro/branches/4.9/src/win/d3d_disp.cpp allegro/branches/4.9/src/win/wgl_disp.c allegro/branches/4.9/src/win/win_new.h allegro/branches/4.9/src/win/wnewwin.c Modified: allegro/branches/4.9/examples/exnew_icon.c =================================================================== --- allegro/branches/4.9/examples/exnew_icon.c 2008-08-23 00:17:27 UTC (rev 10473) +++ allegro/branches/4.9/examples/exnew_icon.c 2008-08-23 00:37:10 UTC (rev 10474) @@ -36,6 +36,8 @@ } al_set_target_bitmap(al_get_backbuffer()); + al_set_window_title("<-- Changing icon example"); + for (i = 0; i < 8; i++) { al_set_display_icon((i & 1) ? icon2 : icon1); al_flip_display(); Modified: allegro/branches/4.9/include/allegro5/display_new.h =================================================================== --- allegro/branches/4.9/include/allegro5/display_new.h 2008-08-23 00:17:27 UTC (rev 10473) +++ allegro/branches/4.9/include/allegro5/display_new.h 2008-08-23 00:37:10 UTC (rev 10474) @@ -123,6 +123,7 @@ AL_FUNC(void, al_set_window_position, (ALLEGRO_DISPLAY *display, int x, int y)); AL_FUNC(void, al_get_window_position, (ALLEGRO_DISPLAY *display, int *x, int *y)); AL_FUNC(void, al_toggle_window_frame, (ALLEGRO_DISPLAY *display, bool onoff)); +AL_FUNC(void, al_set_window_title, (AL_CONST char *title)); #ifdef __cplusplus } Modified: allegro/branches/4.9/include/allegro5/internal/aintern_display.h =================================================================== --- allegro/branches/4.9/include/allegro5/internal/aintern_display.h 2008-08-23 00:17:27 UTC (rev 10473) +++ allegro/branches/4.9/include/allegro5/internal/aintern_display.h 2008-08-23 00:37:10 UTC (rev 10474) @@ -65,6 +65,7 @@ void (*set_window_position)(ALLEGRO_DISPLAY *display, int x, int y); void (*get_window_position)(ALLEGRO_DISPLAY *display, int *x, int *y); void (*toggle_frame)(ALLEGRO_DISPLAY *display, bool onoff); + void (*set_window_title)(ALLEGRO_DISPLAY *display, AL_CONST char *title); }; Modified: allegro/branches/4.9/src/display_new.c =================================================================== --- allegro/branches/4.9/src/display_new.c 2008-08-23 00:17:27 UTC (rev 10473) +++ allegro/branches/4.9/src/display_new.c 2008-08-23 00:37:10 UTC (rev 10474) @@ -723,3 +723,12 @@ } } + +void al_set_window_title(AL_CONST char *title) +{ + ALLEGRO_DISPLAY *current_display = al_get_current_display(); + + if (current_display && current_display->vt && current_display->vt->set_window_title) + current_display->vt->set_window_title(current_display, title); +} + Modified: allegro/branches/4.9/src/win/d3d_disp.cpp =================================================================== --- allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-23 00:17:27 UTC (rev 10473) +++ allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-23 00:37:10 UTC (rev 10474) @@ -2170,6 +2170,7 @@ vt->set_window_position = d3d_set_window_position; vt->get_window_position = d3d_get_window_position; vt->toggle_frame = d3d_toggle_frame; + vt->set_window_title = _al_win_set_window_title; return vt; } Modified: allegro/branches/4.9/src/win/wgl_disp.c =================================================================== --- allegro/branches/4.9/src/win/wgl_disp.c 2008-08-23 00:17:27 UTC (rev 10473) +++ allegro/branches/4.9/src/win/wgl_disp.c 2008-08-23 00:37:10 UTC (rev 10474) @@ -1416,6 +1416,7 @@ vt->set_window_position = wgl_set_window_position; vt->get_window_position = wgl_get_window_position; vt->toggle_frame = wgl_toggle_frame; + vt->set_window_title = _al_win_set_window_title; _al_ogl_add_drawing_functions(vt); return vt; Modified: allegro/branches/4.9/src/win/win_new.h =================================================================== --- allegro/branches/4.9/src/win/win_new.h 2008-08-23 00:17:27 UTC (rev 10473) +++ allegro/branches/4.9/src/win/win_new.h 2008-08-23 00:37:10 UTC (rev 10474) @@ -37,15 +37,12 @@ void _al_win_get_window_pos(HWND window, RECT *pos); - - - void _al_win_set_window_position(HWND window, int x, int y); void _al_win_get_window_position(HWND window, int *x, int *y); void _al_win_toggle_window_frame(ALLEGRO_DISPLAY *display, HWND window, int w, int h, bool onoff); +void _al_win_set_window_title(ALLEGRO_DISPLAY *display, AL_CONST char *title); - ALLEGRO_DISPLAY *_al_win_get_event_display(void); Modified: allegro/branches/4.9/src/win/wnewwin.c =================================================================== --- allegro/branches/4.9/src/win/wnewwin.c 2008-08-23 00:17:27 UTC (rev 10473) +++ allegro/branches/4.9/src/win/wnewwin.c 2008-08-23 00:37:10 UTC (rev 10474) @@ -644,3 +644,9 @@ } } +void _al_win_set_window_title(ALLEGRO_DISPLAY *display, AL_CONST char *title) +{ + ALLEGRO_DISPLAY_WIN *win_display = (ALLEGRO_DISPLAY_WIN *)display; + SetWindowText(win_display->window, title); +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2008-08-23 00:54:28
|
Revision: 10475 http://alleg.svn.sourceforge.net/alleg/?rev=10475&view=rev Author: tjaden Date: 2008-08-23 00:54:38 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Fix RGB issue in Windows mouse cursor code. Fix the bit depth in the BITMAPINFO structure we create. Hiding the mouse cursor might work now. Modified Paths: -------------- allegro/branches/4.9/examples/exnew_mouse_cursor.c allegro/branches/4.9/src/win/wmcursor.c allegro/branches/4.9/src/win/wnewwin.c Modified: allegro/branches/4.9/examples/exnew_mouse_cursor.c =================================================================== --- allegro/branches/4.9/examples/exnew_mouse_cursor.c 2008-08-23 00:37:10 UTC (rev 10474) +++ allegro/branches/4.9/examples/exnew_mouse_cursor.c 2008-08-23 00:54:38 UTC (rev 10475) @@ -49,12 +49,9 @@ return 1; } - /* XXX work around blitting problem */ - /* this problem no longer appears in X, but did in Wine */ - /*al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);*/ bmp = iio_load("allegro.pcx"); if (!bmp) { - TRACE("Error loading mysha.pcx\n"); + TRACE("Error loading allegro.pcx\n"); return 1; } @@ -102,6 +99,12 @@ /* XXX some instructions on this blank screen would be nice */ + al_set_target_bitmap(al_get_backbuffer()); + al_clear(al_map_rgb(128, 128, 128)); + al_flip_display(); + + al_show_mouse_cursor(); + while (1) { al_wait_for_event(queue, &event); if (event.type == ALLEGRO_EVENT_KEY_DOWN) { Modified: allegro/branches/4.9/src/win/wmcursor.c =================================================================== --- allegro/branches/4.9/src/win/wmcursor.c 2008-08-23 00:37:10 UTC (rev 10474) +++ allegro/branches/4.9/src/win/wmcursor.c 2008-08-23 00:54:38 UTC (rev 10475) @@ -79,6 +79,7 @@ SetPixel(h_xor_dc, x, y, WINDOWS_RGB(0, 0, 0)); } } + local_draw_to_hdc(h_xor_dc, sprite, 0, 0); /* Make cursor background transparent */ @@ -195,38 +196,32 @@ /* get_bitmap_info: * Returns a BITMAPINFO structure suited to an ALLEGRO_BITMAP. * You have to free the memory allocated by this function. + * + * This version always returns a 32-bit BITMAPINFO. */ static BITMAPINFO *get_bitmap_info(ALLEGRO_BITMAP *bitmap) { BITMAPINFO *bi; - int bpp; + int bpp, i; bi = (BITMAPINFO *) _AL_MALLOC(sizeof(BITMAPINFO) + sizeof(RGBQUAD) * 256); - bpp = al_get_pixel_format_bits(al_get_bitmap_format(bitmap)); - if (bpp == 15) - bpp = 16; - ZeroMemory(&bi->bmiHeader, sizeof(BITMAPINFOHEADER)); bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bi->bmiHeader.biBitCount = bpp; + bi->bmiHeader.biBitCount = 32; bi->bmiHeader.biPlanes = 1; - bi->bmiHeader.biWidth = bitmap->w; - bi->bmiHeader.biHeight = -bitmap->h; + bi->bmiHeader.biWidth = al_get_bitmap_width(bitmap); + bi->bmiHeader.biHeight = -al_get_bitmap_height(bitmap); bi->bmiHeader.biClrUsed = 256; bi->bmiHeader.biCompression = BI_RGB; - /* - if (pal) { - for (i = 0; i < 256; i++) { - bi->bmiColors[i].rgbRed = _rgb_scale_6[pal[i].r]; - bi->bmiColors[i].rgbGreen = _rgb_scale_6[pal[i].g]; - bi->bmiColors[i].rgbBlue = _rgb_scale_6[pal[i].b]; - bi->bmiColors[i].rgbReserved = 0; - } + for (i = 0; i < 256; i++) { + bi->bmiColors[i].rgbRed = 0; + bi->bmiColors[i].rgbGreen = 0; + bi->bmiColors[i].rgbBlue = 0; + bi->bmiColors[i].rgbReserved = 0; } - */ return bi; } @@ -265,9 +260,10 @@ col = al_get_pixel(bitmap, x, y); al_unmap_rgba(col, &r, &g, &b, &a); - dst[0] = r; + /* BGR */ + dst[0] = b; dst[1] = g; - dst[2] = b; + dst[2] = r; dst[3] = a; dst += 4; Modified: allegro/branches/4.9/src/win/wnewwin.c =================================================================== --- allegro/branches/4.9/src/win/wnewwin.c 2008-08-23 00:37:10 UTC (rev 10474) +++ allegro/branches/4.9/src/win/wnewwin.c 2008-08-23 00:54:38 UTC (rev 10475) @@ -285,13 +285,10 @@ case WM_MOUSEACTIVATE: return MA_ACTIVATEANDEAT; case WM_SETCURSOR: - SetCursor(win_display->mouse_selected_hcursor); + if (win_display->mouse_cursor_shown) { + SetCursor(win_display->mouse_selected_hcursor); + } return 1; - // XXX ? - /* - if (_win_hcursor == NULL) - SetCursor(NULL); - */ //case WM_SETCURSOR: // mouse_set_syscursor(); // return 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tr...@us...> - 2008-08-23 01:27:40
|
Revision: 10476 http://alleg.svn.sourceforge.net/alleg/?rev=10476&view=rev Author: trentg Date: 2008-08-23 01:27:51 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Made mouse cursor hide properly in exnew_mouse_cursor Modified Paths: -------------- allegro/branches/4.9/examples/exnew_mouse_cursor.c allegro/branches/4.9/src/win/d3d_disp.cpp allegro/branches/4.9/src/win/wgl_disp.c allegro/branches/4.9/src/win/wnewwin.c Modified: allegro/branches/4.9/examples/exnew_mouse_cursor.c =================================================================== --- allegro/branches/4.9/examples/exnew_mouse_cursor.c 2008-08-23 00:54:38 UTC (rev 10475) +++ allegro/branches/4.9/examples/exnew_mouse_cursor.c 2008-08-23 01:27:51 UTC (rev 10476) @@ -43,6 +43,11 @@ al_init(); iio_init(); + if (!al_install_mouse()) { + TRACE("Error installing mouse\n"); + return 1; + } + display = al_create_display(400, 300); if (!display) { TRACE("Error creating display\n"); @@ -78,11 +83,6 @@ shrunk_bmp = NULL; bmp = NULL; - if (!al_install_mouse()) { - TRACE("Error installing mouse\n"); - return 1; - } - if (!al_install_keyboard()) { TRACE("Error installing keyboard\n"); return 1; Modified: allegro/branches/4.9/src/win/d3d_disp.cpp =================================================================== --- allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-23 00:54:38 UTC (rev 10475) +++ allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-23 01:27:51 UTC (rev 10476) @@ -2071,6 +2071,8 @@ _al_win_set_mouse_hcursor(NULL); win_display->mouse_cursor_shown = false; + PostMessage(win_display->window, WM_SETCURSOR, NULL, NULL); + return true; } Modified: allegro/branches/4.9/src/win/wgl_disp.c =================================================================== --- allegro/branches/4.9/src/win/wgl_disp.c 2008-08-23 00:54:38 UTC (rev 10475) +++ allegro/branches/4.9/src/win/wgl_disp.c 2008-08-23 01:27:51 UTC (rev 10476) @@ -1377,6 +1377,8 @@ _al_win_set_mouse_hcursor(NULL); win_display->mouse_cursor_shown = false; + PostMessage(win_display->window, WM_SETCURSOR, 0, 0); + return true; } Modified: allegro/branches/4.9/src/win/wnewwin.c =================================================================== --- allegro/branches/4.9/src/win/wnewwin.c 2008-08-23 00:54:38 UTC (rev 10475) +++ allegro/branches/4.9/src/win/wnewwin.c 2008-08-23 01:27:51 UTC (rev 10476) @@ -288,6 +288,9 @@ if (win_display->mouse_cursor_shown) { SetCursor(win_display->mouse_selected_hcursor); } + else { + SetCursor(NULL); + } return 1; //case WM_SETCURSOR: // mouse_set_syscursor(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2008-08-23 02:12:21
|
Revision: 10478 http://alleg.svn.sourceforge.net/alleg/?rev=10478&view=rev Author: tjaden Date: 2008-08-23 02:12:31 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Resurrect a5teroids demo in CMake build. Modified Paths: -------------- allegro/branches/4.9/CMakeLists.txt allegro/branches/4.9/demo/CMakeLists.txt Modified: allegro/branches/4.9/CMakeLists.txt =================================================================== --- allegro/branches/4.9/CMakeLists.txt 2008-08-23 01:34:48 UTC (rev 10477) +++ allegro/branches/4.9/CMakeLists.txt 2008-08-23 02:12:31 UTC (rev 10478) @@ -899,10 +899,7 @@ #-----------------------------------------------------------------------------# if(NOT MSVC80) # XXX disabled because it breaks MSVC's intellisense for some reason - if(USE_CXX AND SUPPORT_FONT) - # temporarily disabled - #add_subdirectory(demo) - endif(USE_CXX AND SUPPORT_FONT) + add_subdirectory(demo) endif(NOT MSVC80) #-----------------------------------------------------------------------------# Modified: allegro/branches/4.9/demo/CMakeLists.txt =================================================================== --- allegro/branches/4.9/demo/CMakeLists.txt 2008-08-23 01:34:48 UTC (rev 10477) +++ allegro/branches/4.9/demo/CMakeLists.txt 2008-08-23 02:12:31 UTC (rev 10478) @@ -33,16 +33,27 @@ src/wave.cpp ) -SET_SOURCE_FILES_PROPERTIES(${DEMO_SRCS} PROPERTIES LANGUAGE "CXX") -include_directories(include ../addons/font) +if(USE_CXX AND SUPPORT_FONT AND SUPPORT_AUDIO AND SUPPORT_ACODEC) + set_source_files_properties(${DEMO_SRCS} PROPERTIES LANGUAGE "CXX") + include_directories( + include + ../addons/font + ../addons/audio + ../addons/acodec + ) -add_executable(demo ${EXECUTABLE_TYPE} ${DEMO_SRCS}) -set_target_properties(demo PROPERTIES - COMPILE_FLAGS "${MAYBE_ALLEGRO_STATICLINK} ${WFLAGS} ${EXE_CFLAGS}" - LINK_FLAGS "${MAYBE_ALLEGRO_STATICLINK}" - ) -target_link_libraries(demo ${LINK_WITH}) -target_link_libraries(demo ${FONT_LINK_WITH}) + add_executable(demo ${EXECUTABLE_TYPE} ${DEMO_SRCS}) + set_target_properties(demo PROPERTIES + COMPILE_FLAGS "${MAYBE_ALLEGRO_STATICLINK} ${WFLAGS} ${EXE_CFLAGS}" + LINK_FLAGS "${MAYBE_ALLEGRO_STATICLINK}" + ) + target_link_libraries(demo + ${LINK_WITH} + ${FONT_LINK_WITH} + ${AUDIO_LINK_WITH} + ${ACODEC_LINK_WITH} + ) +endif(USE_CXX AND SUPPORT_FONT AND SUPPORT_AUDIO AND SUPPORT_ACODEC) #-----------------------------------------------------------------------------# # vi: set ts=8 sts=4 sw=4 et: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2008-08-23 03:17:52
|
Revision: 10479 http://alleg.svn.sourceforge.net/alleg/?rev=10479&view=rev Author: tjaden Date: 2008-08-23 03:18:01 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Add al_set_thread_should_stop() function and make exnew_threads2.c use it. Update threads documentation. Modified Paths: -------------- allegro/branches/4.9/docs/src/refman/threads.txt allegro/branches/4.9/examples/exnew_threads2.c allegro/branches/4.9/include/allegro5/internal/aintern_thread.h allegro/branches/4.9/include/allegro5/threads.h allegro/branches/4.9/src/threads.c allegro/branches/4.9/src/unix/uxthread.c allegro/branches/4.9/src/win/wxthread.c Modified: allegro/branches/4.9/docs/src/refman/threads.txt =================================================================== --- allegro/branches/4.9/docs/src/refman/threads.txt 2008-08-23 02:12:31 UTC (rev 10478) +++ allegro/branches/4.9/docs/src/refman/threads.txt 2008-08-23 03:18:01 UTC (rev 10479) @@ -1,9 +1,7 @@ % Threading API -**Not Yet Implemented** - -Allegro 4.9 [is proposed to] include a simple cross-platform threading -interface. It is a thin layer on top of two threading APIs: Windows threads +Allegro 4.9 includes a simple cross-platform threading interface. +It is a thin layer on top of two threading APIs: Windows threads and POSIX Threads (pthreads). Enforcing a consistent semantics on all platforms would be difficult at best, hence the behaviour of the following functions will differ subtly on different platforms (more so than usual). @@ -82,20 +80,32 @@ void al_join_thread(ALLEGRO_THREAD *thread, void **ret_value); -Wait for the thread to finish executing. +Wait for the thread to finish executing. This implicitly calls +`al_set_thread_should_stop` first. If `ret_value` is non-`NULL`, the value returned by the thread function will be stored at the location pointed to by `ret_value`. *See also:* +[al_set_thread_should_stop], [al_thread_should_stop], [al_destroy_thread]. -**When implementing this, make sure it can join threads which have been created -but not yet started.** +[al_set_thread_should_stop]: #al_set_thread_should_stop +## al_set_thread_should_stop + void al_set_thread_should_stop(ALLEGRO_THREAD *thread); + +Set the flag to indicate `thread` should stop. Returns immediately. + +*See also:* +[al_join_thread], +[al_thread_should_stop]. + + + [al_thread_should_stop]: #al_thread_should_stop ## al_thread_should_stop @@ -106,8 +116,13 @@ *Return value:* -Return true if another thread has called `al_join_thread` on this thread. +Return true if another thread has called `al_join_thread` or +`al_set_thread_should_stop` on this thread. +*See also:* +[al_join_thread], +[al_set_thread_should_stop]. + *Note:* We don't support forceful killing of threads. @@ -292,12 +307,18 @@ int al_wait_cond_timed(ALLEGRO_COND *cond, ALLEGRO_MUTEX *mutex, const ALLEGRO_TIMEOUT *timeout); -Like `al_wait_cond` but the call can time out. +Like `al_wait_cond` but the call can return if the absolute time passes +`timeout` before the condition is signalled. -**Finish the description.** +*Return value:* +Returns zero on success, non-zero if the call timed out. +**Fix up the return value. pthread_cond_timedwait returns ETIMEDOUT +but can return other errors. Do we need to return other errors?** + + [al_broadcast_cond]: #al_broadcast_cond ## al_broadcast_cond Modified: allegro/branches/4.9/examples/exnew_threads2.c =================================================================== --- allegro/branches/4.9/examples/exnew_threads2.c 2008-08-23 02:12:31 UTC (rev 10478) +++ allegro/branches/4.9/examples/exnew_threads2.c 2008-08-23 03:18:01 UTC (rev 10479) @@ -138,7 +138,6 @@ ThreadInfo *info = (ThreadInfo *) arg; Viewport viewport; unsigned char palette[256][3]; - ALLEGRO_TIMEOUT timeout; int y, w, h; y = 0; @@ -154,27 +153,24 @@ info->target_y = 0; while (!al_thread_should_stop(thr)) { - if (y == 0) { - random_palette(palette); - } - al_lock_mutex(info->mutex); - /* When we wait for a condition we won't wake up if someone calls - * al_join_thread() on us, so we won't know to quit. In a proper - * program you would signal the condition variable in that case. Here, - * we just make sure to wait up every so often so we can make the check. - */ - al_init_timeout(&timeout, 0.5); while (info->is_paused) { - if (-1 == al_wait_cond_timed(info->cond, info->mutex, &timeout)) { - /* timeout */ + al_wait_cond(info->cond, info->mutex); + + /* We might be awoken because the program is terminating. */ + if (al_thread_should_stop(thr)) { break; } } if (!info->is_paused) { + if (y == 0) { + random_palette(palette); + } + draw_mandel_line(info->bitmap, &viewport, palette, y); + y++; if (y >= h) { double z = viewport.zoom; @@ -357,6 +353,17 @@ } for (i = 0; i < NUM_THREADS; i++) { + /* Set the flag to stop the thread. The thread might be waiting on a + * condition variable, so signal the condition to force it to wake up. + */ + al_set_thread_should_stop(thread[i]); + al_lock_mutex(thread_info[i].mutex); + al_broadcast_cond(thread_info[i].cond); + al_unlock_mutex(thread_info[i].mutex); + + /* al_destroy_thread() implicitly joins the thread, so this call is not + * strictly necessary. + */ al_join_thread(thread[i], NULL); al_destroy_thread(thread[i]); } Modified: allegro/branches/4.9/include/allegro5/internal/aintern_thread.h =================================================================== --- allegro/branches/4.9/include/allegro5/internal/aintern_thread.h 2008-08-23 02:12:31 UTC (rev 10478) +++ allegro/branches/4.9/include/allegro5/internal/aintern_thread.h 2008-08-23 03:18:01 UTC (rev 10479) @@ -16,6 +16,7 @@ AL_FUNC(void, _al_thread_create, (_AL_THREAD*, void (*proc)(_AL_THREAD*, void*), void *arg)); +AL_FUNC(void, _al_thread_set_should_stop, (_AL_THREAD *)); /* static inline bool _al_thread_should_stop(_AL_THREAD *); */ AL_FUNC(void, _al_thread_join, (_AL_THREAD*)); Modified: allegro/branches/4.9/include/allegro5/threads.h =================================================================== --- allegro/branches/4.9/include/allegro5/threads.h 2008-08-23 02:12:31 UTC (rev 10478) +++ allegro/branches/4.9/include/allegro5/threads.h 2008-08-23 03:18:01 UTC (rev 10479) @@ -30,6 +30,7 @@ (void *(*proc)(ALLEGRO_THREAD *thread, void *arg), void *arg)); AL_FUNC(void, al_start_thread, (ALLEGRO_THREAD *outer)); AL_FUNC(void, al_join_thread, (ALLEGRO_THREAD *outer, void **ret_value)); +AL_FUNC(void, al_set_thread_should_stop, (ALLEGRO_THREAD *outer)); AL_FUNC(bool, al_thread_should_stop, (ALLEGRO_THREAD *outer)); AL_FUNC(void, al_destroy_thread, (ALLEGRO_THREAD *thread)); Modified: allegro/branches/4.9/src/threads.c =================================================================== --- allegro/branches/4.9/src/threads.c 2008-08-23 02:12:31 UTC (rev 10478) +++ allegro/branches/4.9/src/threads.c 2008-08-23 03:18:01 UTC (rev 10479) @@ -165,6 +165,15 @@ } +/* Function: al_set_thread_should_stop + */ +void al_set_thread_should_stop(ALLEGRO_THREAD *outer) +{ + ASSERT(outer); + _al_thread_set_should_stop(&outer->thread); +} + + /* Function: al_thread_should_stop */ bool al_thread_should_stop(ALLEGRO_THREAD *outer) Modified: allegro/branches/4.9/src/unix/uxthread.c =================================================================== --- allegro/branches/4.9/src/unix/uxthread.c 2008-08-23 02:12:31 UTC (rev 10478) +++ allegro/branches/4.9/src/unix/uxthread.c 2008-08-23 03:18:01 UTC (rev 10479) @@ -59,7 +59,7 @@ } -void _al_thread_join(_AL_THREAD *thread) +void _al_thread_set_should_stop(_AL_THREAD *thread) { ASSERT(thread); @@ -68,6 +68,15 @@ thread->should_stop = true; } pthread_mutex_unlock(&thread->mutex); +} + + + +void _al_thread_join(_AL_THREAD *thread) +{ + ASSERT(thread); + + _al_thread_set_should_stop(thread); pthread_join(thread->thread, NULL); pthread_mutex_destroy(&thread->mutex); Modified: allegro/branches/4.9/src/win/wxthread.c =================================================================== --- allegro/branches/4.9/src/win/wxthread.c 2008-08-23 02:12:31 UTC (rev 10478) +++ allegro/branches/4.9/src/win/wxthread.c 2008-08-23 03:18:01 UTC (rev 10479) @@ -52,7 +52,7 @@ } -void _al_thread_join(_AL_THREAD *thread) +void _al_thread_set_should_stop(_AL_THREAD *thread) { ASSERT(thread); @@ -61,6 +61,15 @@ thread->should_stop = true; } LeaveCriticalSection(&thread->cs); +} + + + +void _al_thread_join(_AL_THREAD *thread) +{ + ASSERT(thread); + + _al_thread_set_should_stop(thread); WaitForSingleObject(thread->thread, INFINITE); DeleteCriticalSection(&thread->cs); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tj...@us...> - 2008-08-23 11:17:18
|
Revision: 10485 http://alleg.svn.sourceforge.net/alleg/?rev=10485&view=rev Author: tjaden Date: 2008-08-23 11:17:28 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Integrate kcm_audio into CMake build. Detect OpenAL before trying to build the driver. Modified Paths: -------------- allegro/branches/4.9/CMakeLists.txt allegro/branches/4.9/addons/CMakeLists.txt allegro/branches/4.9/addons/kcm_audio/CMakeLists.txt allegro/branches/4.9/addons/kcm_audio/audio.c Modified: allegro/branches/4.9/CMakeLists.txt =================================================================== --- allegro/branches/4.9/CMakeLists.txt 2008-08-23 10:32:52 UTC (rev 10484) +++ allegro/branches/4.9/CMakeLists.txt 2008-08-23 11:17:28 UTC (rev 10485) @@ -98,6 +98,8 @@ # WANT_AUDIO is off until it checks for OpenAL on the system. option(WANT_AUDIO "Enable audio engine" off) option(WANT_ACODEC "Enable audio codecs (requires audio)" on) +# WANT_KCM_AUDIO is off until it checks for OpenAL on the system. +option(WANT_KCM_AUDIO "Enable kcm_audio engine" off) # WANT_ICODEC is off until it checks for Magick++ option(WANT_ICODEC "Enable image loading/saving for most filetypes (requires libMagick)" off) option(WANT_IIO "Enable IIO image load/save addon" on) Modified: allegro/branches/4.9/addons/CMakeLists.txt =================================================================== --- allegro/branches/4.9/addons/CMakeLists.txt 2008-08-23 10:32:52 UTC (rev 10484) +++ allegro/branches/4.9/addons/CMakeLists.txt 2008-08-23 11:17:28 UTC (rev 10485) @@ -17,6 +17,10 @@ endif(WANT_ACODEC) endif(WANT_AUDIO) +if(WANT_KCM_AUDIO) + add_subdirectory(kcm_audio) +endif(WANT_KCM_AUDIO) + if(WANT_ICODEC) add_subdirectory(icodec) endif(WANT_ICODEC) Modified: allegro/branches/4.9/addons/kcm_audio/CMakeLists.txt =================================================================== --- allegro/branches/4.9/addons/kcm_audio/CMakeLists.txt 2008-08-23 10:32:52 UTC (rev 10484) +++ allegro/branches/4.9/addons/kcm_audio/CMakeLists.txt 2008-08-23 11:17:28 UTC (rev 10485) @@ -1,24 +1,27 @@ -# XXX put in proper tests for libraries +set(AUDIO_SOURCES audio.c) +set(AUDIO_INCLUDE_FILES allegro5/kcm_audio.h) -if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - # Linux needs ALSA. - set(AUDIO_SOURCES audio.c openal.c alsa.c) - set(AUDIO_LIBRARIES openal asound) -else(CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(AUDIO_SOURCES audio.c openal.c) - set(AUDIO_LIBRARIES openal32) -endif(CMAKE_SYSTEM_NAME STREQUAL "Linux") +# XXX make this optional? +include(FindOpenAL) +if(OPENAL_FOUND) + list(APPEND AUDIO_SOURCES openal.c) + list(APPEND AUDIO_LIBRARIES ${OPENAL_LIBRARY}) +endif(OPENAL_FOUND) -set(AUDIO_INCLUDE_FILES allegro5/audio.h) +if(SUPPORT_A5_ALSA) + list(APPEND AUDIO_SOURCES alsa.c) + list(APPEND AUDIO_LIBRARIES asound) +endif(SUPPORT_A5_ALSA) macro(add_audio_build nm extra_flags) - macro(really_add_audio_build nm target libtype more_extra_flags) + macro(really_add_audio_build nm2 target libtype more_extra_flags) add_library(${target} ${libtype} ${AUDIO_SOURCES}) set_target_properties(${target} PROPERTIES - COMPILE_FLAGS "${more_extra_flags} ${LIBRARY_CFLAGS}" - OUTPUT_NAME ${nm} + COMPILE_FLAGS "${more_extra_flags} ${LIBRARY_CFLAGS} -DA5_AUDIO_SRC" + OUTPUT_NAME ${nm2} ) + target_link_libraries(${target} ${LINK_WITH} ${AUDIO_LIBRARIES}) install(TARGETS ${target} @@ -32,35 +35,36 @@ if(SHARED) really_add_audio_build(${nm} ${nm}_shared SHARED "") + target_link_libraries(${nm}_shared ${ADDONS_LINK_WITH}) endif(SHARED) if(STATIC) - really_add_audio_build(${nm} ${nm}_static STATIC "") + really_add_audio_build(${nm}_s ${nm}_static STATIC "-DALLEGRO_STATICLINK") endif(STATIC) endmacro(add_audio_build) if(GRADE_STANDARD) - add_audio_build(a5_audio + add_audio_build(kcm_audio "-O2 -funroll-loops -ffast-math -fomit-frame-pointer") endif(GRADE_STANDARD) if(GRADE_DEBUG) - add_audio_build(a5_audiod + add_audio_build(kcm_audiod "-DDEBUGMODE -g") endif(GRADE_DEBUG) if(GRADE_PROFILE) - add_audio_build(a5_audiop + add_audio_build(kcm_audiop "-pg -O2 -funroll-loops -ffast-math") endif(GRADE_PROFILE) if(GRADE_STANDARD) - set(AUDIO_LIB_TO_LINK a5_audio CACHE INTERNAL "internal") + set(AUDIO_LIB_TO_LINK kcm_audio CACHE INTERNAL "internal") elseif(GRADE_DEBUG) - set(AUDIO_LIB_TO_LINK a5_audiod CACHE INTERNAL "internal") + set(AUDIO_LIB_TO_LINK kcm_audiod CACHE INTERNAL "internal") elseif(GRADE_PROFILE) - set(AUDIO_LIB_TO_LINK a5_audiop CACHE INTERNAL "internal") + set(AUDIO_LIB_TO_LINK kcm_audiop CACHE INTERNAL "internal") endif(GRADE_STANDARD) if(STATIC) @@ -69,18 +73,6 @@ set(AUDIO_LINK_WITH ${AUDIO_LIB_TO_LINK}_shared CACHE INTERNAL "internal") endif(STATIC) -macro(add_audio_example nm) - add_executable(${nm} ${EXECUTABLE_TYPE} ${ARGN}) - set_target_properties(${nm} PROPERTIES - COMPILE_FLAGS "${MAYBE_ALLEGRO_STATICLINK} ${WFLAGS}" - LINK_FLAGS "${MAYBE_ALLEGRO_STATICLINK}" - ) - target_link_libraries(${nm} ${LINK_WITH}) - target_link_libraries(${nm} ${AUDIO_LINK_WITH}) -endmacro(add_audio_example) - -#add_audio_example(ex_audio ex_audio.c) - #-----------------------------------------------------------------------------# # # Install header files. @@ -92,4 +84,3 @@ #-----------------------------------------------------------------------------# # vi: set ts=8 sts=4 sw=4 et: - Modified: allegro/branches/4.9/addons/kcm_audio/audio.c =================================================================== --- allegro/branches/4.9/addons/kcm_audio/audio.c 2008-08-23 10:32:52 UTC (rev 10484) +++ allegro/branches/4.9/addons/kcm_audio/audio.c 2008-08-23 11:17:28 UTC (rev 10485) @@ -20,7 +20,7 @@ void _al_set_error(int error, char* string) { - allegro_message(string); + TRACE("%s (error code: %d)", string, error); } ALLEGRO_AUDIO_DRIVER* driver = NULL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2008-08-23 13:03:13
|
Revision: 10495 http://alleg.svn.sourceforge.net/alleg/?rev=10495&view=rev Author: elias Date: 2008-08-23 13:03:21 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Removed some more obsolete files and merged srx/xglx back to src/x now that there's room. Modified Paths: -------------- allegro/branches/4.9/cmake/FileList.cmake allegro/branches/4.9/scons/unix.scons allegro/branches/4.9/src/opengl/extensions.c allegro/branches/4.9/src/x/xkeyboard.c allegro/branches/4.9/src/x/xmousenu.c Added Paths: ----------- allegro/branches/4.9/src/x/xcursor.c allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xfullscreen.c allegro/branches/4.9/src/x/xglx.h allegro/branches/4.9/src/x/xglx_config.c allegro/branches/4.9/src/x/xsystem.c Removed Paths: ------------- allegro/branches/4.9/src/x/xdga2.c allegro/branches/4.9/src/x/xdga2s.s allegro/branches/4.9/src/x/xgfxdrv.c allegro/branches/4.9/src/x/xmouse.c allegro/branches/4.9/src/x/xsystem.c allegro/branches/4.9/src/x/xvtable.c allegro/branches/4.9/src/x/xwins.s allegro/branches/4.9/src/xglx/ Modified: allegro/branches/4.9/cmake/FileList.cmake =================================================================== --- allegro/branches/4.9/cmake/FileList.cmake 2008-08-23 12:54:29 UTC (rev 10494) +++ allegro/branches/4.9/cmake/FileList.cmake 2008-08-23 13:03:21 UTC (rev 10495) @@ -201,12 +201,13 @@ ) set(ALLEGRO_SRC_X_FILES + src/x/xcursor.c src/x/xkeyboard.c src/x/xmousenu.c - src/xglx/xdisplay.c - src/xglx/xfullscreen.c - src/xglx/xglx_config.c - src/xglx/xsystem.c + src/x/xdisplay.c + src/x/xfullscreen.c + src/x/xglx_config.c + src/x/xsystem.c ) set(ALLEGRO_SRC_QNX_FILES @@ -220,8 +221,6 @@ src/qnx/qphwin.c src/qnx/qswitch.s src/qnx/qsystem.c - src/unix/alsa5.c - src/unix/alsamidi.c src/unix/udjgpp.c src/unix/ufile.c src/unix/umain.c @@ -270,28 +269,21 @@ ) set(ALLEGRO_MODULE_ALSADIGI_FILES - src/unix/alsa5.c - src/unix/alsa9.c ) set(ALLEGRO_MODULE_ALSAMIDI_FILES - src/unix/alsamidi.c ) set(ALLEGRO_MODULE_ESD_FILES - src/unix/uesd.c ) set(ALLEGRO_MODULE_ARTS_FILES - src/unix/arts.c ) set(ALLEGRO_MODULE_SGIAL_FILES - src/unix/sgial.c ) set(ALLEGRO_MODULE_JACK_FILES - src/unix/jack.c ) set(ALLEGRO_INCLUDE_FILES Modified: allegro/branches/4.9/scons/unix.scons =================================================================== --- allegro/branches/4.9/scons/unix.scons 2008-08-23 12:54:29 UTC (rev 10494) +++ allegro/branches/4.9/scons/unix.scons 2008-08-23 13:03:21 UTC (rev 10495) @@ -288,11 +288,6 @@ #asmdef = asmdefEnv.Program('#build/asmdef', '#build/i386/asmdef.c') #asmdefEnv.Command(asmdef_inc,asmdef,'$SOURCE $TARGET') -# TODO: How does the modules stuff work? Shouldn't they still be linked in? -# unixfiles.remove("src/unix/alsa5.c") -# unixfiles.remove("src/unix/alsa9.c") -# unixfiles.remove("src/unix/alsamidi.c") - context.add_files(unixfiles) def supportModules(): @@ -300,47 +295,6 @@ modules = [] -# These should probably also pass -DALLEGRO_MODULE or something -if platform["ALLEGRO_WITH_ALSADIGI"]: - def buildAlsa(menv,appendDir,buildDir,libDir): - alsaEnv = menv.Clone() - alsaEnv.Append(LIBS = "asound") - alsaBuildDir = buildDir + '/modules' - alsaEnv.BuildDir(alsaBuildDir, '.') - sources = ["alsa5.c", "alsa9.c"] - lib = alsaEnv.SharedLibrary(libDir + "/alleg-alsadigi",appendDir(alsaBuildDir + "/src/unix/", sources)) - modules.append(lib) - return lib - context.addExtra(buildAlsa, depends = True) - -if platform["ALLEGRO_WITH_ALSAMIDI"]: - def buildAlsa(menv,appendDir,buildDir,libDir): - alsaEnv = menv.Clone() - alsaEnv.Append(LIBS = "asound") - alsaBuildDir = buildDir + '/modules' - alsaEnv.BuildDir(alsaBuildDir, '.') - sources = ["alsamidi.c"] - lib = alsaEnv.SharedLibrary(libDir + "/alleg-alsamidi",appendDir(alsaBuildDir + "/src/unix/", sources)) - modules.append(lib) - return lib - context.addExtra(buildAlsa, depends = True) - - -# FIXME: Does A5 really support svgalib? -# This might be broken. asmdefs.inc isnt generated until after svgalibs.s -# is compiled, but svgalib.s depends on asmdefs.inc. Either this dependancy -# needs to be fixed from scons or asmdefs.inc should be moved/generated elsewhere -#if platform["ALLEGRO_LINUX_SVGALIB"][0]: -# def buildSVGA(menv,appendDir,buildDir,libDir): -# vgaEnv = menv.Clone() -# vgaEnv.Append(LIBS = "vga") -# sources = ["svgalib.c"] -# assembler_object = vgaEnv.SharedObject(appendDir(buildDir + "/src/linux/",['svgalibs.s'])) -# lib = vgaEnv.SharedLibrary(libDir + "/alleg-svgalib",appendDir(buildDir + "/src/linux/", sources) + [assembler_object]) -# modules.append(lib) -# return lib -# context.addExtra(buildSVGA) - if platform["ALLEGRO_LINUX_FBCON"]: def buildFBCon(menv,appendDir,buildDir,libDir): sources = ["fbcon.c"] Modified: allegro/branches/4.9/src/opengl/extensions.c =================================================================== --- allegro/branches/4.9/src/opengl/extensions.c 2008-08-23 12:54:29 UTC (rev 10494) +++ allegro/branches/4.9/src/opengl/extensions.c 2008-08-23 13:03:21 UTC (rev 10495) @@ -29,7 +29,7 @@ #if defined ALLEGRO_WINDOWS #include "../win/wgl.h" #elif defined ALLEGRO_UNIX - #include "../xglx/xglx.h" + #include "../x/xglx.h" #endif #include <string.h> Copied: allegro/branches/4.9/src/x/xcursor.c (from rev 10494, allegro/branches/4.9/src/xglx/xcursor.c) =================================================================== --- allegro/branches/4.9/src/x/xcursor.c (rev 0) +++ allegro/branches/4.9/src/x/xcursor.c 2008-08-23 13:03:21 UTC (rev 10495) @@ -0,0 +1,238 @@ +#include "xglx.h" + +#include <X11/cursorfont.h> + +#ifdef ALLEGRO_XWINDOWS_WITH_XCURSOR +#include <X11/Xcursor/Xcursor.h> +#else +/* This requirement could be lifted for compatibility with older systems at the + * expense of functionality, but it's probably not worthwhile. + */ +#error This file requires Xcursor. +#endif + +static ALLEGRO_MOUSE_CURSOR *xdpy_create_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_BITMAP *bmp, int x_focus, int y_focus) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + + int bmp_w; + int bmp_h; + ALLEGRO_LOCKED_REGION lr; + ALLEGRO_MOUSE_CURSOR_XGLX *xcursor; + XcursorImage *image; + int c, ix, iy; + + bmp_w = al_get_bitmap_width(bmp); + bmp_h = al_get_bitmap_height(bmp); + if (!al_lock_bitmap(bmp, &lr, ALLEGRO_LOCK_READONLY)) { + return NULL; + } + + xcursor = _AL_MALLOC(sizeof *xcursor); + if (!xcursor) { + return NULL; + } + + image = XcursorImageCreate(bmp->w, bmp->h); + if (image == None) { + _AL_FREE(xcursor); + return NULL; + } + + c = 0; + for (iy = 0; iy < bmp_h; iy++) { + for (ix = 0; ix < bmp_w; ix++) { + ALLEGRO_COLOR col; + unsigned char r, g, b, a; + + col = al_get_pixel(bmp, ix, iy); + al_unmap_rgb(col, &r, &g, &b); + a = 255; + image->pixels[c++] = (a<<24) | (r<<16) | (g<<8) | (b); + } + } + + image->xhot = x_focus; + image->yhot = y_focus; + + _al_mutex_lock(&system->lock); + xcursor->cursor = XcursorImageLoadCursor(xdisplay, image); + _al_mutex_unlock(&system->lock); + + XcursorImageDestroy(image); + + al_unlock_bitmap(bmp); + + return (ALLEGRO_MOUSE_CURSOR *)xcursor; +} + + + +static void xdpy_destroy_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + ALLEGRO_MOUSE_CURSOR_XGLX *xcursor = (ALLEGRO_MOUSE_CURSOR_XGLX *)cursor; + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + + _al_mutex_lock(&system->lock); + + if (glx->current_cursor == xcursor->cursor) { + XUndefineCursor(xdisplay, xwindow); + glx->current_cursor = None; + } + + XFreeCursor(xdisplay, xcursor->cursor); + _AL_FREE(xcursor); + + _al_mutex_unlock(&system->lock); +} + + + +static bool xdpy_set_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_MOUSE_CURSOR *cursor) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + ALLEGRO_MOUSE_CURSOR_XGLX *xcursor = (ALLEGRO_MOUSE_CURSOR_XGLX *)cursor; + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + + glx->current_cursor = xcursor->cursor; + + if (!glx->cursor_hidden) { + _al_mutex_lock(&system->lock); + XDefineCursor(xdisplay, xwindow, glx->current_cursor); + _al_mutex_unlock(&system->lock); + } + + return true; +} + + + +static bool xdpy_set_system_mouse_cursor(ALLEGRO_DISPLAY *display, + ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + unsigned int cursor_shape; + + switch (cursor_id) { + case ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW: + cursor_shape = XC_left_ptr; + break; + case ALLEGRO_SYSTEM_MOUSE_CURSOR_BUSY: + cursor_shape = XC_watch; + break; + case ALLEGRO_SYSTEM_MOUSE_CURSOR_QUESTION: + cursor_shape = XC_question_arrow; + break; + case ALLEGRO_SYSTEM_MOUSE_CURSOR_EDIT: + cursor_shape = XC_xterm; + break; + default: + return false; + } + + _al_mutex_lock(&system->lock); + + glx->current_cursor = XCreateFontCursor(xdisplay, cursor_shape); + /* XXX: leak? */ + + if (!glx->cursor_hidden) { + XDefineCursor(xdisplay, xwindow, glx->current_cursor); + } + + _al_mutex_unlock(&system->lock); + + return true; +} + + + +/* Show the system mouse cursor. */ +static bool xdpy_show_mouse_cursor(ALLEGRO_DISPLAY *display) +{ + ALLEGRO_DISPLAY_XGLX *glx = (void *)display; + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + + if (!glx->cursor_hidden) + return true; + + _al_mutex_lock(&system->lock); + XDefineCursor(xdisplay, xwindow, glx->current_cursor); + glx->cursor_hidden = false; + _al_mutex_unlock(&system->lock); + return true; +} + + + +/* Hide the system mouse cursor. */ +static bool xdpy_hide_mouse_cursor(ALLEGRO_DISPLAY *display) +{ + ALLEGRO_DISPLAY_XGLX *glx = (void *)display; + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + Display *xdisplay = system->x11display; + Window xwindow = glx->window; + + if (glx->cursor_hidden) + return true; + + _al_mutex_lock(&system->lock); + + if (glx->invisible_cursor == None) { + unsigned long gcmask; + XGCValues gcvalues; + + Pixmap pixmap = XCreatePixmap(xdisplay, xwindow, 1, 1, 1); + + GC temp_gc; + XColor color; + + gcmask = GCFunction | GCForeground | GCBackground; + gcvalues.function = GXcopy; + gcvalues.foreground = 0; + gcvalues.background = 0; + temp_gc = XCreateGC(xdisplay, pixmap, gcmask, &gcvalues); + XDrawPoint(xdisplay, pixmap, temp_gc, 0, 0); + XFreeGC(xdisplay, temp_gc); + color.pixel = 0; + color.red = color.green = color.blue = 0; + color.flags = DoRed | DoGreen | DoBlue; + glx->invisible_cursor = XCreatePixmapCursor(xdisplay, pixmap, + pixmap, &color, &color, 0, 0); + XFreePixmap(xdisplay, pixmap); + } + + XDefineCursor(xdisplay, xwindow, glx->invisible_cursor); + glx->cursor_hidden = true; + + _al_mutex_unlock(&system->lock); + + return true; +} + + + +void _al_xglx_add_cursor_functions(ALLEGRO_DISPLAY_INTERFACE *vt) +{ + vt->create_mouse_cursor = xdpy_create_mouse_cursor; + vt->destroy_mouse_cursor = xdpy_destroy_mouse_cursor; + vt->set_mouse_cursor = xdpy_set_mouse_cursor; + vt->set_system_mouse_cursor = xdpy_set_system_mouse_cursor; + vt->show_mouse_cursor = xdpy_show_mouse_cursor; + vt->hide_mouse_cursor = xdpy_hide_mouse_cursor; +} Property changes on: allegro/branches/4.9/src/x/xcursor.c ___________________________________________________________________ Added: svn:mergeinfo + Deleted: allegro/branches/4.9/src/x/xdga2.c =================================================================== --- allegro/branches/4.9/src/x/xdga2.c 2008-08-23 12:54:29 UTC (rev 10494) +++ allegro/branches/4.9/src/x/xdga2.c 2008-08-23 13:03:21 UTC (rev 10495) @@ -1,1110 +0,0 @@ -#error This file is no longer used. - -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * DGA 2.0 graphics driver. - * - * By Angelo Mottola. - * - * See readme.txt for copyright information. - */ - -#include "allegro5/allegro5.h" -#include "allegro5/internal/aintern.h" -#include "allegro5/platform/aintunix.h" -#include "xwin.h" - -#if (defined ALLEGRO_XWINDOWS_WITH_XF86DGA2) && ((!defined ALLEGRO_WITH_MODULES) || (defined ALLEGRO_MODULE)) - -#include <X11/Xlib.h> -#include <X11/extensions/xf86dga.h> - - -#define DGA_MAX_EVENTS 5 - -#define RESYNC() XDGASync(_xwin.display, _xwin.screen); - - -static XDGADevice *dga_device = NULL; -static char _xdga2_driver_desc[256] = EMPTY_STRING; -static Colormap _dga_cmap = 0; -static int dga_event_base; - - -static int _xdga2_find_mode(int w, int h, int vw, int vh, int depth); -static void _xdga2_handle_input(void); -static BITMAP *_xdga2_gfxdrv_init(int w, int h, int vw, int vh, int color_depth); -static BITMAP *_xdga2_soft_gfxdrv_init(int w, int h, int vw, int vh, int color_depth); -static void _xdga2_gfxdrv_exit(BITMAP *bmp); -static int _xdga2_poll_scroll(void); -static int _xdga2_request_scroll(int x, int y); -static int _xdga2_request_video_bitmap(BITMAP *bmp); -static int _xdga2_scroll_screen(int x, int y); -static void _xdga2_set_palette_range(AL_CONST PALETTE p, int from, int to, int vsync); -static void _xdga2_acquire(BITMAP *bmp); -static GFX_MODE_LIST *_xdga2_fetch_mode_list(void); - -#ifdef ALLEGRO_NO_ASM -uintptr_t _xdga2_write_line(BITMAP *bmp, int line); -#else -uintptr_t _xdga2_write_line_asm(BITMAP *bmp, int line); -#endif - - -static void (*_orig_hline) (BITMAP *bmp, int x1, int y, int x2, int color); -static void (*_orig_vline) (BITMAP *bmp, int x, int y1, int y2, int color); -static void (*_orig_rectfill) (BITMAP *bmp, int x1, int y1, int x2, int y2, int color); -static void (*_orig_draw_sprite) (BITMAP *bmp, BITMAP *sprite, int x, int y); -static void (*_orig_masked_blit) (BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height); - -static void _xaccel_hline(BITMAP *bmp, int x1, int y, int x2, int color); -static void _xaccel_vline(BITMAP *bmp, int x, int y1, int y2, int color); -static void _xaccel_rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); -static void _xaccel_clear_to_color(BITMAP *bmp, int color); -static void _xaccel_blit_to_self(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height); -static void _xaccel_draw_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y); -static void _xaccel_masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height); - -#define DGA_MAX_EVENTS 5 - - -GFX_DRIVER gfx_xdga2 = -{ - GFX_XDGA2, - empty_string, - empty_string, - "DGA 2.0", - _xdga2_gfxdrv_init, - _xdga2_gfxdrv_exit, - _xdga2_scroll_screen, - _xwin_vsync, - _xdga2_set_palette_range, - _xdga2_request_scroll, - _xdga2_poll_scroll, - NULL, - NULL, NULL, NULL, - _xdga2_request_video_bitmap, - NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, - NULL, NULL, - NULL, - _xdga2_fetch_mode_list, - 640, 480, - TRUE, - 0, 0, - 0, - 0, - FALSE, - /* new_api_branch additions */ - NULL, NULL, NULL, NULL, NULL, NULL -}; - - - -GFX_DRIVER gfx_xdga2_soft = -{ - GFX_XDGA2_SOFT, - empty_string, - empty_string, - "DGA 2.0 soft", - _xdga2_soft_gfxdrv_init, - _xdga2_gfxdrv_exit, - _xdga2_scroll_screen, - _xwin_vsync, - _xdga2_set_palette_range, - _xdga2_request_scroll, - _xdga2_poll_scroll, - NULL, - NULL, NULL, NULL, - _xdga2_request_video_bitmap, - NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, - NULL, NULL, - NULL, - _xdga2_fetch_mode_list, - 640, 480, - TRUE, - 0, 0, - 0, - 0, - FALSE, - /* new_api_branch additions */ - NULL, NULL, NULL, NULL, NULL, NULL -}; - - - -/* _xdga2_fetch_mode_list: - * Creates list of available DGA2 video modes. - */ -static GFX_MODE_LIST *_xdga2_private_fetch_mode_list(void) -{ - XDGAMode *mode; - int bpp, num_modes, stored_modes, i, j, already_there; - GFX_MODE_LIST *mode_list; - GFX_MODE *tmp; - - mode = XDGAQueryModes(_xwin.display, _xwin.screen, &num_modes); - if (!mode) - return NULL; - - mode_list = _AL_MALLOC(sizeof(GFX_MODE_LIST)); - if (!mode_list) - goto error; - mode_list->mode = NULL; - - stored_modes = 0; - for (i=0; i<num_modes; i++) { - bpp = (mode[i].depth == 24) ? mode[i].bitsPerPixel : mode[i].depth; - already_there = FALSE; - for (j=0; j<stored_modes; j++) { - if ((mode_list->mode[j].width == mode[i].viewportWidth) && - (mode_list->mode[j].height == mode[i].viewportHeight) && - (mode_list->mode[j].bpp == bpp)) { - already_there = TRUE; - break; - } - } - if (!already_there) { - tmp = _AL_REALLOC(mode_list->mode, sizeof(GFX_MODE) * (stored_modes + 1)); - if (!tmp) - goto error; - mode_list->mode = tmp; - mode_list->mode[stored_modes].width = mode[i].viewportWidth; - mode_list->mode[stored_modes].height = mode[i].viewportHeight; - mode_list->mode[stored_modes].bpp = bpp; - stored_modes++; - } - } - - tmp = _AL_REALLOC(mode_list->mode, sizeof(GFX_MODE) * (stored_modes + 1)); - if (!tmp) - goto error; - mode_list->mode = tmp; - mode_list->mode[stored_modes].width = 0; - mode_list->mode[stored_modes].height = 0; - mode_list->mode[stored_modes].bpp = 0; - mode_list->num_modes = stored_modes; - - XFree(mode); - return mode_list; - - error: - if (mode_list) { - _AL_FREE(mode_list->mode); - _AL_FREE(mode_list); - } - XFree(mode); - return NULL; -} - - - -static GFX_MODE_LIST *_xdga2_fetch_mode_list(void) -{ - GFX_MODE_LIST *list; - XLOCK (); - list = _xdga2_private_fetch_mode_list(); - XUNLOCK (); - return list; -} - - - -/* _xdga2_find_mode: - * Returns id number of specified video mode if available, 0 otherwise. - */ -static int _xdga2_find_mode(int w, int h, int vw, int vh, int depth) -{ - XDGAMode *mode; - int num_modes; - int bpp, i, found; - - mode = XDGAQueryModes(_xwin.display, _xwin.screen, &num_modes); - if (!mode) - return 0; - - /* Let's first try setting also requested refresh rate */ - for (i=0; i<num_modes; i++) { - bpp = mode[i].depth; - if (bpp == 24) bpp = mode[i].bitsPerPixel; - - if ((mode[i].viewportWidth == w) && - (mode[i].viewportHeight == h) && - (mode[i].imageWidth >= vw) && - (mode[i].imageHeight >= vh) && - (mode[i].verticalRefresh >= _refresh_rate_request) && - (bpp == depth)) break; - } - - if (i == num_modes) { - /* No modes were found, so now we don't care about refresh rate */ - for (i=0; i<num_modes; i++) { - bpp = mode[i].depth; - if (bpp == 24) bpp = mode[i].bitsPerPixel; - - if ((mode[i].viewportWidth == w) && - (mode[i].viewportHeight == h) && - (mode[i].imageWidth >= vw) && - (mode[i].imageHeight >= vh) && - (bpp == depth)) break; - } - if (i == num_modes) { - /* No way out: mode not found */ - XFree(mode); - return 0; - } - } - - found = mode[i].num; - XFree(mode); - return found; -} - - - -/* _xdga_process_event: [bgman thread] - * Process (usually) one event. To handle key repeats sometimes two - * events are processed. Returns the number of events processed. - */ -static int _xdga_process_event(XDGAEvent *cur_event, XDGAEvent *next_event) -{ - /* - static int mouse_buttons = 0; - int dx, dy, dz = 0; - */ - XKeyEvent key; - - switch (cur_event->type - dga_event_base) { - - case KeyPress: - XDGAKeyEventToXKeyEvent(&cur_event->xkey, &key); - key.type -= dga_event_base; - _al_xwin_keyboard_handler(&key, true); - return 1; - - case KeyRelease: - XDGAKeyEventToXKeyEvent(&cur_event->xkey, &key); - key.type -= dga_event_base; - _al_xwin_keyboard_handler (&key, TRUE); - return 1; - - case ButtonPress: - _al_xwin_mouse_button_press_handler(cur_event->xbutton.button); - return 1; - - case ButtonRelease: - _al_xwin_mouse_button_release_handler(cur_event->xbutton.button); - return 1; - - case MotionNotify: - _al_xwin_mouse_motion_notify_handler_dga2( - cur_event->xmotion.dx, cur_event->xmotion.dy, - 0, 0, gfx_xdga2.w, gfx_xdga2.h); - return 1; - - default: - /* Unknown event, just discard it. */ - return 1; - } -} - - - -/* _xdga2_handle_input: [bgman thread] - * Handles DGA events pending from queue. - * This overrides the standard X event queue handler. - */ -static void _xdga2_handle_input(void) -{ - int i, events, events_queued; - static XDGAEvent event[DGA_MAX_EVENTS + 1]; /* +1 for possible extra event, see below. */ -/*** - XDGAEvent *cur_event; - XKeyEvent key; - int dx, dy, dz = 0; - static int mouse_buttons = 0; -***/ - - if (_xwin.display == 0) - return; - - XSync(_xwin.display, False); - - /* How much events are available in the queue. */ - events = events_queued = XEventsQueued(_xwin.display, QueuedAlready); - if (events <= 0) - return; - - /* Limit amount of events we read at once. */ - if (events > DGA_MAX_EVENTS) - events = DGA_MAX_EVENTS; - - /* Read pending events. */ - for (i = 0; i < events; i++) - XNextEvent(_xwin.display, (XEvent *)&event[i]); - - /* Can't have a KeyRelease as last event, since it might be only half - * of a key repeat pair. - */ - if (events_queued > events && event[i-1].type == dga_event_base+KeyRelease) { - XNextEvent(_xwin.display, (XEvent *)&event[i]); - events++; - } - - /* Process all events. */ - i = 0; - while (i < events) { - if (i == events-1) - i += _xdga_process_event(&event[i], NULL); - else - i += _xdga_process_event(&event[i], &event[i+1]); - } -} - - - -/* _xdga2_display_is_local: - * Tests that display connection is local. - * (Note: this is duplicated in xwin.c). - */ -static int _xdga2_private_display_is_local(void) -{ - char *name; - - if (_xwin.display == 0) - return 0; - - /* Get display name and test for local display. */ - name = XDisplayName(0); - - return (((name == 0) || (name[0] == ':') || (strncmp(name, "unix:", 5) == 0)) ? 1 : 0); -} - - - -/* _xdga2_gfxdrv_init_drv: - * Initializes driver and creates screen bitmap. - */ -static BITMAP *_xdga2_private_gfxdrv_init_drv(GFX_DRIVER *drv, int w, int h, int vw, int vh, int depth, int accel) -{ - int dga_error_base, dga_major_version, dga_minor_version; - int mode, mask, red_shift = 0, green_shift = 0, blue_shift = 0; - long input_mask; - char tmp1[128], tmp2[128]; - BITMAP *bmp; - - /* This is just to test if the system driver has been installed properly */ - if (_xwin.window == None) - return NULL; - - /* Test that display is local. */ - if (!_xdga2_private_display_is_local()) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("This driver needs local display")); - return NULL; - } - - /* Choose convenient size. */ - if ((w == 0) && (h == 0)) { - w = 640; - h = 480; - } - - if ((w < 80) || (h < 80) || (w > 4096) || (h > 4096)) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported screen size")); - return NULL; - } - - if (vw < w) - vw = w; - if (vh < h) - vh = h; - - if (1 -#ifdef ALLEGRO_COLOR8 - && (depth != 8) -#endif -#ifdef ALLEGRO_COLOR16 - && (depth != 15) - && (depth != 16) -#endif -#ifdef ALLEGRO_COLOR24 - && (depth != 24) -#endif -#ifdef ALLEGRO_COLOR32 - && (depth != 32) -#endif - ) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Unsupported color depth")); - return NULL; - } - - /* Checks presence of DGA extension */ - if (!XDGAQueryExtension(_xwin.display, &dga_event_base, &dga_error_base) || - !XDGAQueryVersion(_xwin.display, &dga_major_version, &dga_minor_version)) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("DGA extension is not supported")); - return NULL; - } - - /* Works only with DGA 2.0 or newer */ - if (dga_major_version < 2) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("DGA 2.0 or newer is required")); - return NULL; - } - - /* Attempts to access the framebuffer */ - if (!XDGAOpenFramebuffer(_xwin.display, _xwin.screen)) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Can not open framebuffer")); - return NULL; - } - - /* Finds suitable video mode number */ - mode = _xdga2_find_mode(w, h, vw, vh, depth); - if (!mode) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Resolution not supported")); - return NULL; - } - - /* Sets DGA video mode */ - dga_device = XDGASetMode(_xwin.display, _xwin.screen, mode); - if (dga_device == NULL) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Can not switch to DGA mode")); - return NULL; - } - _xwin.in_dga_mode = 2; - _set_current_refresh_rate(dga_device->mode.verticalRefresh); - set_display_switch_mode(SWITCH_NONE); - - /* Installs DGA color map */ - if (_dga_cmap) { - XFreeColormap(_xwin.display, _dga_cmap); - _dga_cmap = 0; - } - if ((dga_device->mode.visualClass == PseudoColor) - || (dga_device->mode.visualClass == GrayScale) - || (dga_device->mode.visualClass == DirectColor)) - _dga_cmap = XDGACreateColormap(_xwin.display, _xwin.screen, dga_device, AllocAll); - else - _dga_cmap = XDGACreateColormap(_xwin.display, _xwin.screen, dga_device, AllocNone); - XDGAInstallColormap(_xwin.display, _xwin.screen, _dga_cmap); - - /* Sets up direct color shifts */ - if (depth != 8) { - for (mask = dga_device->mode.redMask, red_shift = 0; (mask & 1) == 0; - mask >>= 1, red_shift++); - for (mask = dga_device->mode.greenMask, green_shift = 0; (mask & 1) == 0; - mask >>= 1, green_shift++); - for (mask = dga_device->mode.blueMask, blue_shift = 0; (mask & 1) == 0; - mask >>= 1, blue_shift++); - } - switch (depth) { - - case 15: - _rgb_r_shift_15 = red_shift; - _rgb_g_shift_15 = green_shift; - _rgb_b_shift_15 = blue_shift; - break; - - case 16: - _rgb_r_shift_16 = red_shift; - _rgb_g_shift_16 = green_shift; - _rgb_b_shift_16 = blue_shift; - break; - - case 24: - _rgb_r_shift_24 = red_shift; - _rgb_g_shift_24 = green_shift; - _rgb_b_shift_24 = blue_shift; - break; - - case 32: - _rgb_r_shift_32 = red_shift; - _rgb_g_shift_32 = green_shift; - _rgb_b_shift_32 = blue_shift; - break; - } - - /* Enables input */ - XSync(_xwin.display, True); - input_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask - | ButtonReleaseMask | PointerMotionMask; - XDGASelectInput(_xwin.display, _xwin.screen, input_mask); - _al_comouse_on = TRUE; - - /* Creates screen bitmap */ - drv->linear = TRUE; - bmp = _make_bitmap(dga_device->mode.imageWidth, dga_device->mode.imageHeight, - (uintptr_t)dga_device->data, drv, depth, - dga_device->mode.bytesPerScanline); - if (!bmp) { - ustrzcpy(allegro_error, ALLEGRO_ERROR_SIZE, get_config_text("Not enough memory")); - return NULL; - } - drv->w = bmp->cr = w; - drv->h = bmp->cb = h; - drv->vid_mem = dga_device->mode.imageWidth * dga_device->mode.imageHeight - * BYTES_PER_PIXEL(depth); - - if (accel) { - /* Hardware acceleration has been requested */ - - /* Updates line switcher to accommodate framebuffer synchronization */ -#ifdef ALLEGRO_NO_ASM - bmp->write_bank = _xdga2_write_line; - bmp->read_bank = _xdga2_write_line; -#else - bmp->write_bank = _xdga2_write_line_asm; - bmp->read_bank = _xdga2_write_line_asm; -#endif - - _screen_vtable.acquire = _xdga2_acquire; - - /* Checks for hardware acceleration support */ - if (dga_device->mode.flags & XDGASolidFillRect) { - /* XDGAFillRectangle is available */ - _orig_hline = _screen_vtable.hline; - _orig_vline = _screen_vtable.vline; - _orig_rectfill = _screen_vtable.rectfill; - _screen_vtable.hline = _xaccel_hline; - _screen_vtable.vline = _xaccel_vline; - _screen_vtable.rectfill = _xaccel_rectfill; - _screen_vtable.clear_to_color = _xaccel_clear_to_color; - gfx_capabilities |= (GFX_HW_HLINE | GFX_HW_FILL); - } - if (dga_device->mode.flags & XDGABlitRect) { - /* XDGACopyArea is available */ - _screen_vtable.blit_to_self = _xaccel_blit_to_self; - _screen_vtable.blit_to_self_forward = _xaccel_blit_to_self; - _screen_vtable.blit_to_self_backward = _xaccel_blit_to_self; - gfx_capabilities |= GFX_HW_VRAM_BLIT; - } - if (dga_device->mode.flags & XDGABlitTransRect) { - /* XDGACopyTransparentArea is available */ - _orig_draw_sprite = _screen_vtable.draw_sprite; - _orig_masked_blit = _screen_vtable.masked_blit; - _screen_vtable.masked_blit = _xaccel_masked_blit; - _screen_vtable.draw_sprite = _xaccel_draw_sprite; - if (_screen_vtable.color_depth == 8) - _screen_vtable.draw_256_sprite = _xaccel_draw_sprite; - gfx_capabilities |= GFX_HW_VRAM_BLIT_MASKED; - } - - RESYNC(); - } - - /* Checks for triple buffering */ - if (dga_device->mode.viewportFlags & XDGAFlipRetrace) - gfx_capabilities |= GFX_CAN_TRIPLE_BUFFER; - - /* Sets up driver description */ - uszprintf(_xdga2_driver_desc, sizeof(_xdga2_driver_desc), - uconvert_ascii("X-Windows DGA 2.0 graphics%s", tmp1), - uconvert_ascii(accel ? (gfx_capabilities ? " (accelerated)" : "") : " (software only)", tmp2)); - drv->desc = _xdga2_driver_desc; - - return bmp; -} - -static BITMAP *_xdga2_gfxdrv_init_drv(GFX_DRIVER *drv, int w, int h, int vw, int vh, int depth, int accel) -{ - BITMAP *bmp; - XLOCK(); - bmp = _xdga2_private_gfxdrv_init_drv(drv, w, h, vw, vh, depth, accel); - XUNLOCK(); - if (!bmp) - _xdga2_gfxdrv_exit(bmp); - else - _xwin_input_handler = _xdga2_handle_input; - return bmp; -} - - - -/* _xdga2_gfxdrv_init: - * Creates screen bitmap. - */ -static BITMAP *_xdga2_gfxdrv_init(int w, int h, int vw, int vh, int color_depth) -{ - return _xdga2_gfxdrv_init_drv(&gfx_xdga2, w, h, vw, vh, color_depth, TRUE); -} - - - -/* _xdga2_soft_gfxdrv_init: - * Creates screen bitmap (software only mode). - */ -static BITMAP *_xdga2_soft_gfxdrv_init(int w, int h, int vw, int vh, int color_depth) -{ - return _xdga2_gfxdrv_init_drv(&gfx_xdga2_soft, w, h, vw, vh, color_depth, FALSE); -} - - - -/* _xdga2_gfxdrv_exit: - * Shuts down gfx driver. - */ -static void _xdga2_gfxdrv_exit(BITMAP *bmp) -{ - XLOCK(); - - if (_xwin.in_dga_mode) { - _xwin_input_handler = 0; - - XDGACloseFramebuffer(_xwin.display, _xwin.screen); - XDGASetMode(_xwin.display, _xwin.screen, 0); - _xwin.in_dga_mode = 0; - - if (_dga_cmap) { - XFreeColormap(_xwin.display, _dga_cmap); - _dga_cmap = 0; - } - - XInstallColormap(_xwin.display, _xwin.colormap); - - set_display_switch_mode(SWITCH_BACKGROUND); - } - - XUNLOCK(); -} - - - -/* _xdga2_poll_scroll: - * Returns true if there are pending scrolling requests left. - */ -static int _xdga2_poll_scroll(void) -{ - int result; - - XLOCK(); - result = XDGAGetViewportStatus(_xwin.display, _xwin.screen); - XUNLOCK(); - return result; -} - - - -/* _xdga2_request_scroll: - * Starts a screen scroll but doesn't wait for the retrace. - */ -static int _xdga2_request_scroll(int x, int y) -{ - XLOCK(); - - if (x < 0) x = 0; - else if (x > dga_device->mode.maxViewportX) - x = dga_device->mode.maxViewportX; - if (y < 0) y = 0; - else if (y > dga_device->mode.maxViewportY) - y = dga_device->mode.maxViewportY; - - XDGASetViewport(_xwin.display, _xwin.screen, x, y, XDGAFlipRetrace); - - XUNLOCK(); - - return 0; -} - - - -/* _xdga2_request_video_bitmap: - * Page flips to display specified bitmap, but doesn't wait for retrace. - */ -static int _xdga2_request_video_bitmap(BITMAP *bmp) -{ - XLOCK(); - XDGASetViewport(_xwin.display, _xwin.screen, bmp->x_ofs, bmp->y_ofs, XDGAFlipRetrace); - XUNLOCK(); - return 0; -} - - - -/* _xdga2_scroll_screen: - * Scrolls DGA viewport. - */ -static int _xdga2_scroll_screen(int x, int y) -{ - if (x < 0) x = 0; - else if (x > dga_device->mode.maxViewportX) - x = dga_device->mode.maxViewportX; - if (y < 0) y = 0; - else if (y > dga_device->mode.maxViewportY) - y = dga_device->mode.maxViewportY; - if ((_xwin.scroll_x == x) && (_xwin.scroll_y == y)) - return 0; - - XLOCK(); - - _xwin.scroll_x = x; - _xwin.scroll_y = y; - - if (_wait_for_vsync) - while (XDGAGetViewportStatus(_xwin.display, _xwin.screen)) - ; - - XDGASetViewport(_xwin.display, _xwin.screen, x, y, XDGAFlipRetrace); - - XUNLOCK(); - - return 0; -} - - - -/* _xdga2_set_palette_range: - * Sets palette entries. - */ -static void _xdga2_set_palette_range(AL_CONST PALETTE p, int from, int to, int vsync) -{ - int i; - static XColor color[256]; - - XLOCK(); - - if (vsync) { - XSync(_xwin.display, False); - } - - if (dga_device->mode.depth == 8) { - for (i = from; i <= to; i++) { - color[i].flags = DoRed | DoGreen | DoBlue; - color[i].pixel = i; - color[i].red = ((p[i].r & 0x3F) * 65535L) / 0x3F; - color[i].green = ((p[i].g & 0x3F) * 65535L) / 0x3F; - color[i].blue = ((p[i].b & 0x3F) * 65535L) / 0x3F; - } - XStoreColors(_xwin.display, _dga_cmap, color + from, to - from + 1); - XSync(_xwin.display, False); - } - - XUNLOCK(); -} - - - -/* _xdga2_lock: - * Synchronizes with framebuffer. - */ -void _xdga2_lock(BITMAP *bmp) -{ - XLOCK(); - RESYNC(); - XUNLOCK(); - bmp->id |= BMP_ID_LOCKED; -} - - - -/* _xdga2_acquire: - * Video bitmap acquire function; synchronizes with framebuffer if needed. - */ -static void _xdga2_acquire(BITMAP *bmp) -{ - if (!(bmp->id & BMP_ID_LOCKED)) - _xdga2_lock(bmp); -} - - -#ifdef ALLEGRO_NO_ASM - -/* _xdga2_write_line: - * Returns new line and synchronizes framebuffer if needed. - */ -uintptr_t _xdga2_write_line(BITMAP *bmp, int line) -{ - if (!(bmp->id & BMP_ID_LOCKED)) - _xdga2_lock(bmp); - - return (uintptr_t)(bmp->line[line]); -} - -#endif - - -/* _xaccel_hline: - * Accelerated hline. - */ -static void _xaccel_hline(BITMAP *bmp, int x1, int y, int x2, int color) -{ - int tmp; - - if (_drawing_mode != DRAW_MODE_SOLID) { - _orig_hline(bmp, x1, y, x2, color); - return; - } - - if (x1 > x2) { - tmp = x1; - x1 = x2; - x2 = tmp; - } - - if (bmp->clip) { - if ((y < bmp->ct) || (y >= bmp->cb)) - return; - - if (x1 < bmp->cl) - x1 = bmp->cl; - - if (x2 >= bmp->cr) - x2 = bmp->cr-1; - - if (x2 < x1) - return; - } - - x1 += bmp->x_ofs; - y += bmp->y_ofs; - x2 += bmp->x_ofs; - - XLOCK(); - XDGAFillRectangle(_xwin.display, _xwin.screen, x1, y, (x2 - x1) + 1, 1, color); - XUNLOCK(); - bmp->id &= ~BMP_ID_LOCKED; -} - - - -/* _xaccel_vline: - * Accelerated vline. - */ -static void _xaccel_vline(BITMAP *bmp, int x, int y1, int y2, int color) -{ - int tmp; - - if (_drawing_mode != DRAW_MODE_SOLID) { - _orig_vline(bmp, x, y1, y2, color); - return; - } - - if (y1 > y2) { - tmp = y1; - y1 = y2; - y2 = tmp; - } - - if (bmp->clip) { - if ((x < bmp->cl) || (x >= bmp->cr)) - return; - - if (y1 < bmp->ct) - y1 = bmp->ct; - - if (y2 >= bmp->cb) - y2 = bmp->cb-1; - - if (y2 < y1) - return; - } - - x += bmp->x_ofs; - y1 += bmp->y_ofs; - y2 += bmp->y_ofs; - - XLOCK(); - XDGAFillRectangle(_xwin.display, _xwin.screen, x, y1, 1, (y2 - y1) + 1, color); - XUNLOCK(); - bmp->id &= ~BMP_ID_LOCKED; -} - - - -/* _xaccel_rectfill: - * Accelerated rectfill. - */ -static void _xaccel_rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color) -{ - int tmp; - - if (_drawing_mode != DRAW_MODE_SOLID) { - _orig_rectfill(bmp, x1, y1, x2, y2, color); - return; - } - - if (x2 < x1) { - tmp = x1; - x1 = x2; - x2 = tmp; - } - - if (y2 < y1) { - tmp = y1; - y1 = y2; - y2 = tmp; - } - - if (bmp->clip) { - if (x1 < bmp->cl) - x1 = bmp->cl; - - if (x2 >= bmp->cr) - x2 = bmp->cr-1; - - if (x2 < x1) - return; - - if (y1 < bmp->ct) - y1 = bmp->ct; - - if (y2 >= bmp->cb) - y2 = bmp->cb-1; - - if (y2 < y1) - return; - } - - x1 += bmp->x_ofs; - y1 += bmp->y_ofs; - x2 += bmp->x_ofs; - y2 += bmp->y_ofs; - - XLOCK(); - XDGAFillRectangle(_xwin.display, _xwin.screen, x1, y1, (x2 - x1) + 1, (y2 - y1) + 1, color); - XUNLOCK(); - bmp->id &= ~BMP_ID_LOCKED; -} - - - -/* _xaccel_clear_to_color: - * Accelerated clear_to_color. - */ -static void _xaccel_clear_to_color(BITMAP *bmp, int color) -{ - int x1, y1, x2, y2; - - x1 = bmp->cl + bmp->x_ofs; - y1 = bmp->ct + bmp->y_ofs; - x2 = bmp->cr + bmp->x_ofs; - y2 = bmp->cb + bmp->y_ofs; - - XLOCK(); - XDGAFillRectangle(_xwin.display, _xwin.screen, x1, y1, x2 - x1, y2 - y1, color); - XUNLOCK(); - bmp->id &= ~BMP_ID_LOCKED; -} - - - -/* _xaccel_blit_to_self: - * Accelerated vram -> vram blit. - */ -static void _xaccel_blit_to_self(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height) -{ - source_x += source->x_ofs; - source_y += source->y_ofs; - dest_x += dest->x_ofs; - dest_y += dest->y_ofs; - - XLOCK(); - XDGACopyArea(_xwin.display, _xwin.screen, source_x, source_y, width, height, dest_x, dest_y); - XUNLOCK(); - dest->id &= ~BMP_ID_LOCKED; -} - - - -/* _xaccel_draw_sprite: - * Accelerated draw_sprite. - */ -static void _xaccel_draw_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y) -{ - int sx, sy, w, h; - - if (is_video_bitmap(sprite)) { - sx = 0; - sy = 0; - w = sprite->w; - h = sprite->h; - - if (bmp->clip) { - if (x < bmp->cl) { - sx += bmp->cl - x; - w -= bmp->cl - x; - x = bmp->cl; - } - - if (y < bmp->ct) { - sy += bmp->ct - y; - h -= bmp->ct - y; - y = bmp->ct; - } - - if (x + w > bmp->cr) - w = bmp->cr - x; - - if (w <= 0) - return; - - if (y + h > bmp->cb) - h = bmp->cb - y; - - if (h <= 0) - return; - } - - sx += sprite->x_ofs; - sy += sprite->y_ofs; - x += bmp->x_ofs; - y += bmp->y_ofs; - - XLOCK(); - XDGACopyTransparentArea(_xwin.display, _xwin.screen, sx, sy, w, h, x, y, sprite->vtable->mask_color); - XUNLOCK(); - bmp->id &= ~BMP_ID_LOCKED; - } - else - _orig_draw_sprite(bmp, sprite, x, y); -} - - - -/* _xaccel_masked_blit: - * Accelerated masked_blit. - */ -static void _xaccel_masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height) -{ - if (is_video_bitmap(source)) { - source_x += source->x_ofs; - source_y += source->y_ofs; - dest_x += dest->x_ofs; - dest_y += dest->y_ofs; - - XLOCK(); - XDGACopyTransparentArea(_xwin.display, _xwin.screen, source_x, source_y, width, height, dest_x, dest_y, source->vtable->mask_color); - XUNLOCK(); - dest->id &= ~BMP_ID_LOCKED; - } - else - _orig_masked_blit(source, dest, source_x, source_y, dest_x, dest_y, width, height); -} - - - -#ifdef ALLEGRO_MODULE - -/* _module_init: - * Called when loaded as a dynamically linked module. - */ -void _module_init(int system_driver) -{ - if (system_driver != SYSTEM_XWINDOWS) return; - _unix_register_gfx_driver(GFX_XDGA2_SOFT, &gfx_xdga2_soft, FALSE, FALSE); - _unix_register_gfx_driver(GFX_XDGA2, &gfx_xdga2, FALSE, FALSE); -} - -#endif - - -#endif Deleted: allegro/branches/4.9/src/x/xdga2s.s =================================================================== --- allegro/branches/4.9/src/x/xdga2s.s 2008-08-23 12:54:29 UTC (rev 10494) +++ allegro/branches/4.9/src/x/xdga2s.s 2008-08-23 13:03:21 UTC (rev 10495) @@ -1,53 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * DGA2 bank switching code. These routines will be called - * with a line number in %eax and a pointer to the bitmap in %edx. - * The bank switcher should select the appropriate bank for the - * line, and replace %eax with a pointer to the start of the line. - * - * By Angelo Mottola. - * - * See readme.txt for copyright information. - */ - - -#include "allegro5/platform/alunixac.h" -#include "../i386/asmdefs.inc" - -.text - - -#if (!defined ALLEGRO_NO_ASM) && (defined ALLEGRO_XWINDOWS_WITH_XF86DGA2) -#if (!defined ALLEGRO_WITH_MODULES) || (defined ALLEGRO_MODULE) - -FUNC (_xdga2_write_line_asm) - - /* check whether bitmap is already locked */ - testl $BMP_ID_LOCKED, BMP_ID(%edx) - jnz Locked - - pushl %ecx - pushl %eax - pushl %edx - call GLOBL(_xdga2_lock) - popl %edx - popl %eax - popl %ecx - - Locked: - /* get pointer to the video memory */ - movl BMP_LINE(%edx,%eax,4), %eax - - ret - -#endif -#endif - Copied: allegro/branches/4.9/src/x/xdisplay.c (from rev 10494, allegro/branches/4.9/src/xglx/xdisplay.c) =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c (rev 0) +++ allegro/branches/4.9/src/x/xdisplay.c 2008-08-23 13:03:21 UTC (rev 10495) @@ -0,0 +1,610 @@ +#include "xglx.h" +#include "allegro5/internal/aintern_bitmap.h" +#include "allegro5/internal/aintern_opengl.h" + +#include <X11/cursorfont.h> + + + +static ALLEGRO_DISPLAY_INTERFACE *xdpy_vt; + + + +/* Helper to set up GL state as we want it. */ +static void setup_gl(ALLEGRO_DISPLAY *d) +{ + glViewport(0, 0, d->w, d->h); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, d->w, d->h, 0, -1, 1); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + + + +static void set_size_hints(ALLEGRO_DISPLAY *d, int w, int h) +{ + if (!(d->flags & ALLEGRO_RESIZABLE)) { + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *glx = (void *)d; + XSizeHints *hints = XAllocSizeHints();; + + hints->flags = PMinSize | PMaxSize | PBaseSize; + hints->min_width = hints->max_width = hints->base_width = w; + hints->min_height = hints->max_height = hints->base_height = h; + XSetWMNormalHints(system->x11display, glx->window, hints); + + XFree(hints); + } +} + + + +/* Helper to set a window icon. */ +static void xdpy_set_icon(ALLEGRO_DISPLAY *d, ALLEGRO_BITMAP *bitmap) +{ + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *display = (void *)d; + XWMHints wm_hints; + int x, y; + + _al_mutex_lock(&system->lock); + + int w = al_get_bitmap_width(bitmap); + int h = al_get_bitmap_height(bitmap); + + XWindowAttributes attributes; + XGetWindowAttributes(system->x11display, display->window, + &attributes); + + // FIXME: Do we need to check for other depths? Just 32 now.. + XImage *image = XCreateImage(system->x11display, attributes.visual, + attributes.depth, ZPixmap, 0, NULL, w, h, 32, 0); + // FIXME: Must check for errors + // TODO: Is this really freed by XDestroyImage? + image->data = _AL_MALLOC_ATOMIC(image->bytes_per_line * h); + + // FIXME: Do this properly. + ALLEGRO_LOCKED_REGION lr; + if (al_lock_bitmap(bitmap, &lr, ALLEGRO_LOCK_READONLY)) { + const char *src; + char *dst; + int i; + + src = lr.data; + dst = image->data; + for (i = 0; i < h; i++) { + memcpy(dst, src, w * 4); + src += lr.pitch; + dst += w * 4; + } + + al_unlock_bitmap(bitmap); + } + else { + /* XXX what should we do here? */ + } + + display->icon = XCreatePixmap(system->x11display, display->window, + bitmap->w, bitmap->h, attributes.depth); + + GC gc = XCreateGC(system->x11display, display->icon, 0, NULL); + XPutImage(system->x11display, display->icon, gc, image, 0, 0, 0, 0, w, h); + XFreeGC(system->x11display, gc); + XDestroyImage(image); + + wm_hints.flags = IconPixmapHint | IconMaskHint; + wm_hints.icon_pixmap = display->icon; + // FIXME: Does X11 support apha values? In any case, we need a separate + // mask here! + wm_hints.icon_mask = display->icon; + XSetWMHints(system->x11display, display->window, &wm_hints); + // FIXME: Do we have to destroy the icon pixmap, or is it owned by X11 now? + + XFlush(system->x11display); + + _al_mutex_unlock(&system->lock); +} + + + +static void xdpy_set_window_position(ALLEGRO_DISPLAY *display, int x, int y) +{ + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + Window root, parent, child, *children; + unsigned int n; + + _al_mutex_lock(&system->lock); + + /* To account for the window border, we have to find the parent window which + * draws the border. If the parent is the root though, then we should not + * translate. + */ + XQueryTree(system->x11display, glx->window, &root, &parent, &children, &n); + if (parent != root) { + XTranslateCoordinates(system->x11display, parent, glx->window, + x, y, &x, &y, &child); + } + + XMoveWindow(system->x11display, glx->window, x, y); + XFlush(system->x11display); + _al_mutex_unlock(&system->lock); +} + + + +static void xdpy_toggle_frame(ALLEGRO_DISPLAY *display, bool onoff) +{ + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)display; + Display *x11 = system->x11display; + Atom hints; + + _al_mutex_lock(&system->lock); + +#if 1 + /* This code is taken from the GDK sources. So it works perfectly in Gnome, + * no idea if it will work anywhere else. X11 documentation itself only + * describes a way how to make the window completely unmanaged, but that + * would also require special care in the event handler. + */ + hints = XInternAtom(x11, "_MOTIF_WM_HINTS", True); + if (hints) { + struct { + unsigned long flags; + unsigned long functions; + unsigned long decorations; + long input_mode; + unsigned long status; + } motif = {2, 0, onoff, 0, 0}; + XChangeProperty(x11, glx->window, hints, hints, 32, PropModeReplace, + (void *)&motif, sizeof motif / 4); + } +#endif + + _al_mutex_unlock(&system->lock); +} + + + +/* Create a new X11 dummy display, which maps directly to a GLX window. */ +static ALLEGRO_DISPLAY *xdpy_create_display(int w, int h) +{ + ALLEGRO_DISPLAY_XGLX *d = _AL_MALLOC(sizeof *d); + ALLEGRO_DISPLAY *display = (void*)d; + ALLEGRO_OGL_EXTRAS *ogl = _AL_MALLOC(sizeof *ogl); + memset(d, 0, sizeof *d); + memset(ogl, 0, sizeof *ogl); + display->ogl_extras = ogl; + + ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver(); + + _al_mutex_lock(&system->lock); + + int major, minor; + glXQueryVersion(system->x11display, &major, &minor); + d->glx_version = major * 100 + minor * 10; + TRACE("xdisplay: GLX %.1f.\n", d->glx_version / 100.f); + + display->w = w; + display->h = h; + display->vt = xdpy_vt; + //FIXME + //display->format = al_get_new_display_format(); + display->format = ALLEGRO_PIXEL_FORMAT_ABGR_8888; + + display->refresh_rate = al_get_new_display_refresh_rate(); + display->flags = al_get_new_display_flags(); + + // FIXME: default? Is this the right place to set this? + display->flags |= ALLEGRO_OPENGL; + + // TODO: What is this? + d->xscreen = DefaultScreen(system->x11display); + + if (display->flags & ALLEGRO_FULLSCREEN) + _al_xglx_fullscreen_set_mode(system, w, h, 0, 0); + + //FIXME + //d->display.flags |= ALLEGRO_WINDOWED; + + /* Add ourself to the list of displays. */ + ALLEGRO_DISPLAY_XGLX **add = _al_vector_alloc_back(&system->system.displays); + *add = d; + + /* Each display is an event source. */ + _al_event_source_init(&display->es); + + _al_xglx_config_select_visual(d); + + TRACE("xdisplay: Selected visual %lx.\n", d->xvinfo->visualid); + + /* Create a colormap. */ + Colormap cmap = XCreateColormap(system->x11display, + RootWindow(system->x11display, d->xvinfo->screen), + d->xvinfo->visual, AllocNone); + + /* Create an X11 window */ + XSetWindowAttributes swa; + int mask = CWBorderPixel | CWColormap | CWEventMask; + swa.colormap = cmap; + swa.border_pixel = 0; + swa.event_mask = + KeyPressMask | + KeyReleaseMask | + StructureNotifyMask | + EnterWindowMask | + LeaveWindowMask | + FocusChangeMask | + ExposureMask | + PropertyChangeMask | + ButtonPressMask | + ButtonReleaseMask | + PointerMotionMask; + + d->window = XCreateWindow(system->x11display, RootWindow( + system->x11display, d->xvinfo->screen), 0, 0, w, h, 0, d->xvinfo->depth, + InputOutput, d->xvinfo->visual, mask, &swa); + + if (display->flags & ALLEGRO_NOFRAME) + xdpy_toggle_frame(display, false); + + TRACE("xdisplay: X11 window created.\n"); + + set_size_hints(display, w, h); + + d->wm_delete_window_atom = XInternAtom (system->x11display, + "WM_DELETE_WINDOW", False); + XSetWMProtocols(system->x11display, d->window, &d->wm_delete_window_atom, 1); + + XMapWindow(system->x11display, d->window); + TRACE("xdisplay: X11 window mapped.\n"); + + /* Send the pending request to the X server. */ + XSync(system->x11display, False); + /* To avoid race conditions where some X11 functions fail before the window + * is mapped, we wait here until it is mapped. Note that the thread is + * locked, so the event could not possibly have been processed yet in the + * events thread. So as long as no other map events occur, the condition + * should only be signalled when our window gets mapped. + */ + _al_cond_wait(&system->mapped, &system->lock); + + _al_xglx_config_create_context(d); + + if (display->flags & ALLEGRO_FULLSCREEN) { + _al_xglx_fullscreen_to_display(system, d); + } + + /* Make our GLX context current for reading and writing in the current + * thread. + */ + if (d->fbc) { + glXMakeContextCurrent(system->gfxdisplay, d->glxwindow, d->glxwindow, + d->context); + } + else { + glXMakeCurrent(system->gfxdisplay, d->glxwindow, d->context); + } + + _al_ogl_manage_extensions(display); + _al_ogl_set_extensions(ogl->extension_api); + + setup_gl(display); + + ogl->backbuffer = _al_ogl_create_backbuffer(display); + + d->invisible_cursor = None; + d->current_cursor = XC_left_ptr; + d->cursor_hidden = false; + + d->icon = None; + d->icon_mask = None; + + _al_mutex_unlock(&system->lock); + + return display; +} + + + +static void xdpy_destroy_display(ALLEGRO_DISPLAY *d) +{ + ALLEGRO_SYSTEM_XGLX *s = (void *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *glx = (void *)d; + ALLEGRO_OGL_EXTRAS *ogl = d->ogl_extras; + + /* If we're the last display, convert all bitmpas to display independent + * (memory) bitmaps. */ + if (s->system.displays._size == 1) { + while (d->bitmaps._size > 0) { + ALLEGRO_BITMAP **bptr = _al_vector_ref_back(&d->bitmaps); + ALLEGRO_BITMAP *b = *bptr; + _al_convert_to_memory_bitmap(b); + } + } + else { + /* Pass all bitmaps to any other living display. (We assume all displays + * are compatible.) */ + size_t i; + ALLEGRO_DISPLAY **living = NULL; + ASSERT(s->system.displays._size > 1); + + for (i = 0; i < s->system.displays._size; i++) { + living = _al_vector_ref(&s->system.displays, i); + if (*living != d) + break; + } + + for (i = 0; i < d->bitmaps._size; i++) { + ALLEGRO_BITMAP **add = _al_vector_alloc_back(&(*living)->bitmaps); + ALLEGRO_BITMAP **ref = _al_vector_ref(&d->bitmaps, i); + *add = *ref; + (*add)->display = *living; + } + } + + _al_ogl_unmanage_extensions(d); + + _al_mutex_lock(&s->lock); + _al_vector_find_and_delete(&s->system.displays, &d); + XDestroyWindow(s->x11display, glx->window); + + if (d->flags & ALLEGRO_FULLSCREEN) + _al_xglx_restore_video_mode(s); + + if (ogl->backbuffer) { + _al_ogl_destroy_backbuffer(ogl->backbuffer); + ogl->backbuffer = NULL; + } + + _al_vector_free(&d->bitmaps); + _al_event_source_free(&d->es); + + _AL_FREE(d->ogl_extras); + _AL_FREE(d); + + _al_mutex_unlock(&s->lock); +} + + + +static bool xdpy_set_current_display(ALLEGRO_DISPLAY *d) +{ + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)d; + ALLEGRO_OGL_EXTRAS *ogl = d->ogl_extras; + + /* Make our GLX context current for reading and writing in the current + * thread. + */ + if (glx->fbc) { + if (!glXMakeContextCurrent(system->gfxdisplay, glx->glxwindow, + glx->glxwindow, glx->context)) + return false; + } + else { + if (!glXMakeCurrent(system->gfxdisplay, glx->glxwindow, glx->context)) + return false; + } + + _al_ogl_set_extensions(ogl->extension_api); + + return true; +} + + + +/* Dummy implementation of flip. */ +static void xdpy_flip_display(ALLEGRO_DISPLAY *d) +{ + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)d; + glFlush(); + glXSwapBuffers(system->gfxdisplay, glx->glxwindow); +} + + + +static bool xdpy_acknowledge_resize(ALLEGRO_DISPLAY *d) +{ + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)d; + XWindowAttributes xwa; + unsigned int w, h; + + _al_mutex_lock(&system->lock); + + /* glXQueryDrawable is GLX 1.3+. */ + /* + glXQueryDrawable(system->x11display, glx->glxwindow, GLX_WIDTH, &w); + glXQueryDrawable(system->x11display, glx->glxwindow, GLX_HEIGHT, &h); + */ + + XGetWindowAttributes(system->x11display, glx->window, &xwa); + w = xwa.width; + h = xwa.height; + + d->w = w; + d->h = h; + + setup_gl(d); + + _al_mutex_unlock(&system->lock); + + return true; +} + + + +static bool xdpy_resize_display(ALLEGRO_DISPLAY *d, int w, int h) +{ + ALLEGRO_SYSTEM_XGLX *system = (ALLEGRO_SYSTEM_XGLX *)al_system_driver(); + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)d; + + _al_mutex_lock(&system->lock); + + set_size_hints(d, w, h); + XResizeWindow(system->x11display, glx->window, w, h); + XSync(system->x11display, False); + + /* Wait until we are actually resized. There might be a better way.. */ + _al_cond_wait(&system->resized, &system->lock); + + /* The user can expect the display to already be resized when + * xdpy_resize_display returns. + * TODO: Right now, we still generate a resize event - maybe we should not. + */ + xdpy_acknowledge_resize(d); + + if (d->flags & ALLEGRO_FULLSCREEN) { + _al_xglx_fullscreen_set_mode(system, w, h, 0, 0); + _al_xglx_fullscreen_to_display(system, glx); + } + + _al_mutex_unlock(&system->lock); + return true; +} + + + +/* Handle an X11 configure event. [X11 thread] + * Only called from the event handler with the system locked. + */ +void _al_display_xglx_configure(ALLEGRO_DISPLAY *d, XEvent *xevent) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)d; + + ALLEGRO_EVENT_SOURCE *es = &glx->display.es; + _al_event_source_lock(es); + + /* Generate a resize event if the size has changed. We cannot asynchronously + * change the display size here yet, since the user will only know about a + * changed size after receiving the resize event. Here we merely add the + * event to the queue. + */ + if (d->w != xevent->xconfigure.width || + d->h != xevent->xconfigure.height) { + if (_al_event_source_needs_to_generate_event(es)) { + ALLEGRO_EVENT *event = _al_event_source_get_unused_event(es); + if (event) { + event->display.type = ALLEGRO_EVENT_DISPLAY_RESIZE; + event->display.timestamp = al_current_time(); + event->display.x = xevent->xconfigure.x; + event->display.y = xevent->xconfigure.y; + event->display.width = xevent->xconfigure.width; + event->display.height = xevent->xconfigure.height; + _al_event_source_emit_event(es, event); + } + } + } + + /* Generate an expose event. */ + if (_al_event_source_needs_to_generate_event(es)) { + ALLEGRO_EVENT *event = _al_event_source_get_unused_event(es); + if (event) { + event->display.type = ALLEGRO_EVENT_DISPLAY_EXPOSE; + event->display.timestamp = al_current_time(); + event->display.x = xevent->xconfigure.x; + event->display.y = xevent->xconfigure.y; + event->display.width = xevent->xconfigure.width; + event->display.height = xevent->xconfigure.height; + _al_event_source_emit_event(es, event); + } + } + + /* This ignores the event when changing the border (which has bogus + * coordinates). + */ + if (xevent->xconfigure.send_event) { + glx->x = xevent->xconfigure.x; + glx->y = xevent->xconfigure.y; + } + + _al_event_source_unlock(es); +} + + + +/* Handle an X11 close button event. [X11 thread] + * Only called from the event handler with the system locked. + */ +void _al_display_xglx_closebutton(ALLEGRO_DISPLAY *d, XEvent *xevent) +{ + ALLEGRO_DISPLAY_XGLX *glx = (ALLEGRO_DISPLAY_XGLX *)d; + + ALLEGRO_EVENT_SOURCE *es = &d->es; + _al_event_source_lock(es); + + if (_al_event_source_needs_to_generate_event(es)) { + ALLEGRO_EVENT *event = _al_event_source_get_unused_event(es); + if (event) { + event->display.type = ALLE... [truncated message content] |
From: <el...@us...> - 2008-08-23 14:23:39
|
Revision: 10501 http://alleg.svn.sourceforge.net/alleg/?rev=10501&view=rev Author: elias Date: 2008-08-23 14:23:49 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Implemented ALLEGRO_DISPLAY_SWITCH_IN/OUT events for X11. Modified Paths: -------------- allegro/branches/4.9/examples/exnew_events.c allegro/branches/4.9/include/allegro5/events.h allegro/branches/4.9/src/x/xdisplay.c allegro/branches/4.9/src/x/xglx.h allegro/branches/4.9/src/x/xsystem.c Modified: allegro/branches/4.9/examples/exnew_events.c =================================================================== --- allegro/branches/4.9/examples/exnew_events.c 2008-08-23 13:31:04 UTC (rev 10500) +++ allegro/branches/4.9/examples/exnew_events.c 2008-08-23 14:23:49 UTC (rev 10501) @@ -153,6 +153,20 @@ +void log_general(char const *format, ...) +{ + char buf[MAX_MSG_LEN]; + va_list args; + va_start(args, format); + + uvszprintf(buf, sizeof(buf), format, args); + va_end(args); + + log_message(buf); +} + + + void draw_timer_tick(ALLEGRO_TIMER *timer, long count) { char buf[MAX_MSG_LEN]; @@ -407,6 +421,14 @@ */ case ALLEGRO_EVENT_DISPLAY_CLOSE: return; + + case ALLEGRO_EVENT_DISPLAY_SWITCH_IN: + log_general("Switch In"); + break; + + case ALLEGRO_EVENT_DISPLAY_SWITCH_OUT: + log_general("Switch Out"); + break; /* We received an event of some type we don't know about. * Just ignore it. Modified: allegro/branches/4.9/include/allegro5/events.h =================================================================== --- allegro/branches/4.9/include/allegro5/events.h 2008-08-23 13:31:04 UTC (rev 10500) +++ allegro/branches/4.9/include/allegro5/events.h 2008-08-23 14:23:49 UTC (rev 10501) @@ -98,6 +98,11 @@ * * ALLEGRO_EVENT_DISPLAY_FOUND - Generated when a lost device is regained. * Drawing will no longer be a no-op. + * + * ALLEGRO_EVENT_DISPLAY_SWITCH_OUT - The window is no longer active, that + * is the user might have clicked into another window or "tabbed" away. + * + * ALLEGRO_EVENT_DISPLAY_SWITCH_IN - The window is the active one again. */ enum { Modified: allegro/branches/4.9/src/x/xdisplay.c =================================================================== --- allegro/branches/4.9/src/x/xdisplay.c 2008-08-23 13:31:04 UTC (rev 10500) +++ allegro/branches/4.9/src/x/xdisplay.c 2008-08-23 14:23:49 UTC (rev 10501) @@ -553,6 +553,30 @@ +/* Handle X11 switch event. [X11 thread] + */ +void _al_xwin_display_switch_handler(ALLEGRO_DISPLAY *display, + XFocusChangeEvent *xevent) +{ + ALLEGRO_DISPLAY_XGLX *glx = (void *)display; + ALLEGRO_EVENT_SOURCE *es = &display->es; + _al_event_source_lock(es); + if (_al_event_source_needs_to_generate_event(es)) { + ALLEGRO_EVENT *event = _al_event_source_get_unused_event(es); + if (event) { + if (xevent->type == FocusOut) + event->display.type = ALLEGRO_EVENT_DISPLAY_SWITCH_OUT; + else + event->display.type = ALLEGRO_EVENT_DISPLAY_SWITCH_IN; + event->display.timestamp = al_current_time(); + _al_event_source_emit_event(es, event); + } + } + _al_event_source_unlock(es); +} + + + static bool xdpy_is_compatible_bitmap(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *bitmap) { Modified: allegro/branches/4.9/src/x/xglx.h =================================================================== --- allegro/branches/4.9/src/x/xglx.h 2008-08-23 13:31:04 UTC (rev 10500) +++ allegro/branches/4.9/src/x/xglx.h 2008-08-23 14:23:49 UTC (rev 10501) @@ -93,6 +93,8 @@ /* display */ void _al_display_xglx_configure(ALLEGRO_DISPLAY *d, XEvent *event); void _al_display_xglx_closebutton(ALLEGRO_DISPLAY *d, XEvent *xevent); +void _al_xwin_display_switch_handler(ALLEGRO_DISPLAY *d, + XFocusChangeEvent *event); /* keyboard */ void _al_xwin_keyboard_handler(XKeyEvent *event, bool dga2_hack, Modified: allegro/branches/4.9/src/x/xsystem.c =================================================================== --- allegro/branches/4.9/src/x/xsystem.c 2008-08-23 13:31:04 UTC (rev 10500) +++ allegro/branches/4.9/src/x/xsystem.c 2008-08-23 14:23:49 UTC (rev 10501) @@ -35,6 +35,14 @@ _al_xwin_keyboard_handler(&event.xkey, false, &d->display); break; + case FocusIn: + //_al_xwin_keyboard_focus_handler(&event.xfocus); + _al_xwin_display_switch_handler(&d->display, &event.xfocus); + break; + case FocusOut: + //_al_xwin_keyboard_focus_handler(&event.xfocus); + _al_xwin_display_switch_handler(&d->display, &event.xfocus); + break; case ButtonPress: _al_xwin_mouse_button_press_handler(event.xbutton.button, &d->display); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2008-08-23 17:46:07
|
Revision: 10506 http://alleg.svn.sourceforge.net/alleg/?rev=10506&view=rev Author: elias Date: 2008-08-23 17:46:17 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Made KCM addon build with scons. Modified Paths: -------------- allegro/branches/4.9/addons/kcm_audio/SConscript allegro/branches/4.9/scons/all.scons Modified: allegro/branches/4.9/addons/kcm_audio/SConscript =================================================================== --- allegro/branches/4.9/addons/kcm_audio/SConscript 2008-08-23 15:46:43 UTC (rev 10505) +++ allegro/branches/4.9/addons/kcm_audio/SConscript 2008-08-23 17:46:17 UTC (rev 10506) @@ -1,5 +1,5 @@ -Import( 'context' ) -import addons +Import("context") +import addons, helpers configs = [] @@ -8,7 +8,7 @@ ret = context.TryAction('openal-config --cflags --libs')[0] if ret: - tmpEnv = context.env.Copy() + tmpEnv = context.env.Clone() context.env.ParseConfig('openal-config --cflags --libs') ret = context.TryLink(""" #include <AL/al.h> @@ -26,7 +26,7 @@ ret = context.TryAction('pkg-config --libs --cflags alsa')[0] if ret: - tmpEnv = context.env.Copy() + tmpEnv = context.env.Clone() context.env.ParseConfig('pkg-config --libs --cflags alsa') ret = context.TryLink(""" #include <alsa/asoundlib.h> @@ -39,33 +39,39 @@ context.Result(ret) return ret -can_build = True +config = context.getLibraryEnv().Configure(custom_tests = + {"CheckOpenAL": CheckOpenAL, + "CheckAlsa" : CheckAlsa}) +settings = helpers.SimpleHash() +settings["ALLEGRO_CFG_KCM_OPENAL"] = config.CheckOpenAL() +settings["ALLEGRO_CFG_KCM_ALSA"] = config.CheckAlsa() +config.Finish() -tests = { "CheckOpenAL": CheckOpenAL, - "CheckAlsa" : CheckAlsa, - } +helpers.parse_cmake_h(context.getLibraryEnv(), + settings, + "#addons/kcm_audio/allegro5/internal/aintern_kcm_cfg.h.cmake", + "#addons/kcm_audio/allegro5/internal/aintern_kcm_cfg.h") -config = context.getLibraryEnv().Configure(custom_tests = tests) +source = ["alsa.c", "audio.c", "kcm_mixer.c", "kcm_sample.c", "kcm_stream.c", + "kcm_voice.c", "openal.c"] +configs = [] -can_build = can_build and config.CheckOpenAL() -can_build = can_build and config.CheckAlsa() -config.Finish() - +can_build = True if can_build: - configs.extend(['openal-config --libs']) - configs.extend(['pkg-config --libs alsa']) + configs.extend(["openal-config --libs"]) + configs.extend(["pkg-config --libs alsa"]) addons.do_build( context = context, - source = Split(""" - alsa.c - audio.c - openal.c - """), - dir = 'audio', - name = 'audio', - install_headers = ['allegro5/audio.h','allegro5/internal/aintern_audio.h'], - configs = configs - ) + source = source, + dir = "kcm_audio", + name = "kcm_audio", + install_headers = [ + "allegro5/kcm_audio.h", + "allegro5/internal/aintern_kcm_audio.h", + "aintern_kcm_cfg.h"], + configs = configs, + example_libs = ["sndfile"], + examples = [("ex_kcm_player", ["ex_kcm_play.c"])],) -Return('can_build') +Return("can_build") Modified: allegro/branches/4.9/scons/all.scons =================================================================== --- allegro/branches/4.9/scons/all.scons 2008-08-23 15:46:43 UTC (rev 10505) +++ allegro/branches/4.9/scons/all.scons 2008-08-23 17:46:17 UTC (rev 10506) @@ -191,6 +191,7 @@ buildAddon("iio") buildAddon('font') +buildAddon("kcm_audio") if buildAddon('audio'): buildAddon('acodec') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2008-08-23 20:01:30
|
Revision: 10509 http://alleg.svn.sourceforge.net/alleg/?rev=10509&view=rev Author: elias Date: 2008-08-23 20:01:39 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Removed grabber and dat tools - they won't work with A5. Modified Paths: -------------- allegro/branches/4.9/SConstruct allegro/branches/4.9/scons/all.scons allegro/branches/4.9/tools/CMakeLists.txt Removed Paths: ------------- allegro/branches/4.9/tools/dat.c allegro/branches/4.9/tools/dat2c.c allegro/branches/4.9/tools/dat2s.c allegro/branches/4.9/tools/datedit.c allegro/branches/4.9/tools/datedit.h allegro/branches/4.9/tools/exedat.c allegro/branches/4.9/tools/grabber.c allegro/branches/4.9/tools/plugins/ Modified: allegro/branches/4.9/SConstruct =================================================================== --- allegro/branches/4.9/SConstruct 2008-08-23 19:58:31 UTC (rev 10508) +++ allegro/branches/4.9/SConstruct 2008-08-23 20:01:39 UTC (rev 10509) @@ -393,21 +393,6 @@ SConscript("scons/naturaldocs.scons") -plugins_h = context.getLibraryEnv().Cat( 'tools/plugins/plugins.h', appendDir( 'tools/plugins/', Split(""" -datalpha.inc -datfli.inc -datfname.inc -datfont.inc -datgrab.inc -datgrid.inc -datimage.inc -datitype.inc -datmidi.inc -datpal.inc -datsamp.inc -datworms.inc -"""))); - # For some reason I have to call Program() from this file # otherwise 'scons/' will be appended to all the sources # and targets. @@ -432,7 +417,6 @@ useEnv.Depends(make,library) extraTargets.append(make) -extraTargets.append(plugins_h) Default(library, extraTargets) # Depends(library, extraTargets) Modified: allegro/branches/4.9/scons/all.scons =================================================================== --- allegro/branches/4.9/scons/all.scons 2008-08-23 19:58:31 UTC (rev 10508) +++ allegro/branches/4.9/scons/all.scons 2008-08-23 20:01:39 UTC (rev 10509) @@ -12,48 +12,9 @@ Alias(name, tool) tools.append(tool) addTool('colormap', [ 'colormap.c' ]) - addTool('dat2c', [ 'dat2c.c' ]) - addTool('exedat', [ 'exedat.c' ]) addTool('pack', [ 'pack.c' ]) addTool('rgbmap', [ 'rgbmap.c' ]) addTool('textconv', [ 'textconv.c' ]) - - ## datedit.c references obj/unix/plugins.h which isnt generated by - ## scons right now so this part is being left out - if True: - aldatFiles = Split(""" - datedit.c - plugins/datalpha.c - plugins/datfli.c - plugins/datfname.c - plugins/datfont.c - plugins/datgrab.c - plugins/datgrid.c - plugins/datimage.c - plugins/datitype.c - plugins/datmidi.c - plugins/datpal.c - plugins/datsamp.c - plugins/datworms.c - """); - aldatEnv = env.Clone() - aldatEnv.Append(CPPPATH = buildDir) - libaldat = aldatEnv.StaticLibrary(libDir + '/aldat', appendDir(buildDir + '/tools/', aldatFiles)) - aldatEnv.Depends(buildDir + '/tools/datedit.o', 'tools/plugins/plugins.h') - Alias('aldat', libaldat) - tools.append(libaldat) - datEnv = env.Clone() - # datEnv.Append(LIBPATH = '.') - datEnv.Prepend(LIBS = 'aldat') - datEnv.Append(LIBPATH = libDir) - def addDatTool(name,files): - tool = datEnv.Program('tools/' + name, appendDir(buildDir + '/tools/', files)) - Alias(name, tool) - tools.append(tool) - addDatTool('dat', [ 'dat2s.c' ]) - addDatTool('dat2s', [ 'dat2s.c' ]) - addDatTool('grabber', [ 'grabber.c' ]) - addDatTool('pat2dat', [ 'pat2dat.c' ]) Alias('tools', tools) return tools Modified: allegro/branches/4.9/tools/CMakeLists.txt =================================================================== --- allegro/branches/4.9/tools/CMakeLists.txt 2008-08-23 19:58:31 UTC (rev 10508) +++ allegro/branches/4.9/tools/CMakeLists.txt 2008-08-23 20:01:39 UTC (rev 10509) @@ -1,54 +1,4 @@ # -# Building libaldat -# - -set(plugins_h ${CMAKE_CURRENT_BINARY_DIR}/plugins/plugins.h) -file(GLOB inc_files RELATIVE "" plugins/*.inc) -file(GLOB plugins RELATIVE "" plugins/*.c) - -add_custom_target(plugins_h - DEPENDS ${plugins_h} - ) -add_custom_command( - OUTPUT ${plugins_h} - DEPENDS ${inc_files} - COMMAND ${CMAKE_COMMAND} - -D plugins_h=${plugins_h} - -D inc_files="${inc_files}" - -P ${CMAKE_SOURCE_DIR}/cmake/GeneratePlugins.cmake - ) - - # Add this property so that out-of-source builds can find - # plugins/plugins.h. - # -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -add_library(aldat STATIC datedit.c ${plugins_h} ${plugins}) -set_target_properties(aldat PROPERTIES - COMPILE_FLAGS "${MAYBE_ALLEGRO_STATICLINK}" - LINK_FLAGS "${MAYBE_ALLEGRO_STATICLINK}" - ) - -# -# Datafile tools -# - -macro(dat_tool nm) - add_allegro_executable(${nm} ${nm}.c) - target_link_libraries(${nm} aldat ${LINK_WITH}) - install(TARGETS ${nm} - DESTINATION bin - ) -endmacro(dat_tool nm) - -dat_tool(dat) -dat_tool(dat2c) -dat_tool(dat2s) -dat_tool(exedat) -dat_tool(grabber) -dat_tool(pat2dat) - -# # Other tools # Deleted: allegro/branches/4.9/tools/dat.c =================================================================== --- allegro/branches/4.9/tools/dat.c 2008-08-23 19:58:31 UTC (rev 10508) +++ allegro/branches/4.9/tools/dat.c 2008-08-23 20:01:39 UTC (rev 10509) @@ -1,1173 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Datafile archiving utility for the Allegro library. - * - * By Shawn Hargreaves. - * - * Nathan Smith added the recursive handling of directories. - * - * See readme.txt for copyright information. - */ - - -#define ALLEGRO_USE_CONSOLE - -#include <stdio.h> -#include <string.h> -#include <time.h> - -#include "allegro5/allegro5.h" -#include "datedit.h" - -#if ((defined ALLEGRO_DOS) || (defined ALLEGRO_WINDOWS)) && (!defined SCAN_DEPEND) - #define DAT_HAVE_CONIO_H - #include <conio.h> -#endif - - - -static int err = 0; -static int changed = 0; - -static int opt_command = 0; -static int opt_compression = -1; -static int opt_strip = -1; -static int opt_sort = -1; -static int opt_relf = FALSE; -static int opt_verbose = FALSE; -static int opt_keepnames = FALSE; -static int opt_colordepth = -1; -static int opt_gridx = -1; -static int opt_gridy = -1; -static int opt_gridw = -1; -static int opt_gridh = -1; -static char *opt_datafilename = NULL; -static char *opt_outputname = NULL; -static char *opt_headername = NULL; -static char *opt_dependencyfile = NULL; -static char *opt_objecttype = NULL; -static char *opt_prefixstring = NULL; -static char *opt_password = NULL; -static char *opt_palette = NULL; - -static int attrib_ok = FA_ARCH|FA_RDONLY; - -static char canonical_datafilename[1024]; - -static char **opt_proplist = NULL; -static int opt_numprops = 0; - -static char **opt_fixedproplist = NULL; -static int opt_numfixedprops = 0; - -static char **opt_namelist = NULL; -static int opt_numnames = 0; - -static int *opt_usedname = NULL; - - - -static void allocate(int n) -{ - static int max = 0; - if (n <= max) - return; - opt_proplist = realloc(opt_proplist, n * sizeof *opt_proplist); - opt_fixedproplist = realloc(opt_fixedproplist, n * sizeof *opt_fixedproplist); - opt_namelist = realloc(opt_namelist, n * sizeof *opt_namelist); - opt_usedname = realloc(opt_usedname, n * sizeof *opt_usedname); - max = n; -} - - - -/* display help on the command syntax */ -static void usage(void) -{ - printf("\nDatafile archiving utility for Allegro " ALLEGRO_VERSION_STR ", " ALLEGRO_PLATFORM_STR "\n"); - printf("By Shawn Hargreaves, " ALLEGRO_DATE_STR "\n\n"); - printf("Usage: dat [options] filename.dat [names]\n\n"); - printf("Options:\n"); - printf("\t'-a' adds the named files to the datafile\n"); - printf("\t'-bpp colordepth' grabs bitmaps in the specified format\n"); - printf("\t'-c0' no compression\n"); - printf("\t'-c1' compress objects individually\n"); - printf("\t'-c2' global compression on the entire datafile\n"); - printf("\t'-d' deletes the named objects from the datafile\n"); - printf("\t'-dither' dithers when reducing color depths\n"); - printf("\t'-e' extracts the named objects from the datafile\n"); - printf("\t'-f' store references to original files as relative filenames\n"); - printf("\t'-g x y w h' grabs bitmap data from a specific grid location\n"); - printf("\t'-h outputfile.h' sets the output header file\n"); - printf("\t'-k' keeps the original filenames when grabbing objects\n"); - printf("\t'-l' lists the contents of the datafile\n"); - printf("\t'-m dependencyfile' outputs makefile dependencies\n"); - printf("\t'-n0' no sort: list the objects in the order they were added\n"); - printf("\t'-n1' sort the objects of the datafile alphabetically by name\n"); - printf("\t'-o output' sets the output file or directory when extracting data\n"); - printf("\t'-p prefixstring' sets the prefix for the output header file\n"); - printf("\t'-pal objectname' specifies which palette to use\n"); - printf("\t'-r' recursively adds directories as nested datafiles\n"); - printf("\t'-s0' no strip: save everything\n"); - printf("\t'-s1' strip grabber specific information from the file\n"); - printf("\t'-s2' strip all object properties and names from the file\n"); - printf("\t'-s-PROP' do not strip object property PROP from the file\n"); - printf("\t'-t type' sets the object type when adding files\n"); - printf("\t'-transparency' preserves transparency through color conversion\n"); - printf("\t'-u' updates the contents of the datafile\n"); - printf("\t'-v' selects verbose mode\n"); - printf("\t'-w' always updates the entire contents of the datafile\n"); - printf("\t'-x' alias for -e\n"); - printf("\t'-007 password' sets the file encryption key\n"); - printf("\t'PROP=value' sets object properties\n"); -} - - - -/* callback for outputting messages */ -void datedit_msg(AL_CONST char *fmt, ...) -{ - va_list args; - char buf[1024]; - - va_start(args, fmt); - vsprintf(buf, fmt, args); - va_end(args); - - printf("%s\n", buf); -} - - - -/* callback for starting a 2-part message output */ -void datedit_startmsg(AL_CONST char *fmt, ...) -{ - va_list args; - char buf[1024]; - - va_start(args, fmt); - vsprintf(buf, fmt, args); - va_end(args); - - printf("%s", buf); - fflush(stdout); -} - - - -/* callback for ending a 2-part message output */ -void datedit_endmsg(AL_CONST char *fmt, ...) -{ - va_list args; - char buf[1024]; - - va_start(args, fmt); - vsprintf(buf, fmt, args); - va_end(args); - - printf("%s\n", buf); -} - - - -/* callback for printing errors */ -void datedit_error(AL_CONST char *fmt, ...) -{ - va_list args; - char buf[1024]; - - va_start(args, fmt); - vsprintf(buf, fmt, args); - va_end(args); - - fprintf(stderr, "%s\n", buf); - - err = 1; -} - - - -/* callback for asking questions */ -int datedit_ask(AL_CONST char *fmt, ...) -{ - va_list args; - char buf[1024]; - int c; - - static int all = FALSE; - - if (all) - return 'y'; - - va_start(args, fmt); - vsprintf(buf, fmt, args); - va_end(args); - - printf("%s? (y/n/a/q) ", buf); - fflush(stdout); - - for (;;) { - #ifdef DAT_HAVE_CONIO_H - - /* raw keyboard input for platforms that have conio functions */ - c = getch(); - if ((c == 0) || (c == 0xE0)) - getch(); - - #else - - /* stdio version for other systems */ - fflush(stdin); - c = getchar(); - - #endif - - switch (c) { - - case 'y': - case 'Y': - #ifdef DAT_HAVE_CONIO_H - printf("%c\n", c); - #endif - return 'y'; - - case 'n': - case 'N': - #ifdef DAT_HAVE_CONIO_H - printf("%c\n", c); - #endif - return 'n'; - - case 'a': - case 'A': - #ifdef DAT_HAVE_CONIO_H - printf("%c\n", c); - #endif - all = TRUE; - return 'y'; - - case 'q': - case 'Q': - #ifdef DAT_HAVE_CONIO_H - printf("%c\n", c); - #endif - return 27; - - case 27: - #ifdef DAT_HAVE_CONIO_H - printf("\n"); - #endif - return 27; - } - } -} - - - -/* callback for the datedit functions to show a list of options */ -/* Returns -1 if canceled */ -int datedit_select(AL_CONST char *(*list_getter)(int index, int *list_size), AL_CONST char *fmt, ...) -{ - va_list args; - char buf[1024]; - int c, num; - - va_start(args, fmt); - vsprintf(buf, fmt, args); - va_end(args); - - /* If there is only one choice, select it automatically. If the list is */ - /* empty, return immediately. */ - list_getter(-1, &num); - if (num<=1) return num-1; - - printf("%s:\n", buf); - for (c=0; c<num; c++) { - printf("% 2d %s\n", c, list_getter(c, NULL)); - } - printf("% 2d %s\n", -1, "Cancel"); - fflush(stdout); - fscanf(stdin, "%d", &c); - if (c>num) - c = num-1; - return c; -} - - - -/* checks if a string is one of the names specified on the command line */ -static int is_name(AL_CONST char *name) -{ - char str1[256], str2[256]; - int i, e; - - for (i=0; i<opt_numnames; i++) { - if ((stricmp(name, opt_namelist[i]) == 0) || - (strcmp(opt_namelist[i], "*") == 0)) { - opt_usedname[i] = TRUE; - return TRUE; - } - else { - for (e=0; e<(int)strlen(opt_namelist[i]); e++) { - if (opt_namelist[i][e] == '*') { - strncpy(str1, opt_namelist[i], e); - str1[e] = 0; - strncpy(str2, name, e); - str2[e] = 0; - if (strcmp(str1, str2) == 0) { - opt_usedname[i] = TRUE; - return TRUE; - } - } - } - } - } - - return FALSE; -} - - - -/* does a view operation */ -static void do_view(AL_CONST DATAFILE *dat, AL_CONST char *parentname) -{ - int i, j; - AL_CONST char *name; - DATAFILE_PROPERTY *prop; - char tmp[256]; - - for (i=0; dat[i].type != DAT_END; i++) { - name = get_datafile_property(dat+i, DAT_NAME); - strcpy(tmp, parentname); - strcat(tmp, name); - - if ((opt_numnames <= 0) || (is_name(tmp))) { - if (opt_verbose) - printf("\n"); - - printf("- %c%c%c%c - %s%-*s - %s\n", - (dat[i].type>>24)&0xFF, (dat[i].type>>16)&0xFF, - (dat[i].type>>8)&0xFF, dat[i].type&0xFF, - parentname, 28-(int)strlen(parentname), name, - datedit_desc(dat+i)); - - if (opt_verbose) { - prop = dat[i].prop; - if (prop) { - for (j=0; prop[j].type != DAT_END; j++) { - printf(" . %c%c%c%c '%s'\n", - (prop[j].type>>24)&0xFF, (prop[j].type>>16)&0xFF, - (prop[j].type>>8)&0xFF, prop[j].type&0xFF, - prop[j].dat); - } - } - } - } - - if (dat[i].type == DAT_FILE) { - strcat(tmp, "/"); - do_view((DATAFILE *)dat[i].dat, tmp); - } - } -} - - - -/* does an export operation */ -static void do_export(DATAFILE *dat, char *parentname) -{ - int i; - AL_CONST char *name; - char tmp[256]; - - for (i=0; dat[i].type != DAT_END; i++) { - name = get_datafile_property(dat+i, DAT_NAME); - strcpy(tmp, parentname); - strcat(tmp, name); - - if (is_name(tmp)) { - if (!datedit_export(dat+i, opt_outputname)) { - err = 1; - return; - } - } - else { - if (dat[i].type == DAT_FILE) { - strcat(tmp, "/"); - do_export((DATAFILE *)dat[i].dat, tmp); - if (err) - return; - } - } - } -} - - - -/* deletes objects from the datafile */ -static void do_delete(DATAFILE **dat, char *parentname) -{ - int i; - AL_CONST char *name; - char tmp[256]; - - for (i=0; (*dat)[i].type != DAT_END; i++) { - name = get_datafile_property((*dat)+i, DAT_NAME); - strcpy(tmp, parentname); - strcat(tmp, name); - - if (is_name(tmp)) { - printf("Deleting %s\n", tmp); - *dat = datedit_delete(*dat, i); - changed = TRUE; - i--; - } - else { - if ((*dat)[i].type == DAT_FILE) { - DATAFILE *dattmp = (*dat)[i].dat; - strcat(tmp, "/"); - do_delete(&dattmp, tmp); - (*dat)[i].dat = dattmp; - } - } - } -} - - - -/* open a sub-datafile in the parent datafile */ -static DATAFILE *open_sub_datafile(DATAFILE *parent, AL_CONST char *name) -{ - DATAFILE *dat; - int c; - - /* Return the datafile if it already exists. */ - for (c=0; parent[c].type != DAT_END; c++) { - if ((parent[c].type == DAT_FILE) && (stricmp(name, get_datafile_property(parent+c, DAT_NAME)) == 0)) - return parent[c].dat; - } - - /* Otherwise create a new datafile. */ - printf("Creating sub-datafile %s\n", name); - - dat = malloc(sizeof(DATAFILE)); - dat->dat = NULL; - dat->type = DAT_END; - dat->size = 0; - dat->prop = NULL; - - return dat; -} - - - -/* close a sub-datafile from the parent datafile */ -static DATAFILE *close_sub_datafile(DATAFILE *parent, AL_CONST char *name, DATAFILE *dat) -{ - int c; - - /* Adjust the datafile if it already exists. */ - for (c=0; parent[c].type != DAT_END; c++) { - if ((parent[c].type == DAT_FILE) && (stricmp(name, get_datafile_property(parent+c, DAT_NAME)) == 0)) { - parent[c].dat = dat; - return parent; - } - } - - /* Otherwise insert the datafile. */ - return datedit_insert(parent, NULL, name, DAT_FILE, dat, 0); -} - - - -/* adds a file to the archive */ -static int do_add_file(AL_CONST char *filename, int attrib, void *param) -{ - DATEDIT_GRAB_PARAMETERS params; - DATAFILE **dat = param; - DATAFILE *d; - char fname[256]; - char name[256]; - int c; - - canonicalize_filename(fname, filename, sizeof(fname)); - - strcpy(name, get_filename(fname)); - - if ((strcmp(name, ".") == 0) || (strcmp(name, "..") == 0)) - return 0; - - if (!opt_keepnames) { - strupr(name); - - for (c=0; name[c]; c++) - if (name[c] == '.') - name[c] = '_'; - } - - if (attrib & FA_DIREC) { - DATAFILE *sub_dat = open_sub_datafile(*dat, name); - - if (!sub_dat) { - fprintf(stderr, "Error: failed to create sub-datafile %s\n", name); - err = 1; - return -1; - } - - append_filename(fname, fname, "*", sizeof(fname)); - - if (for_each_file_ex(fname, 0, ~attrib_ok, do_add_file, &sub_dat) <= 0) { - fprintf(stderr, "Error: failed to add objects to %s\n", name); - err = 1; - return -1; - } - - *dat = close_sub_datafile(*dat, name, sub_dat); - changed = TRUE; - return 0; - } - - params.datafile = canonical_datafilename; - params.filename = fname; - params.name = name; - params.type = datedit_clean_typename(opt_objecttype); - params.x = opt_gridx; - params.y = opt_gridy; - params.w = opt_gridw; - params.h = opt_gridh; - params.colordepth = opt_colordepth; - params.relative = opt_relf; - - for (c=0; (*dat)[c].type != DAT_END; c++) { - if (stricmp(name, get_datafile_property(*dat+c, DAT_NAME)) == 0) { - printf("Replacing %s -> %s\n", fname, name); - if (!datedit_grabreplace(*dat+c, ¶ms)) { - err = 1; - return -1; - } - else { - changed = TRUE; - return 0; - } - } - } - - printf("Inserting %s -> %s\n", fname, name); - d = datedit_grabnew(*dat, ¶ms); - if (!d) { - err = 1; - return -1; - } - else { - *dat = d; - changed = TRUE; - return 0; - } -} - - - -/* does an update operation */ -static void do_update(DATAFILE *dat, int force, char *parentname) -{ - int i; - AL_CONST char *name; - char tmp[256]; - - for (i=0; dat[i].type != DAT_END; i++) { - name = get_datafile_property(dat+i, DAT_NAME); - strcpy(tmp, parentname); - strcat(tmp, name); - - if (dat[i].type == DAT_FILE) { - strcat(tmp, "/"); - do_update((DATAFILE *)dat[i].dat, force, tmp); - if (err) - return; - } - else if ((opt_numnames <= 0) || (is_name(tmp))) { - if (!datedit_update(dat+i, canonical_datafilename, force, opt_verbose, &changed)) { - err = 1; - return; - } - } - } -} - - - -/* changes object properties */ -static void do_set_props(DATAFILE *dat, char *parentname) -{ - int i, j; - AL_CONST char *name; - char tmp[256]; - char propname[256], *propvalue; - int type; - - for (i=0; dat[i].type != DAT_END; i++) { - name = get_datafile_property(dat+i, DAT_NAME); - strcpy(tmp, parentname); - strcat(tmp, name); - - if (is_name(tmp)) { - for (j=0; j<opt_numprops; j++) { - strcpy(propname, opt_proplist[j]); - propvalue = strchr(propname, '='); - if (propvalue) { - *propvalue = 0; - propvalue++; - } - else - propvalue = ""; - - type = datedit_clean_typename(propname); - - if (opt_verbose) { - if (*propvalue) { - printf("%s: setting property %c%c%c%c = '%s'\n", - tmp, type>>24, (type>>16)&0xFF, - (type>>8)&0xFF, type&0xFF, propvalue); - } - else { - printf("%s: clearing property %c%c%c%c\n", - tmp, type>>24, (type>>16)&0xFF, - (type>>8)&0xFF, type&0xFF); - } - } - - datedit_set_property(dat+i, type, propvalue); - changed = TRUE; - } - } - - if (dat[i].type == DAT_FILE) { - strcat(tmp, "/"); - do_set_props((DATAFILE *)dat[i].dat, tmp); - } - } -} - - - -/* selects a specific palette */ -static void do_setpal(DATAFILE **dat, char *parentname) -{ - int i; - AL_CONST char *name; - char tmp[256]; - - for (i=0; (*dat)[i].type != DAT_END; i++) { - name = get_datafile_property((*dat)+i, DAT_NAME); - strcpy(tmp, parentname); - strcat(tmp, name); - - if (stricmp(tmp, opt_palette) == 0) { - if ((*dat)[i].type != DAT_PALETTE) { - printf("Error: %s is not a palette object\n", tmp); - err = 1; - return; - } - printf("Using palette %s\n", tmp); - memcpy(datedit_current_palette, (*dat)[i].dat, sizeof(PALETTE)); - select_palette(datedit_current_palette); - return; - } - else { - if ((*dat)[i].type == DAT_FILE) { - DATAFILE *dattmp = (*dat)[i].dat; - strcat(tmp, "/"); - do_setpal(&dattmp, tmp); - (*dat)[i].dat = dattmp; - } - } - } - - printf("Error: %s not found\n", opt_palette); - err = 1; -} - - - -/* recursive helper for writing out datafile dependencies */ -static void save_dependencies(DATAFILE *dat, FILE *f, int *depth) -{ - AL_CONST char *orig; - int c, i; - int hasspace; - - for (c=0; dat[c].type != DAT_END; c++) { - orig = get_datafile_property(dat+c, DAT_ORIG); - - if ((orig) && (orig[0])) { - if (*depth + strlen(orig) > 56) { - fprintf(f, " \\\n\t\t"); - *depth = 0; - } - else { - fprintf(f, " "); - (*depth)++; - } - - if (strchr(orig, ' ')) { - hasspace = TRUE; - fputc('"', f); - (*depth) += 2; - } - else - hasspace = FALSE; - - for (i=0; orig[i]; i++) { - if (orig[i] == '\\') - fputc('/', f); - else - fputc(orig[i], f); - (*depth)++; - } - - if (hasspace) - fputc('"', f); - } - - if (dat[c].type == DAT_FILE) - save_dependencies((DATAFILE *)dat[c].dat, f, depth); - } -} - - - -/* writes out a makefile dependency rule */ -static int do_save_dependencies(DATAFILE *dat, char *srcname, char *depname) -{ - char *pretty_name; - char tm[80]; - time_t now; - FILE *f; - int c; - - pretty_name = datedit_pretty_name(srcname, "dat", FALSE); - datedit_msg("Writing makefile dependencies into %s", depname); - - f = fopen(depname, "w"); - if (f) { - time(&now); - strcpy(tm, asctime(localtime(&now))); - for (c=0; tm[c]; c++) - if ((tm[c] == '\r') || (tm[c] == '\n')) - tm[c] = 0; - - fprintf(f, "# Allegro datafile make dependencies, produced by dat v" ALLEGRO_VERSION_STR ", " ALLEGRO_PLATFORM_STR "\n"); - fprintf(f, "# Datafile: %s\n", pretty_name); - fprintf(f, "# Date: %s\n", tm); - fprintf(f, "# Do not hand edit!\n\n"); - - if (opt_headername) - fprintf(f, "%s %s :", pretty_name, opt_headername); - else - fprintf(f, "%s :", pretty_name); - - c = 0xFF; - save_dependencies(dat, f, &c); - - fprintf(f, " \\\n\n\tdat -u %s", pretty_name); - - if (opt_headername) - fprintf(f, " -h %s", opt_headername); - - if (opt_password) - fprintf(f, " -007 %s", opt_password); - - fprintf(f, "\n"); - fclose(f); - } - else { - datedit_error("Error writing %s", depname); - return FALSE; - } - - return TRUE; -} - - - -int main(int argc, char *argv[]) -{ - int c, colorconv_mode = 0; - int *opt_fixed_prop = NULL; - DATAFILE *datafile = NULL; - - if (install_allegro(SYSTEM_NONE, &errno, atexit) != 0) - return 1; - datedit_init(); - - for (c=0; c<PAL_SIZE; c++) - datedit_current_palette[c] = desktop_palette[c]; - - for (c=1; c<argc; c++) { - if (argv[c][0] == '-') { - - switch (utolower(argv[c][1])) { - - case 'd': - if (stricmp(argv[c]+2, "ither") == 0) { - colorconv_mode |= COLORCONV_DITHER; - break; - } - /* fall through */ - - case 'a': - case 'e': - case 'l': - case 'u': - case 'w': - case 'x': - if (opt_command) { - usage(); - return 1; - } - opt_command = utolower(argv[c][1]); - break; - - case 'b': - if ((opt_colordepth > 0) || (c >= argc-1)) { - usage(); - return 1; - } - opt_colordepth = atoi(argv[++c]); - if ((opt_colordepth != 8) && (opt_colordepth != 15) && - (opt_colordepth != 16) && (opt_colordepth != 24) && - (opt_colordepth != 32)) { - usage(); - return 1; - } - break; - - case 'c': - if ((opt_compression >= 0) || - (argv[c][2] < '0') || (argv[c][2] > '2')) { - usage(); - return 1; - } - opt_compression = argv[c][2] - '0'; - break; - - case 'f': - opt_relf = TRUE; - break; - - case 'g': - if ((opt_gridx > 0) || (c >= argc-4)) { - usage(); - return 1; - } - opt_gridx = atoi(argv[++c]); - opt_gridy = atoi(argv[++c]); - opt_gridw = atoi(argv[++c]); - opt_gridh = atoi(argv[++c]); - if ((opt_gridx < 0) || (opt_gridy < 0) || - (opt_gridw <= 0) || (opt_gridh <= 0)) { - usage(); - return 1; - } - break; - - case 'h': - if ((opt_headername) || (c >= argc-1)) { - usage(); - return 1; - } - opt_headername = argv[++c]; - break; - - case 'k': - opt_keepnames = TRUE; - break; - - case 'm': - if ((opt_dependencyfile) || (c >= argc-1)) { - usage(); - return 1; - } - opt_dependencyfile = argv[++c]; - break; - - case 'n': - if ((opt_sort >= 0) || - (argv[c][2] < '0') || (argv[c][2] > '1')) { - usage(); - return 1; - } - opt_sort = argv[c][2] - '0'; - break; - - case 'o': - if ((opt_outputname) || (c >= argc-1)) { - usage(); - return 1; - } - opt_outputname = argv[++c]; - break; - - case 'p': - if ((utolower(argv[c][2]) == 'a') && - (utolower(argv[c][3]) == 'l') && - (argv[c][4] == 0)) { - if ((opt_palette) || (c >= argc-1)) { - usage(); - return 1; - } - opt_palette = argv[++c]; - } - else { - if ((opt_prefixstring) || (c >= argc-1)) { - usage(); - return 1; - } - opt_prefixstring = argv[++c]; - } - break; - - case 'r': - attrib_ok |= FA_DIREC; - break; - - case 's': - if (argv[c][2] == '-') { - allocate(opt_numfixedprops + 1); - opt_fixedproplist[opt_numfixedprops++] = argv[c]+3; - } - else { - if ((opt_strip >= 0) || - (argv[c][2] < '0') || (argv[c][2] > '2')) { - usage(); - return 1; - } - opt_strip = argv[c][2] - '0'; - } - break; - - case 't': - if (stricmp(argv[c]+2, "ransparency") == 0) { - colorconv_mode |= COLORCONV_KEEP_TRANS; - break; - } - - if ((opt_objecttype) || (c >= argc-1)) { - usage(); - return 1; - } - opt_objecttype = argv[++c]; - break; - - case 'v': - opt_verbose = TRUE; - break; - - case '0': - if ((opt_password) || (c >= argc-1)) { - usage(); - return 1; - } - opt_password = argv[++c]; - break; - - case '-': - if (stricmp(argv[c]+2, "help") == 0) { - usage(); - return 1; - } - break; - - case '?': - usage(); - return 1; - - default: - printf("Unknown option '%s'\n", argv[c]); - return 1; - } - } - else { - if (strchr(argv[c], '=')) { - allocate(opt_numprops + 1); - opt_proplist[opt_numprops++] = argv[c]; - } - else { - if (!opt_datafilename) - opt_datafilename = argv[c]; - else { - allocate(opt_numnames + 1); - opt_namelist[opt_numnames] = argv[c]; - opt_usedname[opt_numnames] = FALSE; - opt_numnames++; - } - } - } - } - - if ((!opt_datafilename) || - ((!opt_command) && - (opt_compression < 0) && - (opt_strip < 0) && - (opt_sort < 0) && - (!opt_numprops) && - (!opt_headername) && - (!opt_dependencyfile))) { - usage(); - return 1; - } - - canonicalize_filename(canonical_datafilename, opt_datafilename, sizeof(canonical_datafilename)); - - if (colorconv_mode) - set_color_conversion(colorconv_mode); - else - set_color_conversion(COLORCONV_NONE); - - datafile = datedit_load_datafile(opt_datafilename, FALSE, opt_password); - - if (datafile) { - - if (opt_palette) - do_setpal(&datafile, ""); - - if (!err) { - switch (opt_command) { - - case 'a': - if (!opt_numnames) { - printf("No files specified for addition\n"); - err = 1; - } - else { - for (c=0; c<opt_numnames; c++) { - if (for_each_file_ex(opt_namelist[c], 0, ~attrib_ok, do_add_file, &datafile) <= 0) { - fprintf(stderr, "Error: %s not found\n", opt_namelist[c]); - err = 1; - break; - } - else - opt_usedname[c] = TRUE; - } - } - break; - - case 'd': - if (!opt_numnames) { - printf("No objects specified for deletion\n"); - err = 1; - } - else - do_delete(&datafile, ""); - break; - - case 'e': - case 'x': - if (!opt_numnames) { - printf("No objects specified: use '*' to extract everything\n"); - err = 1; - } - else - do_export(datafile, ""); - break; - - case 'l': - do_view(datafile, ""); - break; - - case 'u': - do_update(datafile, FALSE, ""); - break; - - case 'w': - do_update(datafile, TRUE, ""); - break; - } - } - - if (!err) { - if (opt_command) { - for (c=0; c<opt_numnames; c++) { - if (!opt_usedname[c]) { - fprintf(stderr, "Error: %s not found\n", opt_namelist[c]); - err = 1; - } - } - } - - if (opt_numprops > 0) { - if (!opt_numnames) { - printf("No objects specified for setting properties\n"); - err = 1; - } - else { - for (c=0; c<opt_numnames; c++) - opt_usedname[c] = FALSE; - - do_set_props(datafile, ""); - - for (c=0; c<opt_numnames; c++) { - if (!opt_usedname[c]) { - fprintf(stderr, "Error: %s not found\n", opt_namelist[c]); - err = 1; - } - } - } - } - - if (opt_numfixedprops > 0) { - if (opt_strip < 0) { - printf("Error: no strip mode\n"); - err = 1; - } - else { - opt_fixed_prop = malloc((opt_numfixedprops+1)*sizeof(int)); - - for (c=0; c<opt_numfixedprops; c++) - opt_fixed_prop[c] = datedit_clean_typename(opt_fixedproplist[c]); - - opt_fixed_prop[c] = 0; /* end of array delimiter */ - } - } - } - - if ((!err) && ((changed) || (opt_compression >= 0) || (opt_strip >= 0) || (opt_sort >= 0))) { - DATEDIT_SAVE_DATAFILE_OPTIONS options; - - options.pack = opt_compression; - options.strip = opt_strip; - options.sort = opt_sort; - options.verbose = opt_verbose; - options.write_msg = TRUE; - options.backup = FALSE; - - if (!datedit_save_datafile(datafile, opt_datafilename, opt_fixed_prop, &options, opt_password)) - err = 1; - } - - if ((!err) && (opt_headername)) - if (!datedit_save_header(datafile, opt_datafilename, opt_headername, "dat", opt_prefixstring, opt_verbose)) - err = 1; - - if ((!err) && (opt_dependencyfile)) - if (!do_save_dependencies(datafile, opt_datafilename, opt_dependencyfile)) - err = 1; - - if (opt_fixed_prop) - free(opt_fixed_prop); - - unload_datafile(datafile); - } - - return err; -} - -END_OF_MAIN() Deleted: allegro/branches/4.9/tools/dat2c.c =================================================================== --- allegro/branches/4.9/tools/dat2c.c 2008-08-23 19:58:31 UTC (rev 10508) +++ allegro/branches/4.9/tools/dat2c.c 2008-08-23 20:01:39 UTC (rev 10509) @@ -1,1669 +0,0 @@ -/* ______ ___ ___ - * /\ _ \ /\_ \ /\_ \ - * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ - * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ - * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ - * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ - * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ - * /\____/ - * \_/__/ - * - * Grabber datafile -> C converter for the Allegro library. - * - * By Laurence Withers. - * - * Christer Sandberg made it work with ISO C90 compilers and - * fixed a couple of other problems. - * - * See readme.txt for copyright information. - */ - - - -/* Additional notes: - * - * - All C symbols are converted to lowercase, and all macro names to - * uppercase. - * - * - Packfile passwords are not supported since the converted data will - * be stored unencrypted in any case. - * - * - The include guard symbol is generated from the current date and - * time alone. - */ - - - -/* system includes */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> -#include <ctype.h> -#include <stdarg.h> - - - -/* Allegro includes */ -#define ALLEGRO_USE_CONSOLE -#include "allegro5/allegro5.h" -#include "allegro5/internal/aintern.h" - - - -/* out_of_memory() - * - * A macro which prints an error message stating out of memory and - * aborts. - */ -#define out_of_memory() \ - do { \ - fprintf(stderr, "out of memory\n"); \ - abort(); \ - } while(0) - - - -/* enum lineformat - * - * Specifies which lineformat to use (DOS, Mac, Unix). - */ -enum lineformat { - lineformat_default, - lineformat_mac, - lineformat_dos, - lineformat_unix -}; - - - -/* struct dat2c - * - * This structure holds all the information and data required to carry - * out a conversion. - */ -struct dat2c { - const char *fname_dat; /* datafile filename */ - const char *fname_c; /* C source output filename */ - const char *fname_h; /* C header output filename */ - - enum lineformat lformat; /* which line ending format to use */ - - int global_symbols; /* nonzero if objects should be global */ - int convert_compiled_sprites; /* CSPRITE -> BITMAP conversion */ - - const char *prefix; /* macro name prefix */ - const char *datafile_name; /* datafile object name */ - - DATAFILE *dat; /* the loaded datafile */ - FILE *fp_c; /* the C output file descriptor */ - FILE *fp_h; /* the C header file descriptor */ -}; - -struct dat2c *malloc_dat2c(void); -void free_dat2c(struct dat2c *); - - - -/* do_conversion() - * - * Given a `struct dat2c' object, this function actually carries out the - * conversion into C source code. Returns 0 on success. - */ -int do_conversion(struct dat2c *); - - - -/* struct dat2c_converter - * - * Represents a conversion for a single object type. - */ -struct dat2c_converter { - int type; /* from DAT_ID */ - int (*cvt) (struct dat2c *, DATAFILE *, const char *); - /* the dat2c object, a pointer to the DATAFILE - element (not array) to export, the name to use; - return 0 on success */ -}; - - - -/* invalid_macro_name() - * - * Returns 0 if the macro name is valid, else non zero. - */ -static int invalid_macro_name(const char *n) -{ - const char *m = 0; - if (*n != '_' && !isalpha((int)*n)) - return 1; - for (m = n + 1; *m; m++) - if (*m != '_' && !isalnum((int)*m)) - return 1; - return 0; -} - - - -/* interpret_commandline() - * - * Reads options on the commandline, filling out `dat2c' appropriately. - * Returns 0 on success. - */ -static INLINE int is_arg(const char *arg, const char *t1, const char *t2) -{ - return !(strcmp(arg, t1) && strcmp(arg, t2)); -} - -static int -interpret_commandline(struct dat2c *dat2c, int argc, char **argv) -{ - int i = 0; - - for (i = 1; i < argc; i++) { - - /* --cfile: C source file output */ - if (is_arg(argv[i], "-o", "--cfile")) { - if (++i == argc) { - fprintf(stderr, "Error: no filename after %s", argv[i - 1]); - return 1; - } - if (dat2c->fname_c) { - fprintf(stderr, "Error: C source file specified twice (" - "as `%s' and `%s').\n", dat2c->fname_c, argv[i]); - return 1; - } - dat2c->fname_c = argv[i]; - continue; - } - - /* --hfile: C header file output */ - if (is_arg(argv[i], "-h", "--hfile")) { - if (++i == argc) { - fprintf(stderr, "Error: no filename after %s", argv[i - 1]); - return 1; - } - if (dat2c->fname_h) { - fprintf(stderr, "Error: C header file specified twice (" - "as `%s' and `%s').\n", dat2c->fname_h, argv[i]); - return 1; - } - dat2c->fname_h = argv[i]; - continue; - } - - /* --crlf, -C: DOS line endings */ - if (is_arg(argv[i], "-C", "--crlf")) { - if (dat2c->lformat != lineformat_default) { - fprintf(stderr, "Error: line format specified twice.\n"); - return 1; - } - dat2c->lformat = lineformat_dos; - continue; - } - - /* --mac, -M: mac line endings */ - if (is_arg(argv[i], "-M", "--mac")) { - if (dat2c->lformat != lineformat_default) { - fprintf(stderr, "Error: line format specified twice.\n"); - return 1; - } - dat2c->lformat = lineformat_mac; - continue; - } - - /* --unix, -U: Unix line endings */ - if (is_arg(argv[i], "-U", "--unix")) { - if (dat2c->lformat != lineformat_default) { - fprintf(stderr, "Error: line format specified twice.\n"); - return 1; - } - dat2c->lformat = lineformat_unix; - continue; - } - - /* --prefix, -p: macro name prefix */ - if (is_arg(argv[i], "-p", "--prefix")) { - if (++i == argc) { - fprintf(stderr, "Error: no name after %s", argv[i - 1]); - return 1; - } - if (dat2c->prefix) { - fprintf(stderr, "Error: prefix specified twice (as `%s' " - "and `%s').\n", dat2c->prefix, argv[i]); - return 1; - } - if (invalid_macro_name(argv[i])) { - fprintf(stderr, "Error: `%s' is not a valid macro " - "prefix.\n", argv[i]); - return 1; - } - dat2c->prefix = argv[i]; - continue; - } - - /* --datafile-name, -n: datafile object name */ - if (is_arg(argv[i], "-n", "--datafile-name")) { - if (++i == argc) { - fprintf(stderr, "Error: no name after %s", argv[i - 1]); - return 1; - } - if (dat2c->datafile_name) { - fprintf(stderr, "Error: datafile name specified twice (" - "as `%s' and `%s').\n", dat2c->datafile_name, argv[i]); - return 1; - } - if (invalid_macro_name(argv[i])) { - fprintf(stderr, "Error: `%s' is not a valid C " - "identifier.\n", argv[i]); - return 1; - } - dat2c->datafile_name = argv[i]; - continue; - } - - /* --global, -g: globally visible objects */ - if (is_arg(argv[i], "-g", "--global")) { - if (dat2c->global_symbols) { - fprintf(stderr, "Error: global symbols specified " "twice.\n"); - return 1; - } - dat2c->global_symbols = 1; - continue; - } - - /* --convert-compiled-sprites, -S: convert compiled sprite - objects to BITMAPs */ - if (is_arg(argv[i], "-S", "--convert-compiled-sprites")) { - if (dat2c->convert_compiled_sprites) { - fprintf(stderr, "Error: conversion of compiled sprites " - "specified twice.\n"); - return 1; - } - dat2c->convert_compiled_sprites = 1; - continue; - } - - - /* .dat file input */ - if (dat2c->fname_dat) { - fprintf(stderr, "Error: datafile specified twice (as " - "`%s' and `%s').\n", dat2c->fname_dat, argv[i]); - return 1; - } - dat2c->fname_dat = argv[i]; - } - - /* sanity checking */ - if (!dat2c->fname_dat) { - fprintf(stderr, "Error: datafile is not specified.\n"); - return 1; - } - - /* all is in order */ - return 0; -} - - - -/* prepare_dat2c() - * - * Prepares a `dat2c' that has been filled out from the commandline. - * This involves opening files, etc. Returns 0 on success. - */ -static int prepare_dat2c(struct dat2c *dat2c) -{ - dat2c->dat = load_datafile(dat2c->fname_dat); - if (!dat2c->dat) { - fprintf(stderr, "Error loading datafile `%s'.\n", dat2c->fname_dat); - return 1; - } - - if (dat2c->fname_c) { - dat2c->fp_c = fopen(dat2c->fname_c, "wb"); - if (!dat2c->fp_c) { - fprintf(stderr, "Error writing C source file to `%s'.\n", - dat2c->fname_c); - return 1; - } - } - else { - dat2c->fp_c = stdout; - dat2c->fname_c = "(stdout)"; - } - - if (dat2c->fname_h) { - dat2c->fp_h = fopen(dat2c->fname_h, "wb"); - if (!dat2c->fp_h) { - fprintf(stderr, "Error writing C header file to `%s'.\n", - dat2c->fname_h); - return 1; - } - } - - if (dat2c->lformat == lineformat_default) -#if (defined ALLEGRO_UNIX || defined ALLEGRO_QNX || defined ALLEGRO_BEOS || defined ALLEGRO_MACOSX) - dat2c->lformat = lineformat_unix; -#elif (defined ALLEGRO_WINDOWS || defined ALLEGRO_DOS) - dat2c->lformat = lineformat_dos; -#elif defined ALLEGRO_MPW - dat2c->lformat = lineformat_mac; -#else -#error platform not supported -#endif - - return 0; -} - - - -/* show_usage() - * - * Shows the usage information. - */ -static void show_usage(void) -{ - printf("\nDatafile -> C conversion utility for Allegro " - ALLEGRO_VERSION_STR ", " ALLEGRO_PLATFORM_STR "\n"); - printf("By Laurence Withers, " ALLEGRO_DATE_STR "\n\n"); - printf("Usage:\n" - " dat2c [options] inputfile.dat \n\n" - "Options:\n" - " -o --cfile <filename>\n" - " Specifies output filename (default stdout)\n" - " -h --hfile <filename>\n" - " Specifies header filename (default none)\n" - " -p --prefix <C identifier>\n" - " Specifies declaration prefix (default none)\n" - " -C --crlf, -U --unix, -M --mac\n" - " Specifies line ending (default: the platform default)\n" - " -g --global\n" - " Makes each object globally visible (default don't)\n" - " -S --convert-compiled-sprites\n" - " Converts COMPILED_SPRITEs to BITMAPs (default abort)\n" - " -n --datafile-name <C identifier>\n" - " Gives a name for the datafile (default 'data')\n"); -} - - - -/* setup_allegro() - * - * Sets up Allegro, color conversion, etc. Returns 0 on success. - */ -static int setup_allegro(void) -{ - if (install_allegro(SYSTEM_NONE, &errno, atexit)) { - fprintf(stderr, "Allegro failed to initialise.\n"); - return 1; - } - - set_color_conversion(COLORCONV_NONE); - - /* _compile_sprites is an internal Allegro symbol. Setting it to 0 - will cause load_datafile() to not compile sprites, and to load - them as bitmaps instead. */ - _compile_sprites = 0; - - return 0; -} - - - -/* main() - */ -static int truecolor = FALSE; - -int main(int argc, char *argv[]) -{ - struct dat2c *dat2c = malloc_dat2c(); - int result = 0; - - if (argc == 1 || interpret_commandline(dat2c, argc, argv)) { - show_usage(); - free_dat2c(dat2c); - return 1; - } - - if (setup_allegro() || prepare_dat2c(dat2c)) { - free_dat2c(dat2c); - return 1; - } - - if (dat2c->fname_c) - printf("Converting %s to %s...\n", dat2c->fname_dat, dat2c->fname_c); - - result = do_conversion(dat2c); - free_dat2c(dat2c); - -#ifdef ALLEGRO_USE_CONSTRUCTOR - - if (truecolor) { - printf - ("\nI noticed some truecolor images, so you must call fixup_datafile()\n"); - printf("before using this data! (after setting a video mode).\n"); - } - -#else - - printf - ("\nI don't know how to do constructor functions on this platform, so you must\n"); - printf - ("call fixup_datafile() before using this data! (after setting a video mode).\n"); - -#endif - - return result; -} - -END_OF_MAIN() -/* malloc_dat2c() - * - * Allocates the space required for a struct dat2c, aborting the program - * if the allocation fails. Fills all fields with 0, and returns a - * pointer to the newly allocated object. - */ -struct dat2c *malloc_dat2c(void) -{ - struct dat2c *d = malloc(sizeof(struct dat2c)); - if (!d) - out_of_memory(); - memset(d, 0, sizeof(struct dat2c)); - return d; -} - - - -/* free_dat2c() - * - * Frees any data held by a dat2c object, and the object itself. - */ -void free_dat2c(struct dat2c *dat2c) -{ - /* close files */ - if (dat2c->dat) - unload_datafile(dat2c->dat); - if (dat2c->fp_c) - fclose(dat2c->fp_c); - if (dat2c->fp_h) - fclose(dat2c->fp_h); - - /* free object */ - free(dat2c); -} - - - -/* cwrite() - * - * A function in the style of fprintf, this uses $seq$ as its escape - * sequence, and recognises the following sequences: - * - * $$ Single '$' character (no parameter) - * $n$ Newline (no parameter) - * - * $int$ Integer (parameter 'int') - * $uint$ Unsigned integer (parameter 'unsigned int') - * $long$ Long (paramter 'long') - * $ulong$ Unsigned long (parameter 'unsigned long') - * $int hex$ Integer (parameter 'int'), in hex notation (no 0x). - * - * $dat_id$ Writes an Allegro DAT_ID number in human-readable - * format, if possible (parameter 'int'). - * - * $string$ Write a verbatim string (parameter 'char*') - * $string c$ Write a string, but escape it as a C string literal - * (parameter 'char*') - * $string upper$ Write a string, but convert it to uppercase. - * (parameter 'char*') - * $string lower$ Write a string, but convert it to lowercase. - * (parameter 'char*') - * - * $data$ Write a block of memory as an escaped string - * literal (parameter 'unsigned int', for size, - * 'unsigned int', for offset in spaces, and - * 'unsigned char*', for data). - * - * Both $string c$ and $data$ enclose their data in double quotes. - */ -static void _cwrite_esc_char(FILE * fp, int ch) -{ - putc('\\', fp); - switch (ch) { - case 0: - putc('0', fp); - break; - - case 7: - putc('a', fp); - break; - - case 8: - putc('b', fp); - break; - - case 9: - putc('t', fp); - break; - - case 10: - putc('n', fp); - break; - - case 11: - putc('v', fp); - break; - - case 12: - putc('f', fp); - break; - - case 13: - putc('r', fp); - break; - - default: - fprintf(fp, "x%x", ch); - break; - } -} - -static void _cwrite_esc(FILE * fp, const unsigned char *data, int amt) -{ - const unsigned char *rd = 0; - int was_num_escape = 0, was_trigraph_char = 0; - - putc('"', fp); - for (rd = data; amt; amt--) { - switch (*rd) { - case 0: - was_num_escape = 2; - - case 7: /* \a or bell */ - case 8: /* backspace */ - case 9: /* tab */ - case 10: /* LF */ - case 11: /* vertical tab */ - case 12: /* form feed */ - case 13: /* CR */ - _cwrite_esc_char(fp, *rd); - break; - - case '"': /* char needs to be escaped */ - case '\\': - putc('\\', fp); - putc(*rd, fp); - break; - - case '?': - if (was_trigraph_char) - putc('\\', fp); - was_trigraph_char = 2; - putc('?', fp); - break; - - default: - if (*rd < 32 || *rd >= 127) { - _cwrite_esc_char(fp, *rd); - was_num_escape = 2; - } - else { - if (was_num_escape && isxdigit(*rd)) { - /* quick fix to stop digits from being - * interpreted as hex/octal escapes */ - putc('"', fp); - putc('"', fp); - } - putc(*rd, fp); - } - } - if (was_num_escape) - was_num_escape--; - if (was_trigraph_char) - was_trigraph_char--; - rd++; - } - putc('"', fp); -} - -enum dat2c_file { C, H }; - -static void -cwrite(struct dat2c *dat2c, enum dat2c_file x, const char *fmt, ...) -{ - FILE *fp = 0; - const char *rd = 0; - const char *start = 0; - va_list va; - - va_start(va, fmt); - - switch (x) { - case C: - fp = dat2c->fp_c; - break; - case H: - fp = dat2c->fp_h; - break; - } - if (!fp || !fmt) - return; - - start = rd = fmt; - while (*rd) { - /* handle escapes */ - if (*rd == '$') { - if (!strncmp(rd, "$$", 2)) { - /* single '$' character */ - - putc('$', fp); - - } - else if (!strncmp(rd, "$n$", 3)) { - /* newline sequence */ - - switch (dat2c->lformat) { - case lineformat_dos: - putc(13, fp); - putc(10, fp); - break; - - case lineformat_mac: - putc(13, fp); - break; - - default: - putc(10, fp); - break; - } - - } - else if (!strncmp(rd, "$int$", 5)) { - /* plain integer */ - - int i = va_arg(va, int); - fprintf(fp, "%d", i); - - } - else if (!strncmp(rd, "$uint$", 6)) { - /* unsigned integer */ - - unsigned int u = va_arg(va, unsigned int); - fprintf(fp, "%u", u); - - } - else if (!strncmp(rd, "$long$", 6)) { - /* plain long integer */ - - long l = va_arg(va, long); - fprintf(fp, "%ld", l); - - } - else if (!strncmp(rd, "$ulong$", 7)) { - /* unsigned long integer */ - - unsigned long ul = va_arg(va, unsigned long); - fprintf(fp, "%lu", ul); - - } - else if (!strncmp(rd, "$int hex$", 9)) { - /* hexadecimal integer */ - - int i = va_arg(va, int); - fprintf(fp, "%x", i); - - } - else if (!strncmp(rd, "$dat_id$", 8)) { - /* Allegro DAT_ID() */ - - int dat_id = va_arg(va, int); - int c[4]; - int i = 0; - - c[0] = (dat_id >> 24) & 255; - c[1] = (dat_id >> 16) & 255; - c[2] = (dat_id >> 8) & 255; - c[3] = dat_id & 255; - - fputs("DAT_ID('", fp); - for (i = 0; i < 4; i++) { - if (c[i] == '\'' || c[i] == '\\') - putc('\\', fp); - if (c[i] < 32) - _cwrite_esc_char(fp, c[i]); - else - putc(c[i], fp); - - if (i == 3) { - fputs("')", fp); - } - else { - fputs("', '", fp); - } - } - - } - else if (!strncmp(rd, "$string$", 8)) { - /* verbatim string */ - - const char *s = va_arg(va, const char *); - fputs(s, fp); - - } - else if (!strncmp(rd, "$string c$", 10)) { - /* escaped C string */ - - const unsigned char *s = va_arg(va, - const unsigned char *); - _cwrite_esc(fp, s, strlen((const char *)s)); - - } - else if (!strncmp(rd, "$string lower$", 14)) { - /* lowercase verbatim string */ - - const char *s = va_arg(va, const char *); - const char *p = 0; - for (p = s; *p; p++) - putc(tolower(*p), fp); - - } - else if (!strncmp(rd, "$string upper$", 14)) { - /* uppercase verbatim string */ - - const char *s = va_arg(va, const char *); - const char *p = 0; - for (p = s; *p; p++) - putc(toupper(*p), fp); - - } - else if (!strncmp(rd, "$data$", 6)) { - /* data block */ - - unsigned int size, offset, remaining; - const unsigned char *data = 0; - - size = va_arg(va, unsigned int); - offset = va_arg(va, unsigned int); - data = va_arg(va, const unsigned char *); - - remaining = size; - while (1) { - int sp; - - if (remaining <= 50) { - _cwrite_esc(fp, data, remaining); - break; - } - - _cwrite_esc(fp, data, 50); - remaining -= 50; - data += 50; - - switch (dat2c->lformat) { - case lineformat_dos: - putc(13, fp); - putc(10, fp); - break; - - case lineformat_mac: - putc(13, fp); - break; - - default: - putc(10, fp); - break; - } - for (sp = offset; sp; sp--) - putc(' ', fp); - } - - } - else { - /* error */ - - fprintf(stderr, "Error in format string `%s'.\n", fmt); - abort(); - } - - /* advance past terminating $ symbol */ - for (rd++; *rd != '$'; rd++) ; - rd++; - } - - /* write out non-escape stuff to disk */ - start = rd; - for (; *rd && *rd != '$'; rd++) ; - if (rd - start) - fwrite(start, 1, rd - start, fp); - } - - va_end(va); -} - - - -/* get_c_identifier() - * - * Given a datafile object, gets a valid C identifier. We first try to - * compose this from the name, but if this is no use then we compose it - * from the type. In addition, we cache all the created names in an - * associative array, so calling the function twice with the same - * pointer always returns the same string. - * - * Call clear_c_identifiers() to clear the cache. Returns a pointer to - * the allocated name. Always succeeds (calls out_of_memory()). - */ -struct cident_entry { - char *name; - DATAFILE *obj; - struct cident_entry *next; -}; - -static struct cident_entry *first_cident = 0; - -static const char *new_cident(const char *prefix, const char *name, - DATAFILE *obj) -{ - struct cident_entry *c = malloc(sizeof(struct cident_entry)); - if (!c) - out_of_memory(); - - c->name = malloc(strlen(prefix) + strlen(name) + 2); - if (!c->name) - out_of_memory(); - sprintf(c->name, "%s%s%s", prefix, *prefix ? "_" : "", name); - c->obj = obj; - c->next = first_cident; - first_cident = c; - - return c->name; -} - -static const char *get_c_identifier(const char *prefix, DATAFILE *obj) -{ - static unsigned int tmp_name_count = 0; - struct cident_entry *iter = 0; - const char *prop_name = 0; - - /* first, check the cache */ - for (iter = first_cident; iter; iter = iter->next) - if (iter->obj == obj) - return iter->name; - - /* Create a new name: first, check if the datafile object name is a - valid C identifier; if not, create a new name based on the object - type and the number of previous names */ - prop_name = get_datafile_property(obj, DAT_ID('N', 'A', 'M', 'E')); - - if (prop_name && strlen(prop_name)) { - int i; - for (i = 1; prop_name[i]; i++) { - if (!isalnum((int)prop_name[i]) && prop_name[i] != '_') - break; - } - if ((*prop_name == '_' || isalpha((int)*prop_name)) && !prop_name[i]) { - return new_cident(prefix, prop_name, obj); - } - } - - /* property name not valid, so generate one */ - { - char tmp_name[16]; /* TYPE_32bitnum */ - int c1 = (obj->type >> 24) & 255; - int c2 = (obj->type >> 16) & 255; - int c3 = (obj->type >> 8) & 255; - int c4 = obj->type & 255; - - if ((isalpha(c1) || c1 == '_') && - (isalnum(c2) || c2 == '_') && - (isalnum(c3) || c3 == '_') && - (isalnum(c4) || c4 == '_' || c4 == ' ')) { - tmp_name[0] = c1; - tmp_name[1] = c2; - tmp_name[2] = c3; - tmp_name[3] = c4 == ' ' ? '_' : c4; - } - else { - tmp_name[0] = 'O'; - tmp_name[1] = 'B'; - tmp_name[2] = 'J'; - tmp_name[3] = '_'; - } - - sprintf(tmp_name + (tmp_name[3] == '_' ? 3 : 4), - "_%u", tmp_name_count++); - - return new_cident(prefix, tmp_name, obj); - } - - return 0; /* to stop compiler warning */ -} - - - -static void clear_c_identifiers(void) -{ - struct cident_entry *i = 0, *next = 0; - for (i = first_cident; i; i = next) { - next = i->next; - free(i->name); - free(i); - } - first_cident = 0; -} - - - -/* make_single_cident() - * - * Creates a valid cident from a string. The returned - * pointer is dynamically allocated and must be freed. - */ -static char *make_single_cident(const char *src) -{ - char *cident, *p; - int c; - - p = cident = malloc(strlen(src) + 1); - if (!cident) - out_of_memory(); - - if ((c = *src++)) { - if (isalpha(c)) - *p++ = toupper(c); - else - *p++ = '_'; - - while ((c = *src++)) { - if (isalnum(c)) - *p++ = toupper(c); - else - *p++ = '_'; - } - } - - *p = 0; /* terminating null character */ - - return cident; -} - - - -/* write_header_start() - * - * Writes the start of the header file. - */ -static void write_header_start(struct dat2c *dat2c) -{ - char *dat2c_include_guard = make_single_cident(dat2c->fname_h); - - /* comment at top of file */ - cwrite(dat2c, H, "/* $string$$n$" - " * $n$" - " * Converted datafile header for $string$ .$n$" - " * See $string$ for definitions.$n$" - " * Do not hand edit.$n$" - " */$n$" - "$n$" - "#ifndef ALLEGRO_H$n$" - "#error You must include allegro5/allegro5.h$n$" - "#endif$n$" - "$n$" - "#ifndef $string$$n$" - "#define $string$$n$" - "$n$" - "#ifdef __cplusplus$n$" - "extern \"C\" {$n$" - "#endif$n$" - "$n$$n$$n$", - dat2c->fname_h, - dat2c->fname_dat, - dat2c->fname_c, dat2c_include_guard, dat2c_include_guard); - - free(dat2c_include_guard); -} - - - -/* write_header_end() - * - * Writes the end of the header file. - */ -static void write_header_end(struct dat2c *dat2c) -{ - /* end c++ / include guard */ - cwrite(dat2c, H, "#ifdef __cplusplus$n$" - "}$n$" - "#endif$n$" - "$n$" - "#endif /* include guard */$n$" - "$n$" "/* end of $string$ */$n$" "$n$$n$$n$", dat2c->fname_h); -} - - - -/* write_source_start() - * - * Writes the start of the source file. - */ -static void write_source_start(struct dat2c *dat2c) -{ - /* comment at top of file */ - cwrite(dat2c, C, "/* $string$$n$" - " * $n$" - " * Source for data encoded from $string$ .$n$" - " * Do not hand edit.$n$" - " */$n$" - "$n$" - "#include <allegro5/allegro5.h>$n$" - "#include <allegro5/internal/aintern.h>$n$" - "$n$$n$$n$", dat2c->fname_c, dat2c->fname_dat); -} - - - -/* write_source_end() - * - * Writes the end of the source file. - */ -static void write_source_end(struct dat2c *dat2c, const char *dat_name) -{ - /* emit a constructor */ - cwrite(dat2c, C, "#ifdef ALLEGRO_USE_CONSTRUCTOR$n$" - "CONSTRUCTOR_FUNCTION(" - "static void _construct_me(void));$n$" - "static void _construct_me(void)$n$" - "{$n$" - " _construct_datafile($string lower$);$n$" - "}$n$" "#endif$n$" "$n$$n$$n$", dat_name); - - /* comment at bottom of file */ - cwrite(dat2c, C, "/* end of $string$ */$n$" "$n$$n$$n$", - dat2c->fname_c); -} - - - -/* cvt_FILE() - * - * Writes a nested datafile object. - */ -static int write_datafile(struct dat2c *, DATAFILE *, const char *, - const char *); -static int cvt_FILE(struct dat2c *dat2c, DATAFILE *dat, const char *name) -{ - /* the header declaration is actually carried out in write_datafile() - automatically. */ - - /* write out the nested datafile */ - return write_datafile(dat2c, dat->dat, name, name); -} - - - -/* cvt_BITMAP, cvt_BITMAP_aux - * - * Writes a BITMAP object. - */ -static int -cvt_BITMAP_aux(struct dat2c *dat2c, BITMAP *bmp, - const char *name, int export) -{ - int bpp = bitmap_color_depth(bmp); - int bypp = (bpp + 7) / 8; - int y = 0; - - if (bpp > 8) - truecolor = TRUE; - - /* declare this in the header if we are exporting objects */ - if (export) { - cwrite(dat2c, H, "extern BITMAP $string lower$;$n$$n$", name); - } - - /* write out lines data (we actually write it as one big chunk) *... [truncated message content] |
From: <pet...@us...> - 2008-08-23 20:50:05
|
Revision: 10510 http://alleg.svn.sourceforge.net/alleg/?rev=10510&view=rev Author: peterhull90 Date: 2008-08-23 20:50:14 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Implementation of ALLEGRO_EVENT_DISPLAY_SWITCH_IN and ALLEGRO_NOFRAME plus quick changes to get it to compile after the a4 purge. Joystick and audio now broken temporarily. Modified Paths: -------------- allegro/branches/4.9/AllegroNew.xcodeproj/project.pbxproj allegro/branches/4.9/CMakeLists.txt allegro/branches/4.9/include/allegro5/platform/aintosx.h allegro/branches/4.9/include/allegro5/platform/alosx.h allegro/branches/4.9/makefile.lst allegro/branches/4.9/makefile.osx allegro/branches/4.9/src/macosx/cadigi.m allegro/branches/4.9/src/macosx/camidi.m allegro/branches/4.9/src/macosx/hidjoy.m allegro/branches/4.9/src/macosx/hidman.m allegro/branches/4.9/src/macosx/keybd.m allegro/branches/4.9/src/macosx/main.m allegro/branches/4.9/src/macosx/osxgl.h allegro/branches/4.9/src/macosx/osxgl.m allegro/branches/4.9/src/macosx/pcpu.m allegro/branches/4.9/src/macosx/qzmouse.m allegro/branches/4.9/src/macosx/system.m Added Paths: ----------- allegro/branches/4.9/DemoApp-Info.plist Modified: allegro/branches/4.9/AllegroNew.xcodeproj/project.pbxproj =================================================================== --- allegro/branches/4.9/AllegroNew.xcodeproj/project.pbxproj 2008-08-23 20:01:39 UTC (rev 10509) +++ allegro/branches/4.9/AllegroNew.xcodeproj/project.pbxproj 2008-08-23 20:50:14 UTC (rev 10510) @@ -30,9 +30,6 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 880DF2120D6A3BE1004D12A5 /* readfont.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985E0D68EFDC005DDBD6 /* readfont.c */; }; - 880DF2130D6A3BE1004D12A5 /* fontbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD98610D68EFF2005DDBD6 /* fontbmp.c */; }; - 880DF2140D6A3BE1004D12A5 /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985B0D68EFBF005DDBD6 /* font.c */; }; 880DF4200D6A3C48004D12A5 /* libAllegro-4.9.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libAllegro-4.9.a */; }; 880DF4210D6A3C48004D12A5 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88FC445D0CEB983B00EFA1D3 /* AudioUnit.framework */; }; 880DF4220D6A3C48004D12A5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; @@ -42,10 +39,13 @@ 880DF4260D6A3C48004D12A5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25C940D565E8100F0FD8E /* OpenGL.framework */; }; 880DF4270D6A3C48004D12A5 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CC70D565EC000F0FD8E /* IOKit.framework */; }; 880DF4280D6A3C48004D12A5 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CDC0D56673F00F0FD8E /* CoreAudio.framework */; }; - 880DF4570D6A3C9F004D12A5 /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985B0D68EFBF005DDBD6 /* font.c */; }; - 880DF4580D6A3CA0004D12A5 /* fontbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD98610D68EFF2005DDBD6 /* fontbmp.c */; }; - 880DF4590D6A3CA0004D12A5 /* readfont.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985E0D68EFDC005DDBD6 /* readfont.c */; }; 881D13020D036BBC002B83CF /* utime.c in Sources */ = {isa = PBXBuildFile; fileRef = 881D13010D036BBC002B83CF /* utime.c */; }; + 882CBCF00DBFE0B300F93C77 /* a5_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8894EF080D60D3F100E4968F /* a5_opengl.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 882CBCF10DBFE0C500F93C77 /* gl_ext.h in Headers */ = {isa = PBXBuildFile; fileRef = 8894EF0A0D60D3F100E4968F /* gl_ext.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 882CBCF20DBFE0C600F93C77 /* gl_ext_alias.h in Headers */ = {isa = PBXBuildFile; fileRef = 8894EF0D0D60D3F100E4968F /* gl_ext_alias.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 882CBCF30DBFE0C900F93C77 /* gl_ext_api.h in Headers */ = {isa = PBXBuildFile; fileRef = 8894EF0E0D60D3F100E4968F /* gl_ext_api.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 882CBCF40DBFE0CC00F93C77 /* gl_ext_defs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8894EF0F0D60D3F100E4968F /* gl_ext_defs.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 882CBCF60DBFE0D400F93C77 /* gl_ext_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 8894EF100D60D3F100E4968F /* gl_ext_list.h */; settings = {ATTRIBUTES = (Private, ); }; }; 883B72F60D686DF0009F1EDA /* exnew_bitmap_target.c in Sources */ = {isa = PBXBuildFile; fileRef = 883B72E30D686DAD009F1EDA /* exnew_bitmap_target.c */; }; 883B72FE0D686E26009F1EDA /* exnew_blend.c in Sources */ = {isa = PBXBuildFile; fileRef = 883B72E40D686DAD009F1EDA /* exnew_blend.c */; }; 883B73180D686EB1009F1EDA /* exnew_fs_resize.c in Sources */ = {isa = PBXBuildFile; fileRef = 883B72E50D686DAD009F1EDA /* exnew_fs_resize.c */; }; @@ -65,12 +65,10 @@ 887A214E0CEA4CC80026AE51 /* exnew_bitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 887A21020CEA489E0026AE51 /* exnew_bitmap.c */; }; 88814B030D2D8B30007B4895 /* aintosx.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AFD0D2D8B30007B4895 /* aintosx.h */; }; 88814B040D2D8B30007B4895 /* aintuthr.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AFE0D2D8B30007B4895 /* aintuthr.h */; }; - 88814B050D2D8B30007B4895 /* alosx.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AFF0D2D8B30007B4895 /* alosx.h */; }; - 88814B060D2D8B30007B4895 /* alosxcfg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814B000D2D8B30007B4895 /* alosxcfg.h */; }; - 88814B070D2D8B30007B4895 /* astdbool.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814B010D2D8B30007B4895 /* astdbool.h */; }; - 88814B080D2D8B30007B4895 /* astdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814B020D2D8B30007B4895 /* astdint.h */; }; - 88814B090D2D8B5C007B4895 /* 3d.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABB0D2D8ADC007B4895 /* 3d.h */; }; - 88814B0A0D2D8B5C007B4895 /* 3dmaths.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABC0D2D8ADC007B4895 /* 3dmaths.h */; }; + 88814B050D2D8B30007B4895 /* alosx.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AFF0D2D8B30007B4895 /* alosx.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B060D2D8B30007B4895 /* alosxcfg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814B000D2D8B30007B4895 /* alosxcfg.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B070D2D8B30007B4895 /* astdbool.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814B010D2D8B30007B4895 /* astdbool.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B080D2D8B30007B4895 /* astdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814B020D2D8B30007B4895 /* astdint.h */; settings = {ATTRIBUTES = (Private, ); }; }; 88814B0B0D2D8B5D007B4895 /* aintern.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AFA0D2D8AF8007B4895 /* aintern.h */; settings = {ATTRIBUTES = (); }; }; 88814B0C0D2D8B5E007B4895 /* aintern_bitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AF00D2D8AF8007B4895 /* aintern_bitmap.h */; }; 88814B0D0D2D8B5F007B4895 /* aintern_dtor.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AF20D2D8AF8007B4895 /* aintern_dtor.h */; }; @@ -81,61 +79,36 @@ 88814B120D2D8B65007B4895 /* aintern_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AF60D2D8AF8007B4895 /* aintern_mouse.h */; }; 88814B130D2D8B66007B4895 /* aintern_system.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AF70D2D8AF8007B4895 /* aintern_system.h */; }; 88814B140D2D8B67007B4895 /* aintern_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AF80D2D8AF8007B4895 /* aintern_thread.h */; }; - 88814B150D2D8B6A007B4895 /* allegro5.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABA0D2D8ABD007B4895 /* allegro5.h */; }; - 88814B160D2D8B6B007B4895 /* allegro.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABF0D2D8ADC007B4895 /* allegro.h */; }; - 88814B170D2D8B6B007B4895 /* alinline.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABE0D2D8ADC007B4895 /* alinline.h */; }; - 88814B180D2D8B6C007B4895 /* alconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AFC0D2D8AF8007B4895 /* alconfig.h */; }; - 88814B190D2D8B6D007B4895 /* alcompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABD0D2D8ADC007B4895 /* alcompat.h */; }; + 88814B150D2D8B6A007B4895 /* allegro5.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABA0D2D8ABD007B4895 /* allegro5.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 88814B160D2D8B6B007B4895 /* allegro.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABF0D2D8ADC007B4895 /* allegro.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B170D2D8B6B007B4895 /* alinline.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ABE0D2D8ADC007B4895 /* alinline.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B180D2D8B6C007B4895 /* alconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AFC0D2D8AF8007B4895 /* alconfig.h */; settings = {ATTRIBUTES = (Private, ); }; }; 88814B1A0D2D8B6D007B4895 /* aintvga.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AFB0D2D8AF8007B4895 /* aintvga.h */; }; 88814B1B0D2D8B6E007B4895 /* aintern_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AF90D2D8AF8007B4895 /* aintern_vector.h */; }; - 88814B1C0D2D8B73007B4895 /* altime.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC00D2D8ADC007B4895 /* altime.h */; }; - 88814B1D0D2D8B74007B4895 /* base.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC10D2D8ADC007B4895 /* base.h */; }; - 88814B1E0D2D8B75007B4895 /* bealleg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC20D2D8ADC007B4895 /* bealleg.h */; }; - 88814B1F0D2D8B77007B4895 /* bitmap_new.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC30D2D8ADC007B4895 /* bitmap_new.h */; }; - 88814B200D2D8B77007B4895 /* color.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC50D2D8ADC007B4895 /* color.h */; }; - 88814B210D2D8B78007B4895 /* color_new.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC40D2D8ADC007B4895 /* color_new.h */; }; - 88814B220D2D8B79007B4895 /* compiled.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC60D2D8ADC007B4895 /* compiled.h */; }; - 88814B230D2D8B79007B4895 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC70D2D8ADC007B4895 /* config.h */; }; - 88814B240D2D8B7A007B4895 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC80D2D8ADC007B4895 /* convert.h */; }; - 88814B250D2D8B7B007B4895 /* datafile.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC90D2D8ADC007B4895 /* datafile.h */; }; - 88814B260D2D8B7D007B4895 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACA0D2D8ADC007B4895 /* debug.h */; }; - 88814B270D2D8B7D007B4895 /* digi.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACB0D2D8ADC007B4895 /* digi.h */; }; - 88814B280D2D8B7E007B4895 /* display_new.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACC0D2D8ADC007B4895 /* display_new.h */; }; - 88814B290D2D8B7F007B4895 /* draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACD0D2D8ADC007B4895 /* draw.h */; }; - 88814B2A0D2D8B7F007B4895 /* events.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACE0D2D8ADC007B4895 /* events.h */; }; - 88814B2B0D2D8B81007B4895 /* file.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACF0D2D8ADC007B4895 /* file.h */; }; - 88814B2C0D2D8B82007B4895 /* fix.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD00D2D8ADC007B4895 /* fix.h */; }; - 88814B2D0D2D8B82007B4895 /* fixed.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD10D2D8ADC007B4895 /* fixed.h */; }; - 88814B2E0D2D8B83007B4895 /* fli.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD20D2D8ADC007B4895 /* fli.h */; }; - 88814B2F0D2D8B84007B4895 /* fmaths.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD30D2D8ADC007B4895 /* fmaths.h */; }; - 88814B300D2D8B85007B4895 /* font.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD40D2D8ADC007B4895 /* font.h */; }; - 88814B310D2D8B86007B4895 /* gfx.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD50D2D8ADC007B4895 /* gfx.h */; }; - 88814B320D2D8B86007B4895 /* graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD60D2D8ADC007B4895 /* graphics.h */; }; - 88814B330D2D8B87007B4895 /* gui.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD70D2D8ADC007B4895 /* gui.h */; }; - 88814B340D2D8B8A007B4895 /* joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD80D2D8ADC007B4895 /* joystick.h */; }; - 88814B350D2D8B8B007B4895 /* keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD90D2D8ADC007B4895 /* keyboard.h */; }; - 88814B360D2D8B8B007B4895 /* keycodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADA0D2D8ADC007B4895 /* keycodes.h */; }; - 88814B370D2D8B8C007B4895 /* linalleg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADB0D2D8ADC007B4895 /* linalleg.h */; }; - 88814B380D2D8B8D007B4895 /* lzss.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADC0D2D8ADC007B4895 /* lzss.h */; }; - 88814B390D2D8B8D007B4895 /* macalleg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADD0D2D8ADC007B4895 /* macalleg.h */; }; - 88814B3A0D2D8B8E007B4895 /* matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADE0D2D8ADC007B4895 /* matrix.h */; }; - 88814B3B0D2D8B8F007B4895 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADF0D2D8ADC007B4895 /* memory.h */; }; - 88814B3C0D2D8B8F007B4895 /* midi.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE00D2D8ADC007B4895 /* midi.h */; }; - 88814B3D0D2D8B92007B4895 /* mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE10D2D8ADC007B4895 /* mouse.h */; }; - 88814B3E0D2D8B92007B4895 /* osxalleg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE20D2D8ADC007B4895 /* osxalleg.h */; }; - 88814B3F0D2D8B93007B4895 /* palette.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE30D2D8ADC007B4895 /* palette.h */; }; - 88814B400D2D8B93007B4895 /* qnxalleg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE40D2D8ADC007B4895 /* qnxalleg.h */; }; - 88814B410D2D8B94007B4895 /* quat.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE50D2D8ADC007B4895 /* quat.h */; }; - 88814B420D2D8B95007B4895 /* rle.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE60D2D8ADC007B4895 /* rle.h */; }; - 88814B430D2D8B96007B4895 /* sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE70D2D8ADC007B4895 /* sound.h */; }; - 88814B440D2D8B96007B4895 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE80D2D8ADC007B4895 /* stream.h */; }; - 88814B450D2D8B98007B4895 /* system.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AEA0D2D8ADC007B4895 /* system.h */; }; - 88814B460D2D8B99007B4895 /* system_new.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE90D2D8ADC007B4895 /* system_new.h */; }; - 88814B470D2D8B9A007B4895 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AEB0D2D8ADC007B4895 /* text.h */; }; - 88814B480D2D8B9A007B4895 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AEC0D2D8ADC007B4895 /* timer.h */; }; - 88814B490D2D8B9B007B4895 /* unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AED0D2D8ADC007B4895 /* unicode.h */; }; - 88814B4A0D2D8B9C007B4895 /* winalleg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AEE0D2D8ADC007B4895 /* winalleg.h */; }; - 88814B4B0D2D8B9E007B4895 /* xalleg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AEF0D2D8ADC007B4895 /* xalleg.h */; }; + 88814B1C0D2D8B73007B4895 /* altime.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC00D2D8ADC007B4895 /* altime.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B1D0D2D8B74007B4895 /* base.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC10D2D8ADC007B4895 /* base.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B1F0D2D8B77007B4895 /* bitmap_new.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC30D2D8ADC007B4895 /* bitmap_new.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B200D2D8B77007B4895 /* color.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC50D2D8ADC007B4895 /* color.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B210D2D8B78007B4895 /* color_new.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC40D2D8ADC007B4895 /* color_new.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B240D2D8B7A007B4895 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AC80D2D8ADC007B4895 /* convert.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B260D2D8B7D007B4895 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACA0D2D8ADC007B4895 /* debug.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B280D2D8B7E007B4895 /* display_new.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACC0D2D8ADC007B4895 /* display_new.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B2A0D2D8B7F007B4895 /* events.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACE0D2D8ADC007B4895 /* events.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B2B0D2D8B81007B4895 /* file.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ACF0D2D8ADC007B4895 /* file.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B2C0D2D8B82007B4895 /* fix.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD00D2D8ADC007B4895 /* fix.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B2D0D2D8B82007B4895 /* fixed.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD10D2D8ADC007B4895 /* fixed.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B2F0D2D8B84007B4895 /* fmaths.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD30D2D8ADC007B4895 /* fmaths.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B340D2D8B8A007B4895 /* joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD80D2D8ADC007B4895 /* joystick.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B350D2D8B8B007B4895 /* keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AD90D2D8ADC007B4895 /* keyboard.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B360D2D8B8B007B4895 /* keycodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADA0D2D8ADC007B4895 /* keycodes.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B380D2D8B8D007B4895 /* lzss.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADC0D2D8ADC007B4895 /* lzss.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B3B0D2D8B8F007B4895 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814ADF0D2D8ADC007B4895 /* memory.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B3D0D2D8B92007B4895 /* mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE10D2D8ADC007B4895 /* mouse.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B3E0D2D8B92007B4895 /* osxalleg.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE20D2D8ADC007B4895 /* osxalleg.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 88814B450D2D8B98007B4895 /* system.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AEA0D2D8ADC007B4895 /* system.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B460D2D8B99007B4895 /* system_new.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AE90D2D8ADC007B4895 /* system_new.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B480D2D8B9A007B4895 /* timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AEC0D2D8ADC007B4895 /* timer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 88814B490D2D8B9B007B4895 /* unicode.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814AED0D2D8ADC007B4895 /* unicode.h */; settings = {ATTRIBUTES = (Private, ); }; }; 88814B610D2D8C8E007B4895 /* alplatf.h in Headers */ = {isa = PBXBuildFile; fileRef = 88814B600D2D8C8E007B4895 /* alplatf.h */; }; 8890B2490D5DEB030052D4CA /* exnew_opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = 8890B2480D5DEB030052D4CA /* exnew_opengl.c */; }; 8890B24C0D5DEB740052D4CA /* libAllegro-4.9.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libAllegro-4.9.a */; }; @@ -150,91 +123,20 @@ 88922FF70CD7DC4A00017822 /* allegro.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F540CD7DC4900017822 /* allegro.c */; }; 88922FF80CD7DC4A00017822 /* bitmap_new.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F550CD7DC4900017822 /* bitmap_new.c */; }; 88922FF90CD7DC4A00017822 /* blenders.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F560CD7DC4900017822 /* blenders.c */; }; - 88922FFA0CD7DC4A00017822 /* blit.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F570CD7DC4900017822 /* blit.c */; }; - 88922FFB0CD7DC4A00017822 /* bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F580CD7DC4900017822 /* bmp.c */; }; - 88922FFC0CD7DC4A00017822 /* cblit.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F5A0CD7DC4900017822 /* cblit.h */; }; - 88922FFD0CD7DC4A00017822 /* cblit16.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F5B0CD7DC4900017822 /* cblit16.c */; }; - 88922FFE0CD7DC4A00017822 /* cblit24.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F5C0CD7DC4900017822 /* cblit24.c */; }; - 88922FFF0CD7DC4A00017822 /* cblit32.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F5D0CD7DC4900017822 /* cblit32.c */; }; - 889230000CD7DC4A00017822 /* cblit8.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F5E0CD7DC4900017822 /* cblit8.c */; }; - 889230020CD7DC4A00017822 /* ccsprite.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F600CD7DC4900017822 /* ccsprite.c */; }; - 889230030CD7DC4A00017822 /* cdefs15.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F610CD7DC4900017822 /* cdefs15.h */; }; - 889230040CD7DC4A00017822 /* cdefs16.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F620CD7DC4900017822 /* cdefs16.h */; }; - 889230050CD7DC4A00017822 /* cdefs24.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F630CD7DC4900017822 /* cdefs24.h */; }; - 889230060CD7DC4A00017822 /* cdefs32.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F640CD7DC4900017822 /* cdefs32.h */; }; - 889230070CD7DC4A00017822 /* cdefs8.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F650CD7DC4900017822 /* cdefs8.h */; }; - 889230080CD7DC4A00017822 /* cgfx.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F660CD7DC4900017822 /* cgfx.h */; }; - 889230090CD7DC4A00017822 /* cgfx15.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F670CD7DC4900017822 /* cgfx15.c */; }; - 8892300A0CD7DC4A00017822 /* cgfx16.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F680CD7DC4900017822 /* cgfx16.c */; }; - 8892300B0CD7DC4A00017822 /* cgfx24.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F690CD7DC4900017822 /* cgfx24.c */; }; - 8892300C0CD7DC4A00017822 /* cgfx32.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F6A0CD7DC4900017822 /* cgfx32.c */; }; - 8892300D0CD7DC4A00017822 /* cgfx8.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F6B0CD7DC4900017822 /* cgfx8.c */; }; - 8892300E0CD7DC4A00017822 /* cmisc.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F6C0CD7DC4900017822 /* cmisc.c */; }; - 889230100CD7DC4A00017822 /* cscan.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F6E0CD7DC4900017822 /* cscan.h */; }; - 889230110CD7DC4A00017822 /* cscan15.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F6F0CD7DC4900017822 /* cscan15.c */; }; - 889230120CD7DC4A00017822 /* cscan16.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F700CD7DC4900017822 /* cscan16.c */; }; - 889230130CD7DC4A00017822 /* cscan24.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F710CD7DC4900017822 /* cscan24.c */; }; - 889230140CD7DC4A00017822 /* cscan32.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F720CD7DC4900017822 /* cscan32.c */; }; - 889230150CD7DC4A00017822 /* cscan8.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F730CD7DC4900017822 /* cscan8.c */; }; - 889230160CD7DC4A00017822 /* cspr.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F740CD7DC4900017822 /* cspr.h */; }; - 889230170CD7DC4A00017822 /* cspr15.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F750CD7DC4900017822 /* cspr15.c */; }; - 889230180CD7DC4A00017822 /* cspr16.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F760CD7DC4900017822 /* cspr16.c */; }; - 889230190CD7DC4A00017822 /* cspr24.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F770CD7DC4900017822 /* cspr24.c */; }; - 8892301A0CD7DC4A00017822 /* cspr32.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F780CD7DC4900017822 /* cspr32.c */; }; - 8892301B0CD7DC4A00017822 /* cspr8.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F790CD7DC4900017822 /* cspr8.c */; }; - 8892301C0CD7DC4A00017822 /* cstretch.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F7A0CD7DC4900017822 /* cstretch.c */; }; - 8892301D0CD7DC4A00017822 /* czscan.h in Headers */ = {isa = PBXBuildFile; fileRef = 88922F7B0CD7DC4900017822 /* czscan.h */; }; - 8892301E0CD7DC4A00017822 /* czscan15.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F7C0CD7DC4900017822 /* czscan15.c */; }; - 8892301F0CD7DC4A00017822 /* czscan16.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F7D0CD7DC4900017822 /* czscan16.c */; }; - 889230200CD7DC4A00017822 /* czscan24.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F7E0CD7DC4900017822 /* czscan24.c */; }; - 889230210CD7DC4A00017822 /* czscan32.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F7F0CD7DC4900017822 /* czscan32.c */; }; - 889230220CD7DC4A00017822 /* czscan8.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F800CD7DC4900017822 /* czscan8.c */; }; - 889230230CD7DC4A00017822 /* clip3d.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F810CD7DC4900017822 /* clip3d.c */; }; - 889230240CD7DC4A00017822 /* clip3df.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F820CD7DC4900017822 /* clip3df.c */; }; - 889230250CD7DC4A00017822 /* colblend.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F830CD7DC4900017822 /* colblend.c */; }; - 889230260CD7DC4A00017822 /* color.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F840CD7DC4900017822 /* color.c */; }; - 889230270CD7DC4A00017822 /* cojoy.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F860CD7DC4900017822 /* cojoy.c */; }; - 889230280CD7DC4A00017822 /* cokeybd.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F870CD7DC4900017822 /* cokeybd.c */; }; - 889230290CD7DC4A00017822 /* comouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F880CD7DC4900017822 /* comouse.c */; }; - 8892302A0CD7DC4A00017822 /* cotimer.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F890CD7DC4900017822 /* cotimer.c */; }; - 8892302B0CD7DC4A00017822 /* config.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F8A0CD7DC4900017822 /* config.c */; }; 8892302C0CD7DC4A00017822 /* convert.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F8B0CD7DC4900017822 /* convert.c */; }; - 8892302D0CD7DC4A00017822 /* datafile.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F8C0CD7DC4900017822 /* datafile.c */; }; - 8892302E0CD7DC4A00017822 /* dataregi.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F8D0CD7DC4900017822 /* dataregi.c */; }; - 8892302F0CD7DC4A00017822 /* digmid.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F8E0CD7DC4900017822 /* digmid.c */; }; 889230300CD7DC4A00017822 /* display_new.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F8F0CD7DC4900017822 /* display_new.c */; }; - 889230310CD7DC4A00017822 /* display.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F900CD7DC4900017822 /* display.c */; }; - 889230320CD7DC4A00017822 /* dispsw.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F910CD7DC4900017822 /* dispsw.c */; }; - 889230330CD7DC4A00017822 /* dither.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F920CD7DC4900017822 /* dither.c */; }; - 889230340CD7DC4A00017822 /* drvlist.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F930CD7DC4900017822 /* drvlist.c */; }; 889230350CD7DC4A00017822 /* dtor.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F940CD7DC4900017822 /* dtor.c */; }; 889230360CD7DC4A00017822 /* events.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F950CD7DC4900017822 /* events.c */; }; 889230370CD7DC4A00017822 /* evtsrc.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F960CD7DC4900017822 /* evtsrc.c */; }; 889230380CD7DC4A00017822 /* file.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F970CD7DC4900017822 /* file.c */; }; - 889230390CD7DC4A00017822 /* fli.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F980CD7DC4900017822 /* fli.c */; }; - 8892303A0CD7DC4A00017822 /* flood.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F990CD7DC4900017822 /* flood.c */; }; - 8892303B0CD7DC4A00017822 /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F9A0CD7DC4900017822 /* font.c */; }; - 8892303C0CD7DC4A00017822 /* fontbios.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F9B0CD7DC4900017822 /* fontbios.c */; }; - 8892303D0CD7DC4A00017822 /* fontbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F9C0CD7DC4900017822 /* fontbmp.c */; }; - 8892303E0CD7DC4A00017822 /* fontdat.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F9D0CD7DC4900017822 /* fontdat.c */; }; - 8892303F0CD7DC4A00017822 /* fontgrx.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F9E0CD7DC4900017822 /* fontgrx.c */; }; - 889230400CD7DC4A00017822 /* fonttxt.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922F9F0CD7DC4900017822 /* fonttxt.c */; }; - 889230410CD7DC4A00017822 /* fsel.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA00CD7DC4900017822 /* fsel.c */; }; - 889230420CD7DC4A00017822 /* gfx.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA10CD7DC4900017822 /* gfx.c */; }; - 889230430CD7DC4A00017822 /* glyph.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA20CD7DC4900017822 /* glyph.c */; }; 889230440CD7DC4A00017822 /* graphics.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA30CD7DC4900017822 /* graphics.c */; }; - 889230450CD7DC4A00017822 /* gsprite.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA40CD7DC4900017822 /* gsprite.c */; }; - 889230460CD7DC4A00017822 /* gui.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA50CD7DC4900017822 /* gui.c */; }; - 889230470CD7DC4A00017822 /* guiproc.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA60CD7DC4900017822 /* guiproc.c */; }; 889230480CD7DC4A00017822 /* inline.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA70CD7DC4900017822 /* inline.c */; }; 889230490CD7DC4A00017822 /* joynu.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA80CD7DC4900017822 /* joynu.c */; }; 8892304A0CD7DC4A00017822 /* keybdnu.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FA90CD7DC4900017822 /* keybdnu.c */; }; - 8892304B0CD7DC4A00017822 /* lbm.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FAA0CD7DC4900017822 /* lbm.c */; }; 8892304C0CD7DC4A00017822 /* libc.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FAB0CD7DC4900017822 /* libc.c */; }; 8892304D0CD7DC4A00017822 /* lzss.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FAC0CD7DC4900017822 /* lzss.c */; }; 8892304E0CD7DC4A00017822 /* cadigi.m in Sources */ = {isa = PBXBuildFile; fileRef = 88922FAE0CD7DC4900017822 /* cadigi.m */; }; 8892304F0CD7DC4A00017822 /* camidi.m in Sources */ = {isa = PBXBuildFile; fileRef = 88922FAF0CD7DC4900017822 /* camidi.m */; }; - 889230500CD7DC4A00017822 /* drivers.m in Sources */ = {isa = PBXBuildFile; fileRef = 88922FB00CD7DC4900017822 /* drivers.m */; }; 889230510CD7DC4A00017822 /* hidjoy.m in Sources */ = {isa = PBXBuildFile; fileRef = 88922FB10CD7DC4900017822 /* hidjoy.m */; }; 889230520CD7DC4A00017822 /* hidman.m in Sources */ = {isa = PBXBuildFile; fileRef = 88922FB20CD7DC4900017822 /* hidman.m */; }; 889230530CD7DC4A00017822 /* keybd.m in Sources */ = {isa = PBXBuildFile; fileRef = 88922FB30CD7DC4900017822 /* keybd.m */; }; @@ -244,42 +146,16 @@ 8892305A0CD7DC4A00017822 /* qzmouse.m in Sources */ = {isa = PBXBuildFile; fileRef = 88922FBA0CD7DC4900017822 /* qzmouse.m */; }; 8892305D0CD7DC4A00017822 /* system.m in Sources */ = {isa = PBXBuildFile; fileRef = 88922FBD0CD7DC4900017822 /* system.m */; }; 8892305E0CD7DC4A00017822 /* math.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FBE0CD7DC4900017822 /* math.c */; }; - 8892305F0CD7DC4A00017822 /* math3d.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FBF0CD7DC4900017822 /* math3d.c */; }; 889230600CD7DC4A00017822 /* memblit.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FC00CD7DC4900017822 /* memblit.c */; }; 889230610CD7DC4A00017822 /* memdraw.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FC10CD7DC4900017822 /* memdraw.c */; }; 889230620CD7DC4A00017822 /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FC20CD7DC4900017822 /* memory.c */; }; - 889230630CD7DC4A00017822 /* midi.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FC30CD7DC4900017822 /* midi.c */; }; - 889230790CD7DC4A00017822 /* mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FDA0CD7DC4900017822 /* mixer.c */; }; - 8892307A0CD7DC4A00017822 /* modesel.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FDB0CD7DC4900017822 /* modesel.c */; }; 8892307B0CD7DC4A00017822 /* mousenu.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FDC0CD7DC4900017822 /* mousenu.c */; }; - 8892307C0CD7DC4A00017822 /* pcx.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FDD0CD7DC4900017822 /* pcx.c */; }; 8892307D0CD7DC4A00017822 /* pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FDE0CD7DC4900017822 /* pixels.c */; }; - 8892307E0CD7DC4A00017822 /* poly3d.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FDF0CD7DC4900017822 /* poly3d.c */; }; - 8892307F0CD7DC4A00017822 /* polygon.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE00CD7DC4900017822 /* polygon.c */; }; - 889230800CD7DC4A00017822 /* quantize.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE10CD7DC4900017822 /* quantize.c */; }; - 889230810CD7DC4A00017822 /* quat.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE20CD7DC4900017822 /* quat.c */; }; - 889230820CD7DC4A00017822 /* readbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE30CD7DC4A00017822 /* readbmp.c */; }; - 889230830CD7DC4A00017822 /* readfont.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE40CD7DC4A00017822 /* readfont.c */; }; - 889230840CD7DC4A00017822 /* readsmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE50CD7DC4A00017822 /* readsmp.c */; }; - 889230850CD7DC4A00017822 /* rle.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE60CD7DC4A00017822 /* rle.c */; }; 889230860CD7DC4A00017822 /* rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE70CD7DC4A00017822 /* rotate.c */; }; - 889230870CD7DC4A00017822 /* scene3d.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE80CD7DC4A00017822 /* scene3d.c */; }; - 889230880CD7DC4A00017822 /* sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FE90CD7DC4A00017822 /* sound.c */; }; - 889230890CD7DC4A00017822 /* spline.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FEA0CD7DC4A00017822 /* spline.c */; }; - 8892308A0CD7DC4A00017822 /* stream.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FEB0CD7DC4A00017822 /* stream.c */; }; 8892308B0CD7DC4A00017822 /* system_new.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FEC0CD7DC4A00017822 /* system_new.c */; }; - 8892308C0CD7DC4A00017822 /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FED0CD7DC4A00017822 /* text.c */; }; - 8892308D0CD7DC4A00017822 /* tga.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FEE0CD7DC4A00017822 /* tga.c */; }; 8892308E0CD7DC4A00017822 /* tls.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FEF0CD7DC4A00017822 /* tls.c */; }; 8892308F0CD7DC4A00017822 /* unicode.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FF00CD7DC4A00017822 /* unicode.c */; }; - 889230900CD7DC4A00017822 /* vtable.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FF10CD7DC4A00017822 /* vtable.c */; }; - 889230910CD7DC4A00017822 /* vtable8.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FF20CD7DC4A00017822 /* vtable8.c */; }; - 889230920CD7DC4A00017822 /* vtable15.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FF30CD7DC4A00017822 /* vtable15.c */; }; - 889230930CD7DC4A00017822 /* vtable16.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FF40CD7DC4A00017822 /* vtable16.c */; }; - 889230940CD7DC4A00017822 /* vtable24.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FF50CD7DC4A00017822 /* vtable24.c */; }; - 889230950CD7DC4A00017822 /* vtable32.c in Sources */ = {isa = PBXBuildFile; fileRef = 88922FF60CD7DC4A00017822 /* vtable32.c */; }; 8894EFA30D60E9D500E4968F /* extensions.c in Sources */ = {isa = PBXBuildFile; fileRef = 8894EFA20D60E9D500E4968F /* extensions.c */; }; - 88956BE50DBBDE8500074693 /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 889840610D6A416E00338D77 /* text.c */; }; 8896BA550D6B05AE0006AB52 /* timernu.c in Sources */ = {isa = PBXBuildFile; fileRef = 8896BA540D6B05AE0006AB52 /* timernu.c */; }; 88983E590D6A3F6B00338D77 /* exnew_icon.c in Sources */ = {isa = PBXBuildFile; fileRef = 883B72E60D686DAD009F1EDA /* exnew_icon.c */; }; 8898404C0D6A3F7F00338D77 /* libAllegro-4.9.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libAllegro-4.9.a */; }; @@ -291,7 +167,84 @@ 889840520D6A3F7F00338D77 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; }; 889840530D6A3F7F00338D77 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; 889840540D6A3F7F00338D77 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; - 889840620D6A416E00338D77 /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 889840610D6A416E00338D77 /* text.c */; }; + 889DBF2E0E40F4C1006F4B73 /* a5teroids.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBACD0D8B0FE000AE3780 /* a5teroids.cpp */; }; + 889DBF2F0E40F4C1006F4B73 /* Asteroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBACE0D8B0FE000AE3780 /* Asteroid.cpp */; }; + 889DBF300E40F4C1006F4B73 /* BitmapResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBACF0D8B0FE000AE3780 /* BitmapResource.cpp */; }; + 889DBF310E40F4C1006F4B73 /* Bullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD00D8B0FE000AE3780 /* Bullet.cpp */; }; + 889DBF320E40F4C1006F4B73 /* ButtonWidget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD10D8B0FE000AE3780 /* ButtonWidget.cpp */; }; + 889DBF330E40F4C1006F4B73 /* collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD20D8B0FE000AE3780 /* collision.cpp */; }; + 889DBF340E40F4C1006F4B73 /* Debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD30D8B0FE000AE3780 /* Debug.cpp */; }; + 889DBF350E40F4C1006F4B73 /* DisplayResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD40D8B0FE000AE3780 /* DisplayResource.cpp */; }; + 889DBF360E40F4C1006F4B73 /* Enemy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD50D8B0FE000AE3780 /* Enemy.cpp */; }; + 889DBF370E40F4C1006F4B73 /* Entity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD60D8B0FE000AE3780 /* Entity.cpp */; }; + 889DBF380E40F4C1006F4B73 /* Error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD70D8B0FE000AE3780 /* Error.cpp */; }; + 889DBF390E40F4C1006F4B73 /* Explosion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD80D8B0FE000AE3780 /* Explosion.cpp */; }; + 889DBF3A0E40F4C1006F4B73 /* GenericResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAD90D8B0FE000AE3780 /* GenericResource.cpp */; }; + 889DBF3B0E40F4C1006F4B73 /* GUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBADA0D8B0FE000AE3780 /* GUI.cpp */; }; + 889DBF3C0E40F4C1006F4B73 /* Input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBADB0D8B0FE000AE3780 /* Input.cpp */; }; + 889DBF3D0E40F4C1006F4B73 /* LargeAsteroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBADC0D8B0FE000AE3780 /* LargeAsteroid.cpp */; }; + 889DBF3E0E40F4C1006F4B73 /* LargeBullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBADD0D8B0FE000AE3780 /* LargeBullet.cpp */; }; + 889DBF3F0E40F4C1006F4B73 /* LargeSlowBullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBADE0D8B0FE000AE3780 /* LargeSlowBullet.cpp */; }; + 889DBF400E40F4C1006F4B73 /* logic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBADF0D8B0FE000AE3780 /* logic.cpp */; }; + 889DBF410E40F4C1006F4B73 /* MediumAsteroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE00D8B0FE000AE3780 /* MediumAsteroid.cpp */; }; + 889DBF420E40F4C1006F4B73 /* Misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE10D8B0FE000AE3780 /* Misc.cpp */; }; + 889DBF430E40F4C1006F4B73 /* Player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE20D8B0FE000AE3780 /* Player.cpp */; }; + 889DBF440E40F4C1006F4B73 /* PowerUp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE30D8B0FE000AE3780 /* PowerUp.cpp */; }; + 889DBF450E40F4C1006F4B73 /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE40D8B0FE000AE3780 /* render.cpp */; }; + 889DBF460E40F4C1006F4B73 /* Resource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE50D8B0FE000AE3780 /* Resource.cpp */; }; + 889DBF470E40F4C1006F4B73 /* ResourceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE60D8B0FE000AE3780 /* ResourceManager.cpp */; }; + 889DBF480E40F4C1006F4B73 /* SampleResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE70D8B0FE000AE3780 /* SampleResource.cpp */; }; + 889DBF490E40F4C1006F4B73 /* SmallAsteroid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE80D8B0FE000AE3780 /* SmallAsteroid.cpp */; }; + 889DBF4A0E40F4C1006F4B73 /* SmallBullet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAE90D8B0FE000AE3780 /* SmallBullet.cpp */; }; + 889DBF4B0E40F4C1006F4B73 /* sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAEA0D8B0FE000AE3780 /* sound.cpp */; }; + 889DBF4C0E40F4C1006F4B73 /* UFO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAEB0D8B0FE000AE3780 /* UFO.cpp */; }; + 889DBF4D0E40F4C1006F4B73 /* wave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88CBBAEC0D8B0FE000AE3780 /* wave.cpp */; }; + 889DC14A0E410495006F4B73 /* libAllegro-4.9.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libAllegro-4.9.a */; }; + 889DC14B0E410495006F4B73 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CDC0D56673F00F0FD8E /* CoreAudio.framework */; }; + 889DC14C0E410495006F4B73 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CC70D565EC000F0FD8E /* IOKit.framework */; }; + 889DC14D0E410495006F4B73 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25C940D565E8100F0FD8E /* OpenGL.framework */; }; + 889DC14E0E410495006F4B73 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88FC445D0CEB983B00EFA1D3 /* AudioUnit.framework */; }; + 889DC14F0E410495006F4B73 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88FC444B0CEB981F00EFA1D3 /* AudioToolbox.framework */; }; + 889DC1500E410495006F4B73 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; }; + 889DC1510E410495006F4B73 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; + 889DC1520E410495006F4B73 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + 889DC1810E41068A006F4B73 /* background.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1650E41068A006F4B73 /* background.tga */; }; + 889DC1820E41068A006F4B73 /* large_asteroid.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1660E41068A006F4B73 /* large_asteroid.tga */; }; + 889DC1830E41068A006F4B73 /* large_bullet.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1670E41068A006F4B73 /* large_bullet.tga */; }; + 889DC1840E41068A006F4B73 /* large_explosion_0.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1680E41068A006F4B73 /* large_explosion_0.tga */; }; + 889DC1850E41068A006F4B73 /* large_explosion_1.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1690E41068A006F4B73 /* large_explosion_1.tga */; }; + 889DC1860E41068A006F4B73 /* large_explosion_2.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC16A0E41068A006F4B73 /* large_explosion_2.tga */; }; + 889DC1870E41068A006F4B73 /* large_explosion_3.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC16B0E41068A006F4B73 /* large_explosion_3.tga */; }; + 889DC1880E41068A006F4B73 /* large_explosion_4.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC16C0E41068A006F4B73 /* large_explosion_4.tga */; }; + 889DC1890E41068A006F4B73 /* large_font.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC16D0E41068A006F4B73 /* large_font.tga */; }; + 889DC18A0E41068A006F4B73 /* life_powerup.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC16E0E41068A006F4B73 /* life_powerup.tga */; }; + 889DC18B0E41068A006F4B73 /* logo.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC16F0E41068A006F4B73 /* logo.tga */; }; + 889DC18C0E41068A006F4B73 /* medium_asteroid.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1700E41068A006F4B73 /* medium_asteroid.tga */; }; + 889DC18D0E41068A006F4B73 /* ship_icon.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1710E41068A006F4B73 /* ship_icon.tga */; }; + 889DC18E0E41068A006F4B73 /* ship_trans.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1720E41068A006F4B73 /* ship_trans.tga */; }; + 889DC18F0E41068A006F4B73 /* ship.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1730E41068A006F4B73 /* ship.tga */; }; + 889DC1900E41068A006F4B73 /* small_asteroid.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1740E41068A006F4B73 /* small_asteroid.tga */; }; + 889DC1910E41068A006F4B73 /* small_bullet.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1750E41068A006F4B73 /* small_bullet.tga */; }; + 889DC1920E41068A006F4B73 /* small_explosion_0.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1760E41068A006F4B73 /* small_explosion_0.tga */; }; + 889DC1930E41068A006F4B73 /* small_explosion_1.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1770E41068A006F4B73 /* small_explosion_1.tga */; }; + 889DC1940E41068A006F4B73 /* small_explosion_2.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1780E41068A006F4B73 /* small_explosion_2.tga */; }; + 889DC1950E41068A006F4B73 /* small_explosion_3.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1790E41068A006F4B73 /* small_explosion_3.tga */; }; + 889DC1960E41068A006F4B73 /* small_explosion_4.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC17A0E41068A006F4B73 /* small_explosion_4.tga */; }; + 889DC1970E41068A006F4B73 /* small_font.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC17B0E41068A006F4B73 /* small_font.tga */; }; + 889DC1980E41068A006F4B73 /* trail.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC17C0E41068A006F4B73 /* trail.tga */; }; + 889DC1990E41068A006F4B73 /* ufo0.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC17D0E41068A006F4B73 /* ufo0.tga */; }; + 889DC19A0E41068A006F4B73 /* ufo1.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC17E0E41068A006F4B73 /* ufo1.tga */; }; + 889DC19B0E41068A006F4B73 /* ufo2.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC17F0E41068A006F4B73 /* ufo2.tga */; }; + 889DC19C0E41068A006F4B73 /* weapon_powerup.tga in Copy Graphics */ = {isa = PBXBuildFile; fileRef = 889DC1800E41068A006F4B73 /* weapon_powerup.tga */; }; + 889DC1A50E4106BA006F4B73 /* big_explosion.wav in Copy Sound */ = {isa = PBXBuildFile; fileRef = 889DC19D0E4106BA006F4B73 /* big_explosion.wav */; }; + 889DC1A60E4106BA006F4B73 /* collision.wav in Copy Sound */ = {isa = PBXBuildFile; fileRef = 889DC19E0E4106BA006F4B73 /* collision.wav */; }; + 889DC1A70E4106BA006F4B73 /* fire_large.wav in Copy Sound */ = {isa = PBXBuildFile; fileRef = 889DC19F0E4106BA006F4B73 /* fire_large.wav */; }; + 889DC1A80E4106BA006F4B73 /* fire_small.wav in Copy Sound */ = {isa = PBXBuildFile; fileRef = 889DC1A00E4106BA006F4B73 /* fire_small.wav */; }; + 889DC1A90E4106BA006F4B73 /* game_music.wav in Copy Sound */ = {isa = PBXBuildFile; fileRef = 889DC1A10E4106BA006F4B73 /* game_music.wav */; }; + 889DC1AA0E4106BA006F4B73 /* powerup.wav in Copy Sound */ = {isa = PBXBuildFile; fileRef = 889DC1A20E4106BA006F4B73 /* powerup.wav */; }; + 889DC1AB0E4106BA006F4B73 /* small_explosion.wav in Copy Sound */ = {isa = PBXBuildFile; fileRef = 889DC1A30E4106BA006F4B73 /* small_explosion.wav */; }; + 889DC1AC0E4106BA006F4B73 /* title_music.wav in Copy Sound */ = {isa = PBXBuildFile; fileRef = 889DC1A40E4106BA006F4B73 /* title_music.wav */; }; + 889DC1EE0E410809006F4B73 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 889DC1ED0E410809006F4B73 /* Icon.icns */; }; 88A25C970D565E8100F0FD8E /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25C940D565E8100F0FD8E /* OpenGL.framework */; }; 88A25CCA0D565EC000F0FD8E /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CC70D565EC000F0FD8E /* IOKit.framework */; }; 88A25CCD0D565F5800F0FD8E /* memblit1.c in Sources */ = {isa = PBXBuildFile; fileRef = 88A25CCC0D565F5800F0FD8E /* memblit1.c */; }; @@ -349,10 +302,6 @@ 88CBBD800D8B156100AE3780 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; }; 88CBBD810D8B156100AE3780 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; 88CBBD820D8B156100AE3780 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; - 88CBBD880D8B15A700AE3780 /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985B0D68EFBF005DDBD6 /* font.c */; }; - 88CBBD890D8B15A700AE3780 /* fontbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD98610D68EFF2005DDBD6 /* fontbmp.c */; }; - 88CBBD8A0D8B15A800AE3780 /* readfont.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985E0D68EFDC005DDBD6 /* readfont.c */; }; - 88CBBD8B0D8B15A900AE3780 /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 889840610D6A416E00338D77 /* text.c */; }; 88CD95F90D68E4A2005DDBD6 /* exnew_resize.c in Sources */ = {isa = PBXBuildFile; fileRef = 883B72EB0D686DAD009F1EDA /* exnew_resize.c */; }; 88CD97EB0D68E4BA005DDBD6 /* libAllegro-4.9.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libAllegro-4.9.a */; }; 88CD97EC0D68E4BA005DDBD6 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CDC0D56673F00F0FD8E /* CoreAudio.framework */; }; @@ -372,9 +321,6 @@ 88CD98500D68EF8C005DDBD6 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; }; 88CD98510D68EF8C005DDBD6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; 88CD98520D68EF8C005DDBD6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; - 88CD985C0D68EFBF005DDBD6 /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985B0D68EFBF005DDBD6 /* font.c */; }; - 88CD985F0D68EFDC005DDBD6 /* readfont.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985E0D68EFDC005DDBD6 /* readfont.c */; }; - 88CD98620D68EFF2005DDBD6 /* fontbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD98610D68EFF2005DDBD6 /* fontbmp.c */; }; 88D533E80D748AA0003B779E /* libAllegro-4.9.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libAllegro-4.9.a */; }; 88D533E90D748AA0003B779E /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CDC0D56673F00F0FD8E /* CoreAudio.framework */; }; 88D533EA0D748AA0003B779E /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CC70D565EC000F0FD8E /* IOKit.framework */; }; @@ -385,15 +331,71 @@ 88D533EF0D748AA0003B779E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; 88D533F00D748AA0003B779E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; 88D533F10D748ABA003B779E /* exnew_membmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 883B72E90D686DAD009F1EDA /* exnew_membmp.c */; }; + 88D568390E5F4E3200ECB75F /* bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D5682B0E5F4DB100ECB75F /* bmp.c */; }; + 88D5683A0E5F4E3800ECB75F /* iio.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D5682C0E5F4DB100ECB75F /* iio.c */; }; + 88D5683B0E5F4E3B00ECB75F /* tga.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D5682F0E5F4DB100ECB75F /* tga.c */; }; + 88D5683C0E5F4E3B00ECB75F /* pcx.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D5682E0E5F4DB100ECB75F /* pcx.c */; }; + 88D568430E5F4E9300ECB75F /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985B0D68EFBF005DDBD6 /* font.c */; }; + 88D568440E5F4E9400ECB75F /* fontbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD98610D68EFF2005DDBD6 /* fontbmp.c */; }; + 88D568450E5F4E9400ECB75F /* readfont.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985E0D68EFDC005DDBD6 /* readfont.c */; }; + 88D568460E5F4E9500ECB75F /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 889840610D6A416E00338D77 /* text.c */; }; + 88D5688A0E5F4FFB00ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; + 88D5688B0E5F4FFB00ECB75F /* libfont.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568420E5F4E6500ECB75F /* libfont.a */; }; + 88D5689F0E5F505F00ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; + 88D568A00E5F505F00ECB75F /* libfont.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568420E5F4E6500ECB75F /* libfont.a */; }; + 88D568A90E5F50A500ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; + 88D568AA0E5F50A500ECB75F /* libfont.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568420E5F4E6500ECB75F /* libfont.a */; }; + 88D568AF0E5F50DC00ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; + 88D568B00E5F50DC00ECB75F /* libfont.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568420E5F4E6500ECB75F /* libfont.a */; }; + 88D568C80E5F513900ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; + 88D568C90E5F513900ECB75F /* libfont.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568420E5F4E6500ECB75F /* libfont.a */; }; + 88D568D50E5F518C00ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; + 88D568D60E5F518C00ECB75F /* libfont.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568420E5F4E6500ECB75F /* libfont.a */; }; + 88D568DA0E5F51B400ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; + 88D568DE0E5F523500ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; + 88D568E00E5F525000ECB75F /* libiio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D568350E5F4DE800ECB75F /* libiio.a */; }; 88D623720D02EEF300656A3C /* vector.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D623710D02EEF300656A3C /* vector.c */; }; 88D623840D02EF4500656A3C /* ufile.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D623830D02EF4500656A3C /* ufile.c */; }; 88D623870D02EF5F00656A3C /* uthreads.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D623860D02EF5F00656A3C /* uthreads.c */; }; 88D6238C0D02EF9100656A3C /* uxthread.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D6238B0D02EF9100656A3C /* uxthread.c */; }; - 88DE32780D6B7E17009391B8 /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 889840610D6A416E00338D77 /* text.c */; }; - 88E59AA10D888BDF004EC1AF /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 889840610D6A416E00338D77 /* text.c */; }; - 88E59AA20D888BDF004EC1AF /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985B0D68EFBF005DDBD6 /* font.c */; }; - 88E59AA30D888BE0004EC1AF /* readfont.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985E0D68EFDC005DDBD6 /* readfont.c */; }; - 88E59AA40D888BE0004EC1AF /* fontbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD98610D68EFF2005DDBD6 /* fontbmp.c */; }; + 88D720C20E54BEBF000808EA /* exnew_lines.c in Sources */ = {isa = PBXBuildFile; fileRef = 88D720C10E54BEBF000808EA /* exnew_lines.c */; }; + 88D722B40E54BED7000808EA /* libAllegro-4.9.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libAllegro-4.9.a */; }; + 88D722B50E54BED7000808EA /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CDC0D56673F00F0FD8E /* CoreAudio.framework */; }; + 88D722B60E54BED7000808EA /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CC70D565EC000F0FD8E /* IOKit.framework */; }; + 88D722B70E54BED7000808EA /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25C940D565E8100F0FD8E /* OpenGL.framework */; }; + 88D722B80E54BED7000808EA /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88FC445D0CEB983B00EFA1D3 /* AudioUnit.framework */; }; + 88D722B90E54BED7000808EA /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88FC444B0CEB981F00EFA1D3 /* AudioToolbox.framework */; }; + 88D722BA0E54BED7000808EA /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D6A5FE840307C02AAC07 /* AppKit.framework */; }; + 88D722BB0E54BED7000808EA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; + 88D722BC0E54BED7000808EA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; + 88D722D10E54C025000808EA /* text.c in Sources */ = {isa = PBXBuildFile; fileRef = 889840610D6A416E00338D77 /* text.c */; }; + 88D722D20E54C025000808EA /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985B0D68EFBF005DDBD6 /* font.c */; }; + 88D722D30E54C025000808EA /* readfont.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD985E0D68EFDC005DDBD6 /* readfont.c */; }; + 88D722D40E54C025000808EA /* fontbmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 88CD98610D68EFF2005DDBD6 /* fontbmp.c */; }; + 88D722D60E54C025000808EA /* libAllegro-4.9.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AAC07E0554694100DB518D /* libAllegro-4.9.a */; }; + 88D722D70E54C025000808EA /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CDC0D56673F00F0FD8E /* CoreAudio.framework */; }; + 88D722D80E54C025000808EA /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25CC70D565EC000F0FD8E /* IOKit.framework */; }; + 88D722D90E54C025000808EA /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A25C940D565E8100F0FD8E /* OpenGL.framework */; }; + 88D722DA0E54C025000808EA /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88FC445D0CEB983B00EFA1D3 /* AudioUnit.framework */; ... [truncated message content] |
From: <mm...@us...> - 2008-08-23 23:35:25
|
Revision: 10514 http://alleg.svn.sourceforge.net/alleg/?rev=10514&view=rev Author: mmimica Date: 2008-08-23 23:35:35 +0000 (Sat, 23 Aug 2008) Log Message: ----------- Added another OpenGL example. Modified Paths: -------------- allegro/branches/4.9/examples/CMakeLists.txt allegro/branches/4.9/scons/all.scons Added Paths: ----------- allegro/branches/4.9/examples/exnew_glext.c Modified: allegro/branches/4.9/examples/CMakeLists.txt =================================================================== --- allegro/branches/4.9/examples/CMakeLists.txt 2008-08-23 22:23:16 UTC (rev 10513) +++ allegro/branches/4.9/examples/CMakeLists.txt 2008-08-23 23:35:35 UTC (rev 10514) @@ -41,6 +41,7 @@ if(SUPPORT_OPENGL) example(exnew_opengl NOTHING) + example(exnew_glext NOTHING) endif(SUPPORT_OPENGL) Added: allegro/branches/4.9/examples/exnew_glext.c =================================================================== --- allegro/branches/4.9/examples/exnew_glext.c (rev 0) +++ allegro/branches/4.9/examples/exnew_glext.c 2008-08-23 23:35:35 UTC (rev 10514) @@ -0,0 +1,303 @@ +/* This examples demonstrates how to use the extension mechanism. + * Taken from AllegroGL. + */ + +#include <math.h> +#include <string.h> +#include <stdio.h> +#include <allegro5/allegro5.h> +#include <allegro5/a5_opengl.h> + +#ifdef ALLEGRO_MACOSX +#include <OpenGL/glu.h> +#else +#include <GL/glu.h> +#endif + +#ifndef M_PI +#define M_PI 3.1415926535897932384626433832795 +#endif + +#define WINDOW_W 640 +#define WINDOW_H 480 + +#define MESH_SIZE 64 + +GLfloat mesh[MESH_SIZE][MESH_SIZE][3]; +GLfloat wave_movement = 0.0f; + + +/* Define our vertex program. + * It basically does: + * pos = vertex.position; + * pos.y = (sin(wave.x + pos.x / 5) + sin(wave.x + pos.z / 4)) * 2.5; + * result.position = modelview * projection * pos; + */ + +/* Plain ARBvp doesn't have a SIN opcode, so we provide one, built on a taylor + * expansion, with some fugding. + * + * First, we convert the operand to the [-pi..+pi] period by: + * - Dividing by 2pi, adding 1/2 + * - Taking the fraction of the result + * - Multiplying by 2pi, then subtracting pi. + * x' = frac((x / 2pi) + 0.5) * 2pi - pi + * + * Then, we compute the sine using a 7th order Taylor series centered at 0: + * x' = x - x^3/3! + x^5/5! - x^7/7! + * + * Note that we begin by multiplying x by 0.98 as a fugding factor to + * compensate for the fact that our Taylor series is just an approximation. + * The error is then reduced to < 0.5% from the ideal sine function. + */ +#define SIN(d, s, t) \ + /* Convert to [-pi..+pi] period */ \ + "MAD "d", "s", one_over_pi, 0.5;\n" \ + "FRC "d","d";\n" \ + "MAD "d","d", two_pi, -pi;\n" \ + "MUL "d","d", 0.98;\n" /* Scale input to compensate for prec error */\ + /* Compute SIN(d), using a Taylor series */ \ + "MUL "t".x, "d", "d";\n" /* x^2 */ \ + "MUL "t".y, "t".x, "d";\n" /* x^3 */ \ + "MUL "t".z, "t".y, "t".x;\n" /* x^5 */ \ + "MUL "t".w, "t".z, "t".x;\n" /* x^7 */ \ + "MAD "d", "t".y,-inv_3_fact, "d";\n" /* x - x^3/3! */ \ + "MAD "d", "t".z, inv_5_fact, "d";\n" /* x - x^3/3! + x^5/5! */ \ + "MAD "d", "t".w,-inv_7_fact, "d";\n" /* x - x^3/3! + x^5/5! - x^7/7!*/ + + +/* This is the actual vertex program. + * It computes sin(wave.x + pos.x / 5) and sin(wave.x + pos.z), adds them up, + * scales the result by 2.5 and stores that as the vertex's y component. + * + * Then, it does the modelview-projection transform on the vertex. + * + * XXX<rohannessian> Broken ATI drivers need a \n after each "line" + */ +const char *program = + "!!ARBvp1.0\n" + "ATTRIB pos = vertex.position;\n" + "ATTRIB wave = vertex.attrib[1];\n" + "PARAM modelview[4] = { state.matrix.mvp };\n" + "PARAM one_over_pi = 0.1591549;\n" + "PARAM pi = 3.1415926;\n" + "PARAM two_pi = 6.2831853;\n" + "PARAM inv_3_fact = 0.1666666;\n" + "PARAM inv_5_fact = 0.00833333333;\n" + "PARAM inv_7_fact = 0.00019841269841269;\n" + "TEMP temp, temp2;\n" + + /* temp.y = sin(wave.x + pos.x / 5) */ + "MAD temp.y, pos.x, 0.2, wave.x;\n" + SIN("temp.y", "temp.y", "temp2") + + /* temp.y += sin(wave.x + pos.z / 4) */ + "MAD temp.x, pos.z, 0.25, wave.x;\n" + SIN("temp.x", "temp.x", "temp2") + "ADD temp.y, temp.x, temp.y;\n" + + /* pos.y = temp.y * 2.5 */ + "MOV temp2, pos;\n" + "MUL temp2.y, temp.y, 2.5;\n" + + /* Transform the position by the modelview matrix */ + "DP4 result.position.w, temp2, modelview[3];\n" + "DP4 result.position.x, temp2, modelview[0];\n" + "DP4 result.position.y, temp2, modelview[1];\n" + "DP4 result.position.z, temp2, modelview[2];\n" + + "MOV result.color, vertex.color;\n" + "END"; + + +/* NVIDIA drivers do a better job; let's use a simpler program if we can. + */ +const char *program_nv = + "!!ARBvp1.0" + "OPTION NV_vertex_program2;" + "ATTRIB wave = vertex.attrib[1];" + "PARAM modelview[4] = { state.matrix.mvp };" + "TEMP temp;" + "TEMP pos;" + + "MOV pos, vertex.position;" + + /* temp.x = sin(wave.x + pos.x / 5) */ + /* temp.z = sin(wave.x + pos.z / 4) */ + "MAD temp.xz, pos, {0.2, 1.0, 0.25, 1.0}, wave.x;" + "SIN temp.x, temp.x;" + "SIN temp.z, temp.z;" + + /* temp.y = temp.x + temp.z */ + "ADD temp.y, temp.x, temp.z;" + + /* pos.y = temp.y * 2.5 */ + "MUL pos.y, temp.y, 2.5;" + + /* Transform the position by the modelview matrix */ + "DP4 result.position.w, pos, modelview[3];" + "DP4 result.position.x, pos, modelview[0];" + "DP4 result.position.y, pos, modelview[1];" + "DP4 result.position.z, pos, modelview[2];" + + "MOV result.color, vertex.color;" + "END"; + + +void create_mesh() { + int x, z; + + /* Create our mesh */ + for (x = 0; x < MESH_SIZE; x++) { + for (z = 0; z < MESH_SIZE; z++) { + mesh[x][z][0] = (float) (MESH_SIZE / 2) - x; + mesh[x][z][1] = 0.0f; + mesh[x][z][2] = (float) (MESH_SIZE / 2) - z; + } + } +} + + + +void draw_mesh() { + int x, z; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glColor4f(0.5f, 1.0f, 0.5f, 1.0f); + + for (x = 0; x < MESH_SIZE - 1; x++) { + + glBegin(GL_TRIANGLE_STRIP); + + for (z = 0; z < MESH_SIZE - 1; z++) { + glVertexAttrib1fARB(1, wave_movement); + glVertex3fv(&mesh[x][z][0]); + glVertex3fv(&mesh[x+1][z][0]); + + wave_movement += 0.00001f; + + if (wave_movement > 2 * M_PI) { + wave_movement = 0.0f; + } + } + glEnd(); + } + + glFlush(); +} + + + +int main() { + GLuint pid; + ALLEGRO_DISPLAY *d; + ALLEGRO_EVENT_QUEUE *queue; + ALLEGRO_EVENT event; + int frames = 0; + double start; + + al_init(); + + al_set_new_display_flags(ALLEGRO_OPENGL); + d = al_create_display(WINDOW_W, WINDOW_H); + if (!d) { + TRACE("Unable to open a OpenGL display."); + return -1; + } + + al_install_keyboard(); + + queue = al_create_event_queue(); + al_register_event_source(queue, (ALLEGRO_EVENT_SOURCE *)al_get_keyboard()); + al_register_event_source(queue, (ALLEGRO_EVENT_SOURCE *)d); + + + if (al_get_opengl_extension_list()->ALLEGRO_GL_ARB_multisample) { + glEnable(GL_MULTISAMPLE_ARB); + } + + if (!al_get_opengl_extension_list()->ALLEGRO_GL_ARB_vertex_program) { + TRACE("This example requires a video card that supports " + " the ARB_vertex_program extension.\n"); + return -1; + } + + glEnable(GL_DEPTH_TEST); + glShadeModel(GL_SMOOTH); + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glDisable(GL_CULL_FACE); + + /* Setup projection and modelview matrices */ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0, WINDOW_W/(float)WINDOW_H, 0.1, 100.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + /* Position the camera to look at our mesh from a distance */ + gluLookAt(0.0f, 20.0f, -45.0f, 0.0f, 0.0f, 0.0f, 0, 1, 0); + + create_mesh(); + + /* Define the vertex program */ + glEnable(GL_VERTEX_PROGRAM_ARB); + glGenProgramsARB(1, &pid); + glBindProgramARB(GL_VERTEX_PROGRAM_ARB, pid); + glGetError(); + + if (al_get_opengl_extension_list()->ALLEGRO_GL_NV_vertex_program2_option) { + glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, + strlen(program_nv), program_nv); + } + else { + glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, + strlen(program), program); + } + + /* Check for errors */ + if (glGetError()) { + const char *pgm = al_get_opengl_extension_list()->ALLEGRO_GL_NV_vertex_program2_option + ? program_nv : program; + GLint error_pos; + const GLubyte *error_str = glGetString(GL_PROGRAM_ERROR_STRING_ARB); + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &error_pos); + + TRACE("Error compiling the vertex program:\n%s\n\nat " + "character: %i\n%s\n", error_str, (int)error_pos, + pgm + error_pos); + return -1; + } + + + start = al_current_time(); + while (1) { + if (!al_event_queue_is_empty(queue)) { + while (al_get_next_event(queue, &event)) { + switch (event.type) { + case ALLEGRO_EVENT_DISPLAY_CLOSE: + goto done; + + case ALLEGRO_EVENT_KEY_DOWN: + if (event.keyboard.keycode == ALLEGRO_KEY_ESCAPE) + goto done; + break; + } + } + } + + draw_mesh(); + al_flip_display(); + frames++; + } + +done: + printf("%.1f FPS\n", frames / (al_current_time() - start)); + glDeleteProgramsARB(1, &pid); + al_destroy_event_queue(queue); + + return 0; +} +END_OF_MAIN() Modified: allegro/branches/4.9/scons/all.scons =================================================================== --- allegro/branches/4.9/scons/all.scons 2008-08-23 22:23:16 UTC (rev 10513) +++ allegro/branches/4.9/scons/all.scons 2008-08-23 23:35:35 UTC (rev 10514) @@ -125,6 +125,7 @@ example("exnew_multiwin") example("exnew_noframe") example("exnew_opengl") + example("exnew_glext") example("exnew_resize") example("exnew_scale") example("exnew_threads") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2008-08-23 23:58:01
|
Revision: 10515 http://alleg.svn.sourceforge.net/alleg/?rev=10515&view=rev Author: elias Date: 2008-08-23 23:58:10 +0000 (Sat, 23 Aug 2008) Log Message: ----------- made scons compile again after most recent changes Modified Paths: -------------- allegro/branches/4.9/addons/acodec/SConscript allegro/branches/4.9/addons/kcm_audio/SConscript allegro/branches/4.9/scons/all.scons Modified: allegro/branches/4.9/addons/acodec/SConscript =================================================================== --- allegro/branches/4.9/addons/acodec/SConscript 2008-08-23 23:35:35 UTC (rev 10514) +++ allegro/branches/4.9/addons/acodec/SConscript 2008-08-23 23:58:10 UTC (rev 10515) @@ -122,11 +122,12 @@ dir = 'acodec', name = 'a5_acodec', install_headers = ['allegro5/acodec.h'], - includes = ['#addons/audio','#addons/acodec'], + includes = ['#addons/kcm_audio','#addons/acodec'], examples = [('ex_acodec',['ex_acodec.c']), ('ex_acodec_multi',['ex_acodec_multi.c']), - ('ex_acodec_stream',['ex_acodec_stream.c'])], - example_libs = [context.libraryName('a5_audio')], +# ('ex_acodec_stream',['ex_acodec_stream.c']) + ], + example_libs = [context.libraryName('kcm_audio')], configs = configs, ) Modified: allegro/branches/4.9/addons/kcm_audio/SConscript =================================================================== --- allegro/branches/4.9/addons/kcm_audio/SConscript 2008-08-23 23:35:35 UTC (rev 10514) +++ allegro/branches/4.9/addons/kcm_audio/SConscript 2008-08-23 23:58:10 UTC (rev 10515) @@ -70,8 +70,6 @@ "allegro5/kcm_audio.h", "allegro5/internal/aintern_kcm_audio.h", "aintern_kcm_cfg.h"], - configs = configs, - example_libs = ["sndfile"], - examples = [("ex_kcm_player", ["ex_kcm_play.c"])],) + configs = configs) Return("can_build") Modified: allegro/branches/4.9/scons/all.scons =================================================================== --- allegro/branches/4.9/scons/all.scons 2008-08-23 23:35:35 UTC (rev 10514) +++ allegro/branches/4.9/scons/all.scons 2008-08-23 23:58:10 UTC (rev 10515) @@ -94,12 +94,14 @@ exEnv = env.Clone() exEnv.Append(CPPPATH = ['addons/font', 'addons/iio']) exEnv.BuildDir(buildDir + 'examples', 'examples', duplicate = 0) + # FIXME: those should be per-example.. exEnv.Append(LIBS = [context.libraryName('a5_font')]) exEnv.Append(LIBS = [context.libraryName('a5_iio')]) + exEnv.Append(LIBS = ["GLU"]) ## Add an example ## name - filename of example and also the alias of the target ## files - list of files associated with the example - def example(name, files = None): + def example(name, files = None, libs = []): if files is None: files = [name + ".c"] example = exEnv.Program('examples/' + name, appendDir(buildDir + '/examples/', files)) @@ -113,6 +115,7 @@ example("exnew_dualies") example("exnew_events") example("exnew_fs_resize") + example("exnew_glext", libs = ["GLU"]) example("exnew_icon") example("exnew_lines") example("exnew_lockbitmap") @@ -125,7 +128,6 @@ example("exnew_multiwin") example("exnew_noframe") example("exnew_opengl") - example("exnew_glext") example("exnew_resize") example("exnew_scale") example("exnew_threads") @@ -153,14 +155,14 @@ buildAddon("iio") buildAddon('font') -buildAddon("kcm_audio") -if buildAddon('audio'): +if buildAddon("kcm_audio"): buildAddon('acodec') +#if buildAddon('audio'): # addon_dirs = ['#addons/font','#addons/acodec','#addons/audio'] # SConscript( dirs = addon_dirs, exports = 'context' ) -context.addExtra(demo) +#context.addExtra(demo) context.addExtra(examples) # context.addExtra(addons) # context.addExtra(tools) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tr...@us...> - 2008-08-24 17:15:01
|
Revision: 10527 http://alleg.svn.sourceforge.net/alleg/?rev=10527&view=rev Author: trentg Date: 2008-08-24 17:15:10 +0000 (Sun, 24 Aug 2008) Log Message: ----------- First commit dsound driver for kcm_audio. Not really working yet. Modified Paths: -------------- allegro/branches/4.9/CMakeLists.txt allegro/branches/4.9/addons/kcm_audio/CMakeLists.txt allegro/branches/4.9/addons/kcm_audio/allegro5/internal/aintern_kcm_cfg.h.cmake allegro/branches/4.9/addons/kcm_audio/allegro5/kcm_audio.h allegro/branches/4.9/addons/kcm_audio/audio.c Added Paths: ----------- allegro/branches/4.9/addons/kcm_audio/dsound.cpp Modified: allegro/branches/4.9/CMakeLists.txt =================================================================== --- allegro/branches/4.9/CMakeLists.txt 2008-08-24 13:57:33 UTC (rev 10526) +++ allegro/branches/4.9/CMakeLists.txt 2008-08-24 17:15:10 UTC (rev 10527) @@ -410,7 +410,7 @@ list(APPEND LIBRARY_SOURCES lib/msvc/allegro.def) endif(COMPILER_MSVC) list(APPEND PLATFORM_LIBS - kernel32 user32 gdi32 comdlg32 ole32 dinput8 ddraw dxguid winmm dsound + kernel32 user32 gdi32 comdlg32 ole32 dinput8 dxguid winmm ) if(SUPPORT_D3D) list(APPEND LIBRARY_SOURCES ${ALLEGRO_SRC_D3D_FILES}) Modified: allegro/branches/4.9/addons/kcm_audio/CMakeLists.txt =================================================================== --- allegro/branches/4.9/addons/kcm_audio/CMakeLists.txt 2008-08-24 13:57:33 UTC (rev 10526) +++ allegro/branches/4.9/addons/kcm_audio/CMakeLists.txt 2008-08-24 17:15:10 UTC (rev 10527) @@ -7,8 +7,8 @@ ) set(AUDIO_INCLUDE_FILES allegro5/kcm_audio.h) -# XXX make this optional? -include(FindOpenAL) +# This is a rather cheap way of doing it, but it works in most cases +check_include_file(AL/al.h OPENAL_FOUND) if(OPENAL_FOUND) set(ALLEGRO_CFG_KCM_OPENAL 1) list(APPEND AUDIO_SOURCES openal.c) @@ -21,6 +21,14 @@ list(APPEND AUDIO_LIBRARIES asound) endif(SUPPORT_A5_ALSA) + +check_include_file(dsound.h HAVE_DSOUND) +if(HAVE_DSOUND) + set(ALLEGRO_CFG_KCM_DSOUND 1) + list(APPEND AUDIO_SOURCES dsound.cpp) + list(APPEND AUDIO_LIBRARIES dsound) +endif(HAVE_DSOUND) + configure_file( allegro5/internal/aintern_kcm_cfg.h.cmake include/allegro5/internal/aintern_kcm_cfg.h Modified: allegro/branches/4.9/addons/kcm_audio/allegro5/internal/aintern_kcm_cfg.h.cmake =================================================================== --- allegro/branches/4.9/addons/kcm_audio/allegro5/internal/aintern_kcm_cfg.h.cmake 2008-08-24 13:57:33 UTC (rev 10526) +++ allegro/branches/4.9/addons/kcm_audio/allegro5/internal/aintern_kcm_cfg.h.cmake 2008-08-24 17:15:10 UTC (rev 10527) @@ -1,2 +1,3 @@ #cmakedefine ALLEGRO_CFG_KCM_ALSA #cmakedefine ALLEGRO_CFG_KCM_OPENAL +#cmakedefine ALLEGRO_CFG_KCM_DSOUND Modified: allegro/branches/4.9/addons/kcm_audio/allegro5/kcm_audio.h =================================================================== --- allegro/branches/4.9/addons/kcm_audio/allegro5/kcm_audio.h 2008-08-24 13:57:33 UTC (rev 10526) +++ allegro/branches/4.9/addons/kcm_audio/allegro5/kcm_audio.h 2008-08-24 17:15:10 UTC (rev 10527) @@ -37,7 +37,16 @@ /* Type: ALLEGRO_AUDIO_DEPTH */ + +#ifndef __cplusplus typedef enum ALLEGRO_AUDIO_DEPTH ALLEGRO_AUDIO_DEPTH; +typedef enum ALLEGRO_CHANNEL_CONF ALLEGRO_CHANNEL_CONF; +typedef enum ALLEGRO_PLAYMODE ALLEGRO_PLAYMODE; +typedef enum ALLEGRO_MIXER_QUALITY ALLEGRO_MIXER_QUALITY; +typedef enum ALLEGRO_AUDIO_PROPERTY ALLEGRO_AUDIO_PROPERTY; +typedef enum ALLEGRO_AUDIO_DRIVER_ENUM ALLEGRO_AUDIO_DRIVER_ENUM; +#endif + enum ALLEGRO_AUDIO_DEPTH { /* Sample depth and type, and signedness. Mixers only use 32-bit signed * float (-1..+1). The unsigned value is a bit-flag applied to the depth @@ -62,7 +71,6 @@ /* Type: ALLEGRO_CHANNEL_CONF */ -typedef enum ALLEGRO_CHANNEL_CONF ALLEGRO_CHANNEL_CONF; enum ALLEGRO_CHANNEL_CONF { /* Speaker configuration (mono, stereo, 2.1, 3, etc). With regards to * behavior, most of this code makes no distinction between, say, 4.1 and @@ -85,7 +93,6 @@ /* Type: ALLEGRO_PLAYMODE * Sample looping mode. */ -typedef enum ALLEGRO_PLAYMODE ALLEGRO_PLAYMODE; enum ALLEGRO_PLAYMODE { ALLEGRO_PLAYMODE_ONCE = 0x100, ALLEGRO_PLAYMODE_ONEDIR = 0x101, @@ -95,7 +102,6 @@ /* Type: ALLEGRO_MIXER_QUALITY */ -typedef enum ALLEGRO_MIXER_QUALITY ALLEGRO_MIXER_QUALITY; enum ALLEGRO_MIXER_QUALITY { ALLEGRO_MIXER_QUALITY_POINT = 0x110, ALLEGRO_MIXER_QUALITY_LINEAR = 0x111, @@ -106,7 +112,6 @@ * Flags to pass to the various al_*_get_* and al_*_set_* functions. Not * all types will apply to all functions. */ -typedef enum ALLEGRO_AUDIO_PROPERTY ALLEGRO_AUDIO_PROPERTY; enum ALLEGRO_AUDIO_PROPERTY { ALLEGRO_AUDIOPROP_DEPTH = 0x200, ALLEGRO_AUDIOPROP_CHANNELS = 0x201, @@ -135,7 +140,6 @@ /* Type: ALLEGRO_AUDIO_DRIVER_ENUM */ -typedef enum ALLEGRO_AUDIO_DRIVER_ENUM ALLEGRO_AUDIO_DRIVER_ENUM; enum ALLEGRO_AUDIO_DRIVER_ENUM { /* Various driver modes. */ ALLEGRO_AUDIO_DRIVER_AUTODETECT = 0x20000, Modified: allegro/branches/4.9/addons/kcm_audio/audio.c =================================================================== --- allegro/branches/4.9/addons/kcm_audio/audio.c 2008-08-24 13:57:33 UTC (rev 10526) +++ allegro/branches/4.9/addons/kcm_audio/audio.c 2008-08-24 17:15:10 UTC (rev 10527) @@ -26,6 +26,9 @@ #if defined(ALLEGRO_CFG_KCM_ALSA) extern struct ALLEGRO_AUDIO_DRIVER _alsa_driver; #endif +#if defined(ALLEGRO_CFG_KCM_DSOUND) + extern struct ALLEGRO_AUDIO_DRIVER _dsound_driver; +#endif /* Channel configuration helpers */ bool al_is_channel_conf(ALLEGRO_CHANNEL_CONF conf) @@ -77,6 +80,9 @@ retVal = al_audio_init(ALLEGRO_AUDIO_DRIVER_ALSA); if (retVal == 0) return 0; + retVal = al_audio_init(ALLEGRO_AUDIO_DRIVER_DSOUND); + if (retVal == 0) + return 0; _al_kcm_driver = NULL; return 1; @@ -107,8 +113,17 @@ #endif case ALLEGRO_AUDIO_DRIVER_DSOUND: - _al_set_error(ALLEGRO_INVALID_PARAM, "DirectSound driver not yet implemented"); + #if defined(ALLEGRO_CFG_KCM_DSOUND) + if (_dsound_driver.open() == 0) { + fprintf(stderr, "Using DirectSound driver\n"); + _al_kcm_driver = &_dsound_driver; + return 0; + } return 1; + #else + _al_set_error(ALLEGRO_INVALID_PARAM, "DirectSound not available on this platform"); + return 1; + #endif default: _al_set_error(ALLEGRO_INVALID_PARAM, "Invalid audio driver"); Added: allegro/branches/4.9/addons/kcm_audio/dsound.cpp =================================================================== --- allegro/branches/4.9/addons/kcm_audio/dsound.cpp (rev 0) +++ allegro/branches/4.9/addons/kcm_audio/dsound.cpp 2008-08-24 17:15:10 UTC (rev 10527) @@ -0,0 +1,473 @@ +/* + * Based on DirectSound driver by KC/Milan + */ + + +#include <stdio.h> +#include <string.h> + + +#include <windows.h> +#include <dsound.h> + + +/* I'm not sure what library this is supposed to be in, but I couldn't find it yet */ +const IID GUID_NULL = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } }; + +#include "allegro5/allegro.h" +#include "allegro5/internal/aintern.h" +#include "allegro5/internal/aintern_thread.h" + +extern "C" { +#include "allegro5/internal/aintern_kcm_audio.h" + + +/* DirectSound vars */ +static IDirectSound8 *device; +static HRESULT hr; +static char ds_err_str[100]; +const int BUFSIZE = 16*1024; /* FIXME */ + + +static char *ds_get_error(HRESULT hr) +{ + switch (hr) { + case DSERR_ALLOCATED: + strcpy(ds_err_str, "DSERR_ALLOCATED"); + break; + case DSERR_BADFORMAT: + strcpy(ds_err_str, "DSERR_BADFORMAT"); + break; + case DSERR_BUFFERTOOSMALL: + strcpy(ds_err_str, "DSERR_BUFFERTOOSMALL"); + break; + case DSERR_CONTROLUNAVAIL: + strcpy(ds_err_str, "DSERR_CONTROLUNAVAIL"); + break; + case DSERR_DS8_REQUIRED: + strcpy(ds_err_str, "DSERR_DS8_REQUIRED"); + break; + case DSERR_INVALIDCALL: + strcpy(ds_err_str, "DSERR_INVALIDCALL"); + break; + case DSERR_INVALIDPARAM: + strcpy(ds_err_str, "DSERR_INVALIDPARAM"); + break; + case DSERR_NOAGGREGATION: + strcpy(ds_err_str, "DSERR_NOAGGREGATION"); + break; + case DSERR_OUTOFMEMORY: + strcpy(ds_err_str, "DSERR_OUTOFMEMORY"); + break; + case DSERR_UNINITIALIZED: + strcpy(ds_err_str, "DSERR_UNINITIALIZED"); + break; + case DSERR_UNSUPPORTED: + strcpy(ds_err_str, "DSERR_UNSUPPORTED"); + break; + } + + return ds_err_str; +} + + +/* Custom struct to hold voice information DirectSound needs */ +/* TODO: review */ +typedef struct ALLEGRO_DS_DATA { + int bits_per_sample; + int channels; + DSBUFFERDESC desc; + WAVEFORMATEX wave_fmt; + LPDIRECTSOUNDBUFFER ds_buffer; + LPDIRECTSOUNDBUFFER8 ds8_buffer; + bool stop_voice; + _AL_THREAD thread; +} ALLEGRO_DS_DATA; + + +/* Custom routine which runs in another thread to periodically check if DirectSound + wants more data for a stream */ +static void _dsound_update(_AL_THREAD* self, void* arg) +{ + ALLEGRO_VOICE *voice = (ALLEGRO_VOICE *)arg; + ALLEGRO_DS_DATA *ex_data = (ALLEGRO_DS_DATA*)voice->extra; + DWORD play_cursor = 0, write_cursor, saved_play_cursor = 0; + unsigned long samples; + int d; + LPVOID ptr1, ptr2; + DWORD block1_bytes, block2_bytes; + const void *data; + const int bytes_per_sample = ex_data->bits_per_sample / 8; + + printf("here\n"); + + /* Fill buffer */ + hr = ex_data->ds8_buffer->Lock(0, BUFSIZE, &ptr1, &block1_bytes, &ptr2, &block2_bytes, 0); + if (!FAILED(hr)) { + memcpy(ptr1, data, block1_bytes); + memcpy(ptr2, ((unsigned char *)data)+block1_bytes, block2_bytes); + ex_data->ds8_buffer->Unlock(ptr1, block1_bytes, ptr2, block2_bytes); + } + + ex_data->ds8_buffer->Play(0, 0, DSBPLAY_LOOPING); + + do { + ex_data->ds8_buffer->GetCurrentPosition(&play_cursor, &write_cursor); + if (play_cursor != saved_play_cursor) { + d = play_cursor - saved_play_cursor; + if (d < 0) + d += BUFSIZE; + samples = d / bytes_per_sample; + printf("here, d=%d samples=%d write_cursor=%d play_cursor=%d saved_play_cursor=%d\n", d, samples, write_cursor, play_cursor, saved_play_cursor); + data = _al_voice_update(voice, samples); + if (data == NULL) { + printf("data == NULL\n"); + /* FIXME: play silence */ + } + else { + hr = ex_data->ds8_buffer->Lock(saved_play_cursor, d, &ptr1, &block1_bytes, &ptr2, &block2_bytes, 0); + if (!FAILED(hr)) { + memcpy(ptr1, data, block1_bytes); + memcpy(ptr2, ((unsigned char *)data)+block1_bytes, block2_bytes); + ex_data->ds8_buffer->Unlock(ptr1, block1_bytes, ptr2, block2_bytes); + } + else { + printf("lock failed\n"); + } + } + saved_play_cursor = play_cursor; + } + al_rest(0.005); + } while (!ex_data->stop_voice); + + ex_data->ds8_buffer->Stop(); +} + + +/* The open method starts up the driver and should lock the device, using the + previously set paramters, or defaults. It shouldn't need to start sending + audio data to the device yet, however. */ +static int _dsound_open() +{ + fprintf(stderr, "Starting DirectSound...\n"); + + /* FIXME: Use default device until we have device enumeration */ + hr = DirectSoundCreate8(NULL, &device, NULL); + if (FAILED(hr)) { + fprintf(stderr, "DirectSoundCreate8 failed\n"); + return 1; + } + + /* FIXME: The window specified here is probably very wrong. NULL won't work either. */ + hr = device->SetCooperativeLevel(GetForegroundWindow(), DSSCL_PRIORITY); + if (FAILED(hr)) { + fprintf(stderr, "SetCooperativeLevel failed\n"); + return 1; + } + + return 0; +} + + +/* The close method should close the device, freeing any resources, and allow + other processes to use the device */ +static void _dsound_close() +{ + device->Release(); +} + + +/* The allocate_voice method should grab a voice from the system, and allocate + any data common to streaming and non-streaming sources. */ +static int _dsound_allocate_voice(ALLEGRO_VOICE *voice) +{ + ALLEGRO_DS_DATA *ex_data; + int bits_per_sample; + int channels; + + /* openal doesn't support very much! */ + switch (voice->depth) + { + case ALLEGRO_AUDIO_DEPTH_UINT8: + /* format supported */ + bits_per_sample = 8; + break; + case ALLEGRO_AUDIO_DEPTH_INT8: + fprintf(stderr, "DirectSound requires 8-bit data to be unsigned\n"); + return 1; + case ALLEGRO_AUDIO_DEPTH_UINT16: + fprintf(stderr, "DirectSound requires 16-bit data to be signed\n"); + return 1; + case ALLEGRO_AUDIO_DEPTH_INT16: + /* format supported */ + bits_per_sample = 16; + break; + case ALLEGRO_AUDIO_DEPTH_UINT24: + fprintf(stderr, "DirectSound does not support 24-bit data\n"); + return 1; + case ALLEGRO_AUDIO_DEPTH_INT24: + fprintf(stderr, "DirectSound does not support 24-bit data\n"); + return 1; + case ALLEGRO_AUDIO_DEPTH_FLOAT32: + fprintf(stderr, "DirectSound does not support 32-bit floating data\n"); + return 1; + default: + fprintf(stderr, "Cannot allocate unknown voice depth\n"); + return 1; + } + + switch (voice->chan_conf) { + case ALLEGRO_CHANNEL_CONF_1: + channels = 1; + break; + case ALLEGRO_CHANNEL_CONF_2: + channels = 2; + break; + default: + fprintf(stderr, "Unsupported number of channels\n"); + return 1; + } + + ex_data = (ALLEGRO_DS_DATA *)calloc(1, sizeof(*ex_data)); + if(!ex_data) + { + fprintf(stderr, "Could not allocate voice data memory\n"); + return 1; + } + + ex_data->bits_per_sample = bits_per_sample; + ex_data->channels = channels; + ex_data->stop_voice = 1; + + voice->extra = ex_data; + + printf("allocate voice ok\n"); + + return 0; +} + +/* The deallocate_voice method should free the resources for the given voice, + but still retain a hold on the device. The voice should be stopped and + unloaded by the time this is called */ +static void _dsound_deallocate_voice(ALLEGRO_VOICE *voice) +{ + free(voice->extra); + voice->extra = NULL; +} + +/* The load_voice method loads a sample into the driver's memory. The voice's + 'streaming' field will be set to false for these voices, and it's + 'buffer_size' field will be the total length in bytes of the sample data. + The voice's attached sample's looping mode should be honored, and loading + must fail if it cannot be. */ +static int _dsound_load_voice(ALLEGRO_VOICE *voice, const void *data) +{ + ALLEGRO_DS_DATA *ex_data = (ALLEGRO_DS_DATA *)voice->extra; + LPVOID ptr1, ptr2; + DWORD block1_bytes, block2_bytes; + + printf("here in load_voice\n"); + + ex_data->wave_fmt.wFormatTag = WAVE_FORMAT_PCM; + ex_data->wave_fmt.nChannels = ex_data->channels; + ex_data->wave_fmt.nSamplesPerSec = voice->frequency; + ex_data->wave_fmt.nBlockAlign = ex_data->channels * (ex_data->bits_per_sample/8); + ex_data->wave_fmt.nAvgBytesPerSec = ex_data->wave_fmt.nBlockAlign * voice->frequency; + ex_data->wave_fmt.wBitsPerSample = ex_data->bits_per_sample; + ex_data->wave_fmt.cbSize = 0; + + ex_data->desc.dwSize = sizeof(DSBUFFERDESC); + ex_data->desc.dwBufferBytes = voice->buffer_size; + ex_data->desc.dwReserved = 0; + ex_data->desc.lpwfxFormat = &ex_data->wave_fmt; + ex_data->desc.guid3DAlgorithm = DS3DALG_DEFAULT; + + hr = device->CreateSoundBuffer(&ex_data->desc, &ex_data->ds_buffer, NULL); + if (FAILED(hr)) { + free(ex_data); + return 1; + } + + ex_data->ds_buffer->QueryInterface(IID_IDirectSoundBuffer8, (void **)&ex_data->ds8_buffer); + + hr = ex_data->ds8_buffer->Lock(0, voice->buffer_size, &ptr1, &block1_bytes, &ptr2, &block2_bytes, + 0); + if (FAILED(hr)) + return 1; + + memcpy(ptr1, data, block1_bytes); + memcpy(ptr2, ((unsigned char *)data)+block1_bytes, block2_bytes); + + ex_data->ds8_buffer->Unlock(ptr1, block1_bytes, ptr2, block2_bytes); + + printf("after load_voice\n"); + + return 0; +} + +/* The unload_voice method unloads a sample previously loaded with load_voice. + This method should not be called on a streaming voice. */ +static void _dsound_unload_voice(ALLEGRO_VOICE *voice) +{ + ALLEGRO_DS_DATA *ex_data = (ALLEGRO_DS_DATA *)voice->extra; + ex_data->ds8_buffer->Release(); +} + + +/* The start_voice should, surprise, start the voice. For streaming voices, it + should start polling the device and call _al_voice_update for audio data. + For non-streaming voices, it should resume playing from the last set + position */ +static int _dsound_start_voice(ALLEGRO_VOICE *voice) +{ + ALLEGRO_DS_DATA *ex_data = (ALLEGRO_DS_DATA *)voice->extra; + + if (!voice->is_streaming) { + printf("playing voice\n"); + hr = ex_data->ds8_buffer->Play(0, 0, 0); + if (FAILED(hr)) + return 1; + printf("playing voice didn't fail\n"); + return 0; + } + + printf("streaming\n"); + + if(ex_data->stop_voice != 0) + { + ex_data->wave_fmt.wFormatTag = WAVE_FORMAT_PCM; + ex_data->wave_fmt.nChannels = ex_data->channels; + ex_data->wave_fmt.nSamplesPerSec = voice->frequency; + ex_data->wave_fmt.nBlockAlign = ex_data->channels * (ex_data->bits_per_sample/8); + ex_data->wave_fmt.nAvgBytesPerSec = ex_data->wave_fmt.nBlockAlign * voice->frequency; + ex_data->wave_fmt.wBitsPerSample = ex_data->bits_per_sample; + ex_data->wave_fmt.cbSize = 0; + + fprintf(stderr, "Channels=%d frequency=%d bits-per-sample=%d\n", ex_data->channels, voice->frequency, ex_data->bits_per_sample); + + ex_data->desc.dwSize = sizeof(DSBUFFERDESC); + ex_data->desc.dwFlags = DSBCAPS_LOCSOFTWARE; /* FIXME: software mixing for now */ + ex_data->desc.dwBufferBytes = BUFSIZE; + ex_data->desc.dwReserved = 0; + ex_data->desc.lpwfxFormat = &ex_data->wave_fmt; + ex_data->desc.guid3DAlgorithm = DS3DALG_DEFAULT; + + hr = device->CreateSoundBuffer(&ex_data->desc, &ex_data->ds_buffer, NULL); + if (FAILED(hr)) { + fprintf(stderr, "CreateSoundBuffer failed: %s\n", ds_get_error(hr)); + free(ex_data); + printf("returning\n"); + return 1; + } + + printf("here2\n"); + + ex_data->ds_buffer->QueryInterface(IID_IDirectSoundBuffer8, (void **)&ex_data->ds8_buffer); + + printf("here3\n"); + + ex_data->stop_voice = 0; + _al_thread_create(&ex_data->thread, _dsound_update, (void*) voice); + } + + return 0; +} + +/* The stop_voice method should stop playback. For non-streaming voices, it + should leave the data loaded, and reset the voice position to 0. */ +static int _dsound_stop_voice(ALLEGRO_VOICE* voice) +{ + ALLEGRO_DS_DATA *ex_data = (ALLEGRO_DS_DATA *)voice->extra; + + if(!ex_data->ds8_buffer) + { + fprintf(stderr, "Trying to stop empty voice buffer\n"); + return 1; + } + + /* if playing a sample */ + if(!voice->is_streaming) + { + ex_data->ds8_buffer->Stop(); + return 0; + } + + if(ex_data->stop_voice == 0) + { + ex_data->stop_voice = 1; + _al_thread_join(&ex_data->thread); + } + + ex_data->ds8_buffer->Release(); + ex_data->ds8_buffer = NULL; + + return 0; +} + +/* The voice_is_playing method should only be called on non-streaming sources, + and should return true if the voice is playing */ +static bool _dsound_voice_is_playing(const ALLEGRO_VOICE *voice) +{ + ALLEGRO_DS_DATA *ex_data = (ALLEGRO_DS_DATA *)voice->extra; + DWORD status; + + if(!ex_data) + return false; + + ex_data->ds8_buffer->GetStatus(&status); + + return (status & DSBSTATUS_PLAYING); +} + +/* The get_voice_position method should return the current sample position of + the voice (sample_pos = byte_pos / (depth/8) / channels). This should never + be called on a streaming voice. */ +static unsigned long _dsound_get_voice_position(const ALLEGRO_VOICE *voice) +{ + ALLEGRO_DS_DATA *ex_data = (ALLEGRO_DS_DATA *)voice->extra; + DWORD play_pos; + + hr = ex_data->ds8_buffer->GetCurrentPosition(&play_pos, NULL); + if (FAILED(hr)) + return 0; + + return play_pos; +} + +/* The set_voice_position method should set the voice's playback position, + given the value in samples. This should never be called on a streaming + voice. */ +static int _dsound_set_voice_position(ALLEGRO_VOICE *voice, unsigned long val) +{ + ALLEGRO_DS_DATA *ex_data = (ALLEGRO_DS_DATA *)voice->extra; + + hr = ex_data->ds8_buffer->SetCurrentPosition(val); + if (FAILED(hr)) + return 1; + + return 0; +} + +ALLEGRO_AUDIO_DRIVER _dsound_driver = { + "DirectSound", + + _dsound_open, + _dsound_close, + + _dsound_allocate_voice, + _dsound_deallocate_voice, + + _dsound_load_voice, + _dsound_unload_voice, + + _dsound_start_voice, + _dsound_stop_voice, + + _dsound_voice_is_playing, + + _dsound_get_voice_position, + _dsound_set_voice_position, +}; + +} /* End extern "C" */ + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tr...@us...> - 2008-08-24 20:43:57
|
Revision: 10532 http://alleg.svn.sourceforge.net/alleg/?rev=10532&view=rev Author: trentg Date: 2008-08-24 20:44:04 +0000 (Sun, 24 Aug 2008) Log Message: ----------- Do what the OpenGL driver does in this thread: http://www.allegro.cc/forums/thread/597483 Modified Paths: -------------- allegro/branches/4.9/addons/iio/CMakeLists.txt allegro/branches/4.9/cmake/FileList.cmake allegro/branches/4.9/examples/exnew_multiwin.c allegro/branches/4.9/examples/exnew_windows.c allegro/branches/4.9/src/win/d3d.h allegro/branches/4.9/src/win/d3d_bmp.cpp allegro/branches/4.9/src/win/d3d_disp.cpp Modified: allegro/branches/4.9/addons/iio/CMakeLists.txt =================================================================== --- allegro/branches/4.9/addons/iio/CMakeLists.txt 2008-08-24 19:19:06 UTC (rev 10531) +++ allegro/branches/4.9/addons/iio/CMakeLists.txt 2008-08-24 20:44:04 UTC (rev 10532) @@ -71,7 +71,7 @@ # Install header files. # -install(FILES ${FONT_INCLUDE_FILES} +install(FILES ${IIO_INCLUDE_FILES} DESTINATION include/allegro5 ) Modified: allegro/branches/4.9/cmake/FileList.cmake =================================================================== --- allegro/branches/4.9/cmake/FileList.cmake 2008-08-24 19:19:06 UTC (rev 10531) +++ allegro/branches/4.9/cmake/FileList.cmake 2008-08-24 20:44:04 UTC (rev 10532) @@ -299,6 +299,7 @@ include/allegro5/altime.h include/allegro5/base.h include/allegro5/bitmap_new.h + include/allegro5/color.h include/allegro5/color_new.h include/allegro5/debug.h include/allegro5/display_new.h @@ -315,6 +316,7 @@ include/allegro5/a5_opengl.h include/allegro5/system.h include/allegro5/system_new.h + include/allegro5/threads.h include/allegro5/timer.h include/allegro5/unicode.h ) Modified: allegro/branches/4.9/examples/exnew_multiwin.c =================================================================== --- allegro/branches/4.9/examples/exnew_multiwin.c 2008-08-24 19:19:06 UTC (rev 10531) +++ allegro/branches/4.9/examples/exnew_multiwin.c 2008-08-24 20:44:04 UTC (rev 10532) @@ -15,6 +15,7 @@ al_init(); al_install_keyboard(); + al_install_mouse(); iio_init(); events = al_create_event_queue(); @@ -23,8 +24,11 @@ /* Create two windows. */ display[0] = al_create_display(W, H); + al_show_mouse_cursor(); display[1] = al_create_display(W, H); + al_show_mouse_cursor(); + /* This is only needed since we want to receive resize events. */ al_register_event_source(events, (ALLEGRO_EVENT_SOURCE *)display[0]); al_register_event_source(events, (ALLEGRO_EVENT_SOURCE *)display[1]); Modified: allegro/branches/4.9/examples/exnew_windows.c =================================================================== --- allegro/branches/4.9/examples/exnew_windows.c 2008-08-24 19:19:06 UTC (rev 10531) +++ allegro/branches/4.9/examples/exnew_windows.c 2008-08-24 20:44:04 UTC (rev 10532) @@ -39,12 +39,12 @@ al_set_new_window_position(x, y); displays[0] = al_create_display(W, H); + al_show_mouse_cursor(); x *= 2; al_set_new_window_position(x, y); displays[1] = al_create_display(W, H); - al_show_mouse_cursor(); myfont = a5font_load_font("fixed_font.tga", 0); Modified: allegro/branches/4.9/src/win/d3d.h =================================================================== --- allegro/branches/4.9/src/win/d3d.h 2008-08-24 19:19:06 UTC (rev 10531) +++ allegro/branches/4.9/src/win/d3d.h 2008-08-24 20:44:04 UTC (rev 10532) @@ -14,7 +14,7 @@ /* Flexible vertex formats */ #define D3DFVF_COLORED_VERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE) -#define D3DFVF_TL_VERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1) +#define D3DFVF_TL_VERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1) typedef struct ALLEGRO_SYSTEM_D3D ALLEGRO_SYSTEM_D3D; @@ -93,7 +93,8 @@ float x; /* x position */ float y; /* y position */ float z; /* z position */ - D3DCOLOR color; /* color */ + D3DCOLOR diffuse; /* diffuse color */ + D3DCOLOR specular; /* specular color */ float tu; /* texture coordinate */ float tv; /* texture coordinate */ } D3D_TL_VERTEX; Modified: allegro/branches/4.9/src/win/d3d_bmp.cpp =================================================================== --- allegro/branches/4.9/src/win/d3d_bmp.cpp 2008-08-24 19:19:06 UTC (rev 10531) +++ allegro/branches/4.9/src/win/d3d_bmp.cpp 2008-08-24 20:44:04 UTC (rev 10532) @@ -179,28 +179,32 @@ vertices[0].x = dx; vertices[0].y = dy; vertices[0].z = z; - vertices[0].color = color; + vertices[0].diffuse = color; + vertices[0].specular = color; vertices[0].tu = tu_start; vertices[0].tv = tv_start; vertices[1].x = right; vertices[1].y = dy; vertices[1].z = z; - vertices[1].color = color; + vertices[1].diffuse = color; + vertices[1].specular = color; vertices[1].tu = tu_end; vertices[1].tv = tv_start; vertices[2].x = right; vertices[2].y = bottom; vertices[2].z = z; - vertices[2].color = color; + vertices[2].diffuse = color; + vertices[2].specular = color; vertices[2].tu = tu_end; vertices[2].tv = tv_end; vertices[3].x = dx; vertices[3].y = bottom; vertices[3].z = z; - vertices[3].color = color; + vertices[3].diffuse = color; + vertices[3].specular = color; vertices[3].tu = tu_start; vertices[3].tv = tv_end; Modified: allegro/branches/4.9/src/win/d3d_disp.cpp =================================================================== --- allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-24 19:19:06 UTC (rev 10531) +++ allegro/branches/4.9/src/win/d3d_disp.cpp 2008-08-24 20:44:04 UTC (rev 10532) @@ -187,11 +187,13 @@ return -1; } -static int d3d_al_color_to_d3d(ALLEGRO_COLOR *color) +static int d3d_al_color_to_d3d(ALLEGRO_COLOR color) { unsigned char r, g, b, a; - al_unmap_rgba(*color, &r, &g, &b, &a); - return D3DCOLOR_ARGB(a, r, g, b); + int result; + al_unmap_rgba(color, &r, &g, &b, &a); + result = D3DCOLOR_ARGB(a, r, g, b); + return result; } static bool d3d_format_is_valid(int format) @@ -1369,8 +1371,9 @@ void _al_d3d_set_blender(ALLEGRO_DISPLAY_D3D *d3d_display) { int src, dst; + ALLEGRO_COLOR color; - al_get_blender(&src, &dst, NULL); + al_get_blender(&src, &dst, &color); src = d3d_al_blender_to_d3d(src); dst = d3d_al_blender_to_d3d(dst); @@ -1379,6 +1382,10 @@ TRACE("Failed to set source blender"); if (d3d_display->device->SetRenderState(D3DRS_DESTBLEND, dst) != D3D_OK) TRACE("Failed to set dest blender"); + if (d3d_display->device->SetRenderState(D3DRS_TEXTUREFACTOR, d3d_al_color_to_d3d(color)) != D3D_OK) + TRACE("SetRenderState BLENDFACTOR failed.\n"); + + d3d_display->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_BLENDFACTORALPHA); } @@ -1398,7 +1405,7 @@ b*bc->b, a*bc->a); - return d3d_al_color_to_d3d(&result); + return d3d_al_color_to_d3d(result); } /* Dummy implementation of line. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |