EgtGraphics :

- migliorata gestione oggetti senza visualizzazione
- migliorata gestione errori di visualizzazione.
This commit is contained in:
Dario Sassi
2024-08-23 19:00:57 +02:00
parent c77d7cffe8
commit 076c74488f
8 changed files with 48 additions and 12 deletions
+12 -10
View File
@@ -384,13 +384,12 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj)
// superficie con visualizzazione standard
bool bTwoColors = ( pSTM->GetMaxTFlag() > 0) ;
if ( ! bTwoColors) {
// Imposto indice blocco corrente
if ( pGraphics->SetCurrent( 0))
pGraphics->Clear() ;
// recupero il materiale
Material mMat ;
if ( ! iIter.GetCalcMaterial( mMat))
mMat.Set( m_colDef) ;
// Imposto indice blocco corrente
pGraphics->SetCurrent( 0) ;
// pulisco
pGraphics->Clear() ;
// se ci sono triangoli
@@ -416,6 +415,8 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj)
}
pGraphics->EndTriangles() ;
}
else
pGraphics->Validate() ;
}
// altrimenti superficie con due colori
else {
@@ -448,8 +449,10 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj)
if ( pGraphics->SetCurrent( j))
pGraphics->Clear() ;
// se non ci sono triangoli, passo oltre
if ( nTri[j] == 0)
if ( nTri[j] == 0) {
pGraphics->Validate() ;
continue ;
}
// assegno materiali
pGraphics->AddColor( cCol[j]) ; // per wireframe
pGraphics->AddMaterial( mMat[j].GetAmbient(), mMat[j].GetDiffuse(),
@@ -830,6 +833,7 @@ Scene::DrawAlphaSurfVector( void)
[]( const AlphaSurf& a, const AlphaSurf&b) { return a.dZmax < b.dZmax ; }) ;
// eseguo visualizzazione
bool bOk = true ;
for ( const auto& AlphaSurf : m_vAlphaSurf) {
// imposto matrice MODELVIEW
double Matrix[OGLMAT_DIM] ;
@@ -837,15 +841,13 @@ Scene::DrawAlphaSurfVector( void)
glPushMatrix() ;
glLoadMatrixd( Matrix) ;
// eseguo visualizzazione
bool bOk = AlphaSurf.pGraph->Draw( AlphaSurf.nStat, AlphaSurf.nMark, true,
AlphaSurf.bSurf, AlphaSurf.nAlpha, AlphaSurf.bShowAux) ;
if ( ! AlphaSurf.pGraph->Draw( AlphaSurf.nStat, AlphaSurf.nMark, true,
AlphaSurf.bSurf, AlphaSurf.nAlpha, AlphaSurf.bShowAux))
bOk = false ;
// ripristino matrice
glPopMatrix() ;
// in caso di errore, esco
if ( ! bOk)
return false ;
}
return true ;
return bOk ;
}
//----------------------------------------------------------------------------