Endianness

So in my game, which I’m writing with xcode and compiling a universal
binary of, I have the issue that the colors end up all wrong on a PPC.
The code I’m using to take in image data is just IMG_Load, which I
would expect to work just fine on a PPC (and has before). Anyways,
there is only one function where I do this. It may be a bit long:

void RenderClass::initTextureAndRectangle(GLuint& texture, Rectangle&
image_rect, char* image_path)
{
//set up a surface to use to create our texture, also set up that
rectangle
SDL_Surface* tempSur;
SDL_Surface* sur;

char full_path[1024];
sprintf(full_path, "%s%s", basepath, image_path); //basepath is  

#ifdef’d and #define’d depending on the OS
tempSur = IMG_Load(full_path); //this is the line that actually
takes in data…
sur = SDL_DisplayFormatAlpha(tempSur);
SDL_FreeSurface(tempSur);

image_rect.x = 0;
image_rect.y = 0;
image_rect.w = sur->w;
image_rect.h = sur->h;

//use that texture to create out texture
GLenum texture_format;
GLint  nOfColors;

// get the number of channels in the SDL surface
nOfColors = sur->format->BytesPerPixel;
if (nOfColors == 4)     // contains an alpha channel
{
	if (sur->format->Rmask == 0x000000ff)
		texture_format = GL_RGBA;
	else
		texture_format = GL_BGRA;
}
else if (nOfColors == 3)     // no alpha channel
{
	if (sur->format->Rmask == 0x000000ff)
		texture_format = GL_RGB;
	else
		texture_format = GL_BGR;
}


//create the open gl texture
glEnable( GL_TEXTURE_2D );

glGenTextures( 1, &texture );
// Bind the texture object
glBindTexture( GL_TEXTURE_2D, texture );
// Set the texture's stretching properties
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
// Edit the texture object's image data using the information  

SDL_Surface gives us
glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, sur->w, sur->h, 0,
texture_format, GL_UNSIGNED_BYTE, sur->pixels );

glDisable( GL_TEXTURE_2D );

SDL_FreeSurface(sur);

return;

}

Is that code not-endian independent? I haven’t tried, but if I compile
this on a PPC with xcode 2.5, I’m pretty sure it will work.

Thanks,
saturn

So in my game, which I’m writing with xcode and compiling a universal
binary of, I have the issue that the colors end up all wrong on a PPC.
The code I’m using to take in image data is just IMG_Load, which I would
expect to work just fine on a PPC (and has before). Anyways, there is
only one function where I do this. It may be a bit long:

// get the number of channels in the SDL surface
nOfColors = sur->format->BytesPerPixel;
if (nOfColors == 4) // contains an alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else
texture_format = GL_BGRA;
}
else if (nOfColors == 3) // no alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else
texture_format = GL_BGR;
}

If these Rmask checks are intended as an endianness solution, consider carefully that GL_BGRA is not the opposite of GL_RGBA, it is the opposite of GL_ARGB (and GL_ABGR is the opposite of GL_RGBA).

You may have more interest in using GL_UNSIGNED_INT_8_8_8_8_REV and GL_UNSIGNED_INT_8_8_8_8 as the type parameter to glTexImage2D, these indicate byte order without the less common ARGB and ABGR
formats ever being used.

Alternatively you can blit to a surface with your own chosen component order, for example R G B A, assigned using this code:
union
{
unsigned int i[4];
unsigned char b[16];
}
u;
memset(&u, 0, sizeof(u));
u.b[0] = 0xff;
u.b[5] = 0xff;
u.b[10] = 0xff;
u.b[15] = 0xff;

Then pass u.i[0] through u.i[3] as the R, G, B and A masks when creating the SDL surface, this should produce a byte-oriented endian order regardless of the CPU in this surface, so any blit to it from
another surface will be correctly converted to GL_RGBA, GL_UNSIGNED_BYTE.

These are just ideas, and I could be wrong.On 06/27/2010 06:28 AM, Nikola Whallon wrote:


LordHavoc
Author of DarkPlaces Quake1 engine - http://icculus.org/twilight/darkplaces
Co-designer of Nexuiz - http://alientrap.org/nexuiz
"War does not prove who is right, it proves who is left." - Unknown
"Any sufficiently advanced technology is indistinguishable from a rigged demo." - James Klass
"A game is a series of interesting choices." - Sid Meier

i had a similar issue and resolved with a surface conversion
http://www.idevgames.com/forum/showpost.php?p=85864&postcount=7
i remember i had to play a little with amask, rmask, gmaks and bmaks
and so i ifdeffed their value for ppc (instead of hardcoding them like
in the example)
VittorioOn Sun, Jun 27, 2010 at 3:28 PM, Nikola Whallon <6.saturn.6 at gmail.com> wrote:

So in my game, which I’m writing with xcode and compiling a universal binary
of, I have the issue that the colors end up all wrong on a PPC. The code I’m
using to take in image data is just IMG_Load, which I would expect to work
just fine on a PPC (and has before). Anyways, there is only one function
where I do this. It may be a bit long:

void RenderClass::initTextureAndRectangle(GLuint& texture, Rectangle&
image_rect, char* image_path)
{
//set up a surface to use to create our texture, also set up that rectangle
SDL_Surface* tempSur;
SDL_Surface* sur;

char full_path[1024];
sprintf(full_path, “%s%s”, basepath, image_path); //basepath is #ifdef’d and
#define’d depending on the OS
tempSur = IMG_Load(full_path); ? ?//this is the line that actually takes in
data…
sur = SDL_DisplayFormatAlpha(tempSur);
SDL_FreeSurface(tempSur);

image_rect.x = 0;
image_rect.y = 0;
image_rect.w = sur->w;
image_rect.h = sur->h;

//use that texture to create out texture
GLenum texture_format;
GLint? nOfColors;

// get the number of channels in the SDL surface
nOfColors = sur->format->BytesPerPixel;
if (nOfColors == 4) ? ? // contains an alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else
texture_format = GL_BGRA;
}
else if (nOfColors == 3) ? ? // no alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else
texture_format = GL_BGR;
}

//create the open gl texture
glEnable( GL_TEXTURE_2D );

glGenTextures( 1, &texture );
// Bind the texture object
glBindTexture( GL_TEXTURE_2D, texture );
// Set the texture’s stretching properties
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
// Edit the texture object’s image data using the information SDL_Surface
gives us
glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, sur->w, sur->h, 0,
texture_format, GL_UNSIGNED_BYTE, sur->pixels );

glDisable( GL_TEXTURE_2D );

SDL_FreeSurface(sur);

return;
}

Is that code not-endian independent? I haven’t tried, but if I compile this
on a PPC with xcode 2.5, I’m pretty sure it will work.

Thanks,
saturn


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

That seems like it may work, but what is the pixel format for ppc as
opposed to x86? Isn’t that what the code checking for the Rmask below
is doing? (If the Rmask, for example, is 0x000whatever, then the pixel
format is RGB, else its BGR), why would that check work differently on
a PPC?On Mon, Jun 28, 2010 at 3:01 AM, Vittorio G. <vitto.giova at yahoo.it> wrote:

i had a similar issue and resolved with a surface conversion
http://www.idevgames.com/forum/showpost.php?p=85864&postcount=7
i remember i had to play a little with amask, rmask, gmaks and bmaks
and so i ifdeffed their value for ppc (instead of hardcoding them like
in the example)
Vittorio

On Sun, Jun 27, 2010 at 3:28 PM, Nikola Whallon <6.saturn.6 at gmail.com> wrote:

So in my game, which I’m writing with xcode and compiling a universal binary
of, I have the issue that the colors end up all wrong on a PPC. The code I’m
using to take in image data is just IMG_Load, which I would expect to work
just fine on a PPC (and has before). Anyways, there is only one function
where I do this. It may be a bit long:

void RenderClass::initTextureAndRectangle(GLuint& texture, Rectangle&
image_rect, char* image_path)
{
//set up a surface to use to create our texture, also set up that rectangle
SDL_Surface* tempSur;
SDL_Surface* sur;

char full_path[1024];
sprintf(full_path, “%s%s”, basepath, image_path); //basepath is #ifdef’d and
#define’d depending on the OS
tempSur = IMG_Load(full_path); //this is the line that actually takes in
data…
sur = SDL_DisplayFormatAlpha(tempSur);
SDL_FreeSurface(tempSur);

image_rect.x = 0;
image_rect.y = 0;
image_rect.w = sur->w;
image_rect.h = sur->h;

//use that texture to create out texture
GLenum texture_format;
GLint nOfColors;

// get the number of channels in the SDL surface
nOfColors = sur->format->BytesPerPixel;
if (nOfColors == 4) // contains an alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else
texture_format = GL_BGRA;
}
else if (nOfColors == 3) // no alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else
texture_format = GL_BGR;
}

//create the open gl texture
glEnable( GL_TEXTURE_2D );

glGenTextures( 1, &texture );
// Bind the texture object
glBindTexture( GL_TEXTURE_2D, texture );
// Set the texture’s stretching properties
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
// Edit the texture object’s image data using the information SDL_Surface
gives us
glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, sur->w, sur->h, 0,
texture_format, GL_UNSIGNED_BYTE, sur->pixels );

glDisable( GL_TEXTURE_2D );

SDL_FreeSurface(sur);

return;
}

Is that code not-endian independent? I haven’t tried, but if I compile this
on a PPC with xcode 2.5, I’m pretty sure it will work.

Thanks,
saturn


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

it was some time ago so my memory could be wrong, so don’t take it for
granted (and correct me if i’m completely wrong)
on x86 image format should be ARGB, while on big endiand systems should be ABGR.
for backward compatibility on macosx images are still stored with abgr
and the correct ordering is left at the loader stage
VittorioOn Wed, Jun 30, 2010 at 6:49 PM, Alokin Nollahwe <alokin.nollahwe at gmail.com> wrote:

That seems like it may work, but what is the pixel format for ppc as
opposed to x86? Isn’t that what the code checking for the Rmask below
is doing? (If the Rmask, for example, is 0x000whatever, then the pixel
format is RGB, else its BGR), why would that check work differently on
a PPC?

On Mon, Jun 28, 2010 at 3:01 AM, Vittorio G. <vitto.giova at yahoo.it> wrote:

i had a similar issue and resolved with a surface conversion
http://www.idevgames.com/forum/showpost.php?p=85864&postcount=7
i remember i had to play a little with amask, rmask, gmaks and bmaks
and so i ifdeffed their value for ppc (instead of hardcoding them like
in the example)
Vittorio

On Sun, Jun 27, 2010 at 3:28 PM, Nikola Whallon <6.saturn.6 at gmail.com> wrote:

So in my game, which I’m writing with xcode and compiling a universal binary
of, I have the issue that the colors end up all wrong on a PPC. The code I’m
using to take in image data is just IMG_Load, which I would expect to work
just fine on a PPC (and has before). Anyways, there is only one function
where I do this. It may be a bit long:

void RenderClass::initTextureAndRectangle(GLuint& texture, Rectangle&
image_rect, char* image_path)
{
//set up a surface to use to create our texture, also set up that rectangle
SDL_Surface* tempSur;
SDL_Surface* sur;

char full_path[1024];
sprintf(full_path, “%s%s”, basepath, image_path); //basepath is #ifdef’d and
#define’d depending on the OS
tempSur = IMG_Load(full_path); ? ?//this is the line that actually takes in
data…
sur = SDL_DisplayFormatAlpha(tempSur);
SDL_FreeSurface(tempSur);

image_rect.x = 0;
image_rect.y = 0;
image_rect.w = sur->w;
image_rect.h = sur->h;

//use that texture to create out texture
GLenum texture_format;
GLint ?nOfColors;

// get the number of channels in the SDL surface
nOfColors = sur->format->BytesPerPixel;
if (nOfColors == 4) ? ? // contains an alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else
texture_format = GL_BGRA;
}
else if (nOfColors == 3) ? ? // no alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else
texture_format = GL_BGR;
}

//create the open gl texture
glEnable( GL_TEXTURE_2D );

glGenTextures( 1, &texture );
// Bind the texture object
glBindTexture( GL_TEXTURE_2D, texture );
// Set the texture’s stretching properties
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
// Edit the texture object’s image data using the information SDL_Surface
gives us
glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, sur->w, sur->h, 0,
texture_format, GL_UNSIGNED_BYTE, sur->pixels );

glDisable( GL_TEXTURE_2D );

SDL_FreeSurface(sur);

return;
}

Is that code not-endian independent? I haven’t tried, but if I compile this
on a PPC with xcode 2.5, I’m pretty sure it will work.

Thanks,
saturn


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

I think you mean ARGB and BGRA, RGBA and ABGR certainly do exist as well, but I think most hardware expects ARGB/BGRA (technically the byte order is BGRA), since most hardware is designed for PC…

That said I have little experience with other platforms (PS3 seems to like ABGR as I recall).On 07/03/2010 06:38 AM, Vittorio G. wrote:

it was some time ago so my memory could be wrong, so don’t take it for
granted (and correct me if i’m completely wrong)
on x86 image format should be ARGB, while on big endiand systems should be ABGR.
for backward compatibility on macosx images are still stored with abgr
and the correct ordering is left at the loader stage
Vittorio

On Wed, Jun 30, 2010 at 6:49 PM, Alokin Nollahwe <alokin.nollahwe at gmail.com> wrote:

That seems like it may work, but what is the pixel format for ppc as
opposed to x86? Isn’t that what the code checking for the Rmask below
is doing? (If the Rmask, for example, is 0x000whatever, then the pixel
format is RGB, else its BGR), why would that check work differently on
a PPC?

On Mon, Jun 28, 2010 at 3:01 AM, Vittorio G. <vitto.giova at yahoo.it> wrote:

i had a similar issue and resolved with a surface conversion
http://www.idevgames.com/forum/showpost.php?p=85864&postcount=7
i remember i had to play a little with amask, rmask, gmaks and bmaks
and so i ifdeffed their value for ppc (instead of hardcoding them like
in the example)
Vittorio

On Sun, Jun 27, 2010 at 3:28 PM, Nikola Whallon <6.saturn.6 at gmail.com> wrote:

So in my game, which I’m writing with xcode and compiling a universal binary
of, I have the issue that the colors end up all wrong on a PPC. The code I’m
using to take in image data is just IMG_Load, which I would expect to work
just fine on a PPC (and has before). Anyways, there is only one function
where I do this. It may be a bit long:

void RenderClass::initTextureAndRectangle(GLuint& texture, Rectangle&
image_rect, char* image_path)
{
//set up a surface to use to create our texture, also set up that rectangle
SDL_Surface* tempSur;
SDL_Surface* sur;

char full_path[1024];
sprintf(full_path, “%s%s”, basepath, image_path); //basepath is #ifdef’d and
#define’d depending on the OS
tempSur = IMG_Load(full_path); //this is the line that actually takes in
data…
sur = SDL_DisplayFormatAlpha(tempSur);
SDL_FreeSurface(tempSur);

image_rect.x = 0;
image_rect.y = 0;
image_rect.w = sur->w;
image_rect.h = sur->h;

//use that texture to create out texture
GLenum texture_format;
GLint nOfColors;

// get the number of channels in the SDL surface
nOfColors = sur->format->BytesPerPixel;
if (nOfColors == 4) // contains an alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else
texture_format = GL_BGRA;
}
else if (nOfColors == 3) // no alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else
texture_format = GL_BGR;
}

//create the open gl texture
glEnable( GL_TEXTURE_2D );

glGenTextures( 1, &texture );
// Bind the texture object
glBindTexture( GL_TEXTURE_2D, texture );
// Set the texture’s stretching properties
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
// Edit the texture object’s image data using the information SDL_Surface
gives us
glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, sur->w, sur->h, 0,
texture_format, GL_UNSIGNED_BYTE, sur->pixels );

glDisable( GL_TEXTURE_2D );

SDL_FreeSurface(sur);

return;
}

Is that code not-endian independent? I haven’t tried, but if I compile this
on a PPC with xcode 2.5, I’m pretty sure it will work.

Thanks,
saturn


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


LordHavoc
Author of DarkPlaces Quake1 engine - http://icculus.org/twilight/darkplaces
Co-designer of Nexuiz - http://alientrap.org/nexuiz
"War does not prove who is right, it proves who is left." - Unknown
"Any sufficiently advanced technology is indistinguishable from a rigged demo." - James Klass
"A game is a series of interesting choices." - Sid Meier

PS3 uses PPC architecture correct? It’d make sense that it’s opposite then.

So if I use RGBA on an x86, I should use ABGR on a ppc? (because they input
data in opposite orders…)On Sun, Jul 4, 2010 at 7:45 PM, Forest Hale wrote:

I think you mean ARGB and BGRA, RGBA and ABGR certainly do exist as well,
but I think most hardware expects ARGB/BGRA (technically the byte order is
BGRA), since most hardware is designed for PC…

That said I have little experience with other platforms (PS3 seems to like
ABGR as I recall).

On 07/03/2010 06:38 AM, Vittorio G. wrote:

it was some time ago so my memory could be wrong, so don’t take it for
granted (and correct me if i’m completely wrong)
on x86 image format should be ARGB, while on big endiand systems should
be ABGR.
for backward compatibility on macosx images are still stored with abgr
and the correct ordering is left at the loader stage
Vittorio

On Wed, Jun 30, 2010 at 6:49 PM, Alokin Nollahwe <alokin.nollahwe at gmail.com> wrote:

That seems like it may work, but what is the pixel format for ppc as
opposed to x86? Isn’t that what the code checking for the Rmask below
is doing? (If the Rmask, for example, is 0x000whatever, then the pixel
format is RGB, else its BGR), why would that check work differently on
a PPC?

On Mon, Jun 28, 2010 at 3:01 AM, Vittorio G. <vitto.giova at yahoo.it> wrote:

i had a similar issue and resolved with a surface conversion
http://www.idevgames.com/forum/showpost.php?p=85864&postcount=7
i remember i had to play a little with amask, rmask, gmaks and bmaks
and so i ifdeffed their value for ppc (instead of hardcoding them like
in the example)
Vittorio

On Sun, Jun 27, 2010 at 3:28 PM, Nikola Whallon <@Nikola_Whallon> wrote:

So in my game, which I’m writing with xcode and compiling a universal
binary

of, I have the issue that the colors end up all wrong on a PPC. The
code I’m

using to take in image data is just IMG_Load, which I would expect to
work

just fine on a PPC (and has before). Anyways, there is only one
function

where I do this. It may be a bit long:

void RenderClass::initTextureAndRectangle(GLuint& texture, Rectangle&
image_rect, char* image_path)
{
//set up a surface to use to create our texture, also set up that
rectangle

SDL_Surface* tempSur;
SDL_Surface* sur;

char full_path[1024];
sprintf(full_path, “%s%s”, basepath, image_path); //basepath is
#ifdef’d and

#define’d depending on the OS
tempSur = IMG_Load(full_path); //this is the line that actually
takes in

data…
sur = SDL_DisplayFormatAlpha(tempSur);
SDL_FreeSurface(tempSur);

image_rect.x = 0;
image_rect.y = 0;
image_rect.w = sur->w;
image_rect.h = sur->h;

//use that texture to create out texture
GLenum texture_format;
GLint nOfColors;

// get the number of channels in the SDL surface
nOfColors = sur->format->BytesPerPixel;
if (nOfColors == 4) // contains an alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else
texture_format = GL_BGRA;
}
else if (nOfColors == 3) // no alpha channel
{
if (sur->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else
texture_format = GL_BGR;
}

//create the open gl texture
glEnable( GL_TEXTURE_2D );

glGenTextures( 1, &texture );
// Bind the texture object
glBindTexture( GL_TEXTURE_2D, texture );
// Set the texture’s stretching properties
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
// Edit the texture object’s image data using the information
SDL_Surface

gives us
glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, sur->w, sur->h, 0,
texture_format, GL_UNSIGNED_BYTE, sur->pixels );

glDisable( GL_TEXTURE_2D );

SDL_FreeSurface(sur);

return;
}

Is that code not-endian independent? I haven’t tried, but if I compile
this

on a PPC with xcode 2.5, I’m pretty sure it will work.

Thanks,
saturn


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org


LordHavoc
Author of DarkPlaces Quake1 engine -
http://icculus.org/twilight/darkplaces
Co-designer of Nexuiz - http://alientrap.org/nexuiz
"War does not prove who is right, it proves who is left." - Unknown
"Any sufficiently advanced technology is indistinguishable from a rigged
demo." - James Klass
"A game is a series of interesting choices." - Sid Meier


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org