/* * texture.c * * FUNCTION: * texture mapping hack * * HISTORY: * Created by Linas Vepstas April 1994 */ #include #include #include "texture.h" Texture * current_texture = 0x0; Texture * planet_texture = 0x0; Texture * check_texture = 0x0; Texture * barberpole_texture = 0x0; Texture * wild_tooth_texture = 0x0; /* ======================================================= */ #define TEXTURE_SIZE 256 Texture * create_planet_texture (void) { int i, j; Texture * tex; unsigned char * pixmap; pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char)); for (i=0; i< TEXTURE_SIZE; i++) { for (j=0; j< TEXTURE_SIZE; j++) { int mi = i - TEXTURE_SIZE/2; int mj = j - TEXTURE_SIZE/2; pixmap [3*TEXTURE_SIZE*i + 3*j] = 100*mi*mi + 40*mj*mj >> 8; pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = (10*mi*mi + 4*mj*mj) ; pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = (1000*mi*mi + 400*mj*mj) >> 16 ; } } tex = (Texture *) malloc (sizeof (Texture)); tex -> size = TEXTURE_SIZE; tex -> pixmap = pixmap; return tex; } /* ======================================================= */ Texture * create_check_texture (void) { int i, j; Texture * tex; unsigned char * pixmap; pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char)); for (i=0; i< TEXTURE_SIZE; i++) { for (j=0; j< TEXTURE_SIZE; j++) { pixmap [3*TEXTURE_SIZE*i + 3*j] = 255 * ( (((i)/32) %2) == (((j)/32) %2)); pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = 255 * ( (((i)/32) %2) == (((j)/32) %2)); pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = 255 * ( (((i)/32) %2) == (((j)/32) %2)); } } tex = (Texture *) malloc (sizeof (Texture)); tex -> size = TEXTURE_SIZE; tex -> pixmap = pixmap; return tex; } /* ======================================================= */ Texture * create_barberpole_texture (void) { int i, j; Texture * tex; unsigned char * pixmap; pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char)); for (i=0; i< TEXTURE_SIZE; i++) { for (j=0; j< TEXTURE_SIZE; j++) { pixmap [3*TEXTURE_SIZE*i + 3*j] = 255 * (((i+j)/32) %2); pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = 255 * (((i+j)/32) %2); pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = 255 * (((i+j)/32) %2); } } tex = (Texture *) malloc (sizeof (Texture)); tex -> size = TEXTURE_SIZE; tex -> pixmap = pixmap; return tex; } /* ======================================================= */ Texture * create_wild_tooth_texture (void) { int i, j; Texture * tex; unsigned char * pixmap; pixmap = (unsigned char *) malloc (TEXTURE_SIZE*TEXTURE_SIZE*3*sizeof (unsigned char)); for (i=0; i< TEXTURE_SIZE; i++) { for (j=0; j< TEXTURE_SIZE; j++) { pixmap [3*TEXTURE_SIZE*i + 3*j] = 255 * ( (((i+j)/32) %2) == (((i-j)/32) %2)); pixmap [3*TEXTURE_SIZE*i + 3*j + 1] = 255 * ( (((i+j)/32) %2) == (((i-j)/32) %2)); pixmap [3*TEXTURE_SIZE*i + 3*j + 2] = 255 * ( (((i+j)/32) %2) == (((i-j)/32) %2)); } } tex = (Texture *) malloc (sizeof (Texture)); tex -> size = TEXTURE_SIZE; tex -> pixmap = pixmap; return tex; } /* ======================================================= */ void setup_textures (void) { planet_texture = create_planet_texture (); check_texture = create_check_texture (); barberpole_texture = create_barberpole_texture (); wild_tooth_texture = create_wild_tooth_texture (); current_texture = wild_tooth_texture; current_texture = check_texture; } /* ================== END OF FILE ========================= */