Example #1
0
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");
}
Example #2
0
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
}