diff --git a/Fltk/Message.cpp b/Fltk/Message.cpp index 5104126cdd5a2f51098072fa6e99cc317cac31b3..2aa391d5c5c0bdc9640ebc1592d542202beaba8c 100644 --- a/Fltk/Message.cpp +++ b/Fltk/Message.cpp @@ -1,4 +1,4 @@ -// $Id: Message.cpp,v 1.29 2002-06-15 21:25:27 geuzaine Exp $ +// $Id: Message.cpp,v 1.30 2002-08-28 07:14:55 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -127,7 +127,10 @@ void Msg(int level, char *fmt, ...){ if(!WID) window = -1; else - WID->check(); + WID->check(); + // this is pretty costly, but permits to keep the app + // responsive... the downside is that it can cause race + // conditions if(CTX.verbosity >= verb){ va_start (args, fmt); diff --git a/Fltk/Opengl_Window.cpp b/Fltk/Opengl_Window.cpp index c846860a9d0e9f6e1061e5f3224284a892fbf977..a2717e29565e159d63393e8ae7a77f2680844cf3 100644 --- a/Fltk/Opengl_Window.cpp +++ b/Fltk/Opengl_Window.cpp @@ -1,4 +1,4 @@ -// $Id: Opengl_Window.cpp,v 1.27 2002-08-26 17:41:32 geuzaine Exp $ +// $Id: Opengl_Window.cpp,v 1.28 2002-08-28 07:14:55 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -46,6 +46,12 @@ static int ZOOM = 0 ; static double ZOOM_X0, ZOOM_Y0, ZOOM_X1, ZOOM_Y1; void Opengl_Window::draw() { + static int locked=0; + if(locked) + return; + else + locked=1; + Msg(DEBUG, "Opengl_Window->draw()"); if(!valid()){ valid(1); CTX.viewport[0] = 0 ; CTX.viewport[1] = 0 ; @@ -109,6 +115,7 @@ void Opengl_Window::draw() { glMatrixMode(GL_MODELVIEW); ZOOM = 0; } + locked=0; } void Opengl_Window::draw_overlay() { diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp index 6eaabdf3e5f76e4c5d7ad47fbb272b83d7bf8430..be9d764019b43289010ea3c352cdfabacb67a109 100644 --- a/Graphics/Post.cpp +++ b/Graphics/Post.cpp @@ -1,4 +1,4 @@ -// $Id: Post.cpp,v 1.38 2002-08-28 03:16:09 geuzaine Exp $ +// $Id: Post.cpp,v 1.39 2002-08-28 07:14:55 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -138,7 +138,7 @@ void Get_Coords(double Explode, double *Offset, int nbnod, } } -static double storedEye[3]={0,0,0}; +static double storedEye[3]={0.,0.,0.}; int changedEye(){ double zeye=100*CTX.lc, tmp[3]; @@ -151,6 +151,7 @@ int changedEye(){ storedEye[0] = tmp[0]; storedEye[1] = tmp[1]; storedEye[2] = tmp[2]; + Msg(DEBUG, "New eye = (%g %g %g)", tmp[0], tmp[1], tmp[2]); return 1; } return 0; @@ -227,6 +228,18 @@ void Draw_Post (void) { if(v->Visible && !v->Dirty){ + // sort the data % eye for transparency + + if(CTX.alpha && + v->NbST && v->DrawTriangles && v->DrawScalars && + ColorTable_IsAlpha(&v->CT) && + changedEye()){ + Msg(DEBUG, "Sorting triangles in view %d", v->Num); + nb = List_Nbr(v->ST) / v->NbST ; + qsort(v->ST->array,v->NbST,nb*sizeof(double),compareTriangleEye); + v->Changed = 1; // force displaylist regeneration + } + if(CTX.display_lists && !v->Changed && v->DisplayListNum>0){ Msg(DEBUG, "Call display List %d", v->DisplayListNum); @@ -386,15 +399,6 @@ void Draw_Post (void) { if(v->NbST && v->DrawTriangles && v->DrawScalars){ nb = List_Nbr(v->ST) / v->NbST ; - if(CTX.alpha){ // sort the triangles % eye - if(ColorTable_IsAlpha(&v->CT) && changedEye()){ - Msg(INFO, "Resorting triangles (eye=%g %g %g)", - storedEye[0],storedEye[1],storedEye[2]); - qsort(v->ST->array,v->NbST,nb*sizeof(double),compareTriangleEye); - v->Changed = 1; - Msg(INFO, "End sorting triangles"); - } - } if(v->Light && v->SmoothNormals && v->Changed && v->IntervalsType != DRAW_POST_ISO){ Msg(DEBUG, "Preprocessing of triangle normals in view %d", v->Num); for(i = 0 ; i < List_Nbr(v->ST) ; i+=nb){