X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Fglx%2Fendgame.c;h=83ce4e412559d880035f1a2d3c7f034c3073e121;hp=79e86c1dd3fb34893b2b9ac7e8ce135750e450b7;hb=6cee540bdbb571485cd5e519f89f389faebd0495;hpb=40eacb5812ef7c0e3374fb139afbb4f5bc8bbfb5 diff --git a/hacks/glx/endgame.c b/hacks/glx/endgame.c index 79e86c1d..83ce4e41 100644 --- a/hacks/glx/endgame.c +++ b/hacks/glx/endgame.c @@ -94,6 +94,7 @@ GLfloat colors[2][3] = {0.5, 0.5, 0.5}, }; +/* well, i prefer silver tip */ GLfloat whites[3][3] = { {1.0, 0.5, 0.0}, @@ -191,7 +192,7 @@ Bool chess_handle_event (ModeInfo *mi, XEvent *event) { return False; } -GLfloat position[] = { 3.0, 8.0, 3.0, 1.0 }; +GLfloat position[] = { 3.0, 7.0, 3.0, 1.0 }; /* configure lighting */ void setup_lights(void) { @@ -291,7 +292,7 @@ void drawBoard(void) { for(j = 0; j < BOARDSIZE; ++j) { /*glColor3fv(colors[(i+j)%2]);*/ glColor4f(colors[(i+j)%2][0], colors[(i+j)%2][1], - colors[(i+j)%2][2], 0.8); + colors[(i+j)%2][2], 0.65); glNormal3f(0.0, 1.0, 0.0); glVertex3f(i, 0.0, j + 1.0); glVertex3f(i + 1.0, 0.0, j + 1.0); @@ -319,6 +320,8 @@ void draw_pieces(void) { /** reflectionboard */ void draw_reflections(void) { + int i, j; + glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); @@ -327,10 +330,16 @@ void draw_reflections(void) { glDisable(GL_DEPTH_TEST); glBegin(GL_QUADS); - glVertex3f(0, 0, BOARDSIZE); - glVertex3f(0, 0, 0); - glVertex3f(BOARDSIZE, 0, 0); - glVertex3f(BOARDSIZE, 0, BOARDSIZE); + + /* only draw white squares */ + for(i = 0; i < BOARDSIZE; ++i) { + for(j = (BOARDSIZE+i) % 2; j < BOARDSIZE; j += 2) { + glVertex3f(i, 0.0, j + 1.0); + glVertex3f(i + 1.0, 0.0, j + 1.0); + glVertex3f(i + 1.0, 0.0, j); + glVertex3f(i, 0.0, j); + } + } glEnd(); glEnable(GL_DEPTH_TEST); @@ -341,7 +350,7 @@ void draw_reflections(void) { glPushMatrix(); glScalef(1.0, -1.0, 1.0); glTranslatef(0.5, 0.0, 0.5); - + glLightfv(GL_LIGHT0, GL_POSITION, position); draw_pieces(); glPopMatrix(); @@ -380,7 +389,7 @@ void display(Chesscreen *c) { else drawBoard(); - glTranslatef(0.5, .01, 0.5); + glTranslatef(0.5, 0.0, 0.5); draw_pieces(); if(!wire) { @@ -430,7 +439,7 @@ void init_chess(ModeInfo *mi) { gen_model_lists(); - if (!wire) { + if(!wire) { setup_lights(); glColorMaterial(GL_FRONT, GL_DIFFUSE); glShadeModel(GL_SMOOTH); @@ -439,8 +448,6 @@ void init_chess(ModeInfo *mi) { } else glPolygonMode(GL_FRONT, GL_LINE); - -/* buildBoard(); */ } /** does dirty work drawing scene, moving pieces */ @@ -466,10 +473,6 @@ void draw_chess(ModeInfo *mi) { } } - if(done) - glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, - ( done == 1 || count == 0 ) ? 1.0+0.1*count : 99.0/count); - if(++count == 100) { if(!done) { mpiece = game.board[game.moves[mc][0]][game.moves[mc][1]]; @@ -503,6 +506,11 @@ void draw_chess(ModeInfo *mi) { } } + /* set lighting */ + if(done) + glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, + done == 1 ? 1.0+0.1*count : 100.0/count); + display(c); if(mi->fps_p) do_fps(mi);