static void init(void) { GLint i, j; GLfloat f; glIndexFuncSGIptr = (void *) wglGetProcAddress("glIndexFuncSGI"); if (!glIndexFuncSGIptr) { printf("Note: renderer doesn't support GL_SGI_index_func extension.\n"); } setPaletteIndex( 10, 0.0F, 0.5F, 0.5F ); glClearIndex( 10.0f ); for (i=11;i<240;i++) { GLfloat t = (GLfloat) (i-11) / (GLfloat) (240-11); setPaletteIndex( i, t, t, 0.0F ); } Image = (GLubyte *) malloc( 32*32*sizeof(GLubyte) ); for (i = 0; i < 32; i++) for (j = 0; j < 32; j++) { double d; d = sqrt((i - 16) * (i - 16) + (j - 16) * (j - 16)) / 23.0; Image[(32 * i) + j] = 11 + (int)((240 - 11) * d); } #ifdef GL_SGI_index_func if (glIndexFuncSGIptr) { /* Sanity checks */ glEnable( GL_INDEX_TEST_SGI ); (*glIndexFuncSGIptr)( GL_GEQUAL, 10.0F ); glPushAttrib( GL_COLOR_BUFFER_BIT ); glDisable( GL_INDEX_TEST_SGI ); (*glIndexFuncSGIptr)( GL_LESS, 99.0F ); glPopAttrib(); assert( glIsEnabled(GL_INDEX_TEST_SGI) ); glGetIntegerv( GL_INDEX_TEST_FUNC_SGI, &i ); assert( i==GL_GEQUAL ); glGetFloatv( GL_INDEX_TEST_REF_SGI, &f ); assert( f==10.0f ); } #endif checkError("after init"); }
void init_cmap(void) { int ii, jj, color; GLfloat r0, g0, b0, r1, g1, b1; /* Set up color map */ color = 10; memset(pal,0,sizeof(pal)); /* Sky colors */ sky_base = color; r0 = SKY_R; r1 = 1.0f; g0 = SKY_G; g1 = 1.0f; b0 = SKY_B; b1 = 1.0f; for (ii = 0; ii < SKY_COLORS; ii++) { GLfloat p, r, g, b; p = (GLfloat) ii / (SKY_COLORS-1); r = r0 + p * (r1 - r0); g = g0 + p * (g1 - g0); b = b0 + p * (b1 - b0); for (jj = 0; jj < FOG_LEVELS; jj++) { GLfloat fp, fr, fg, fb; fp = (FOG_LEVELS > 1) ? (GLfloat) jj / (FOG_LEVELS-1) : 0.0f; fr = r + fp * (fog_params[0] - r); fg = g + fp * (fog_params[1] - g); fb = b + fp * (fog_params[2] - b); setPaletteIndex(sky_base + (ii*FOG_LEVELS) + jj, fr, fg, fb); } } color += (SKY_COLORS * FOG_LEVELS); /* Terrain colors */ terr_base = color; r0 = TERR_DARK_R; r1 = TERR_LITE_R; g0 = TERR_DARK_G; g1 = TERR_LITE_G; b0 = TERR_DARK_B; b1 = TERR_LITE_B; for (ii = 0; ii < TERR_COLORS; ii++) { GLfloat p, r, g, b; p = (GLfloat) ii / (TERR_COLORS-1); r = r0 + p * (r1 - r0); g = g0 + p * (g1 - g0); b = b0 + p * (b1 - b0); for (jj = 0; jj < FOG_LEVELS; jj++) { GLfloat fp, fr, fg, fb; fp = (FOG_LEVELS > 1) ? (GLfloat) jj / (FOG_LEVELS-1) : 0.0f; fr = r + fp * (fog_params[0] - r); fg = g + fp * (fog_params[1] - g); fb = b + fp * (fog_params[2] - b); setPaletteIndex(terr_base + (ii*FOG_LEVELS) + jj, fr, fg, fb); } } color += (TERR_COLORS * FOG_LEVELS); /* Plane colors */ plane_colors[0] = color; plane_colors[1] = color + (PLANE_COLORS/2); plane_colors[2] = color + (PLANE_COLORS-1); r0 = 0.4; r1 = 0.8; g0 = 0.4; g1 = 0.8; b0 = 0.1; b1 = 0.1; for (ii = 0; ii < PLANE_COLORS; ii++) { GLfloat p, r, g, b; p = (GLfloat) ii / (PLANE_COLORS); r = r0 + p * (r1 - r0); g = g0 + p * (g1 - g0); b = b0 + p * (b1 - b0); setPaletteIndex(plane_colors[0] + ii, r, g, b); } color += PLANE_COLORS; #if 0 GM_setPalette(pal,256,0); GM_realizePalette(256,0,true); #endif }