diff --git a/src/Surfaces.cc b/src/Surfaces.cc index cfbb3a78b7b13b295f9f4c35d6bbc399cfd1e0db..4fd533e5044d261614f1859ef9efd06602da0999 100644 --- a/src/Surfaces.cc +++ b/src/Surfaces.cc @@ -185,20 +185,23 @@ void Surfaces::buffer( GLfloat *fill, Colourscale *cs, DATA_TYPE *dat, void Surfaces::buffer_opaque( float opaque, GLfloat *fill, Colourscale *cs, DATA_TYPE *dat, dataOpac* dataopac, GLfloat *&buffer, bool flat ) { + return; + set<int> solid; - for ( auto &a :_zlist ) { + for ( int j=0; j<_zlist.size(); j++ ) { + vtx_z &a = _zlist[j]; SurfaceElement *s = _ele[a.i]; - const int* n = s->obj(); - bool eleopac = true; + const int *n = s->obj(); + bool eleopac = true; for( int i=0; i<s->ptsPerObj(); i++ ) if( dataopac->alpha(dat[n[i]]) < opaque ) { eleopac = false; break; } if( eleopac ) { - solid.insert(a.i); - buffer_elem( a.i, fill, cs, dat+a.i, dataopac, buffer, flat ); + solid.insert(j); + buffer_elem( a.i, fill, cs, dat, dataopac, buffer, flat ); } } for( auto i=solid.rbegin(); i != solid.rend(); i++ ) diff --git a/src/TBmeshWin.cc b/src/TBmeshWin.cc index 0320e22a37aa12ba6c6ca930c67787474e40112c..9245bddda4d71169368b3c3c80a9a7335c8d3cc0 100644 --- a/src/TBmeshWin.cc +++ b/src/TBmeshWin.cc @@ -394,11 +394,17 @@ TBmeshWin::draw_surfaces( RenderTris &rd, vector<vtx_z> &trans, bool wireframe ) { model->pt.setVis( true ); - unsigned int old_redraw_state = _redraw_state; - bool translucent = rd.opaque() != rd.num(); + bool translucent = false; + for ( int s=0; s<model->numSurf(); s++ ) { + Surfaces *sf = model->surface(s); + if(translucency( wireframe?SurfEle:Surface, wireframe?sf->outlinecolor():sf->fillcolor())){ + translucent = true; + break; + } + } if( translucent && rd.num()>MAX_SURFELE_REALTIME && _spinning ) - _redraw_state = VBO_None; // do not recalculate translucent surface if spinning + return; bool newView = (REDRAW(VBO_View))&&translucent; if( REBUFFER_SURF(_redraw_state) || newView ) { // refill buffer @@ -440,8 +446,7 @@ TBmeshWin::draw_surfaces( RenderTris &rd, vector<vtx_z> &trans, bool wireframe ) } } - draw_sorted_elements( rd, trans, newView, wireframe ); - _redraw_state = old_redraw_state; + draw_sorted_elements( rd, trans, newView, wireframe ); } @@ -474,7 +479,7 @@ TBmeshWin::draw_surface(Surfaces* sf, GLfloat *&vbobuf, bool wf ) // all elements are opaque sf->buffer( s_colour, cs, showData?(facetshading?sf->to_elem(data).data():data):NULL, NULL, vbobuf, facetshading ); - else if( on_tr && showData && dataopac->dop[Surface].on() ) { + else if( on_tr && showData && dataopac->dop[wf?SurfEle:Surface].on() ) { sf->buffer_opaque( OPAQUE_LIMIT, s_colour, cs, facetshading?sf->to_elem(data).data():data, dataopac->dop+Surface, vbobuf, facetshading ); }