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
+1
View File
@@ -33,6 +33,7 @@ class ObjEGrGraphics : public IObjGraphics
virtual Scene* GetScene( void) = 0 ;
virtual bool SetCurrent( int nCurr) { return false ; }
virtual void Clear( void) = 0 ;
virtual bool Validate( void) = 0 ;
virtual bool AddColor( const Color& colC) = 0 ;
virtual bool AddMaterial( const Color& colAmb, const Color& colDiff,
const Color& colSpec, float fShin) = 0 ;
+14 -2
View File
@@ -51,8 +51,8 @@ void
ObjMultiGraphics::SetScene( Scene* pScene)
{
m_pScene = pScene ;
for ( size_t i = 0 ; i < m_vOEGR.size() ; ++ i)
m_vOEGR[i]->SetScene( pScene) ;
for ( auto& pOEGR : m_vOEGR)
pOEGR->SetScene( pScene) ;
}
//----------------------------------------------------------------------------
@@ -77,6 +77,18 @@ ObjMultiGraphics::Clear( void)
m_vOEGR[m_nCurr]->Clear() ;
}
//----------------------------------------------------------------------------
bool
ObjMultiGraphics::Validate( void)
{
if ( ! m_bValid) {
if ( m_nCurr < 0 || m_nCurr >= int( m_vOEGR.size()))
return false ;
m_bValid = m_vOEGR[m_nCurr]->Validate() ;
}
return m_bValid ;
}
//----------------------------------------------------------------------------
bool
ObjMultiGraphics::AddColor( const Color& colC)
+1
View File
@@ -32,6 +32,7 @@ class ObjMultiGraphics : public ObjEGrGraphics
{ return m_pScene ; }
bool SetCurrent( int nCurr) override ;
void Clear( void) override ;
bool Validate( void) override ;
bool AddColor( const Color& colC) override ;
bool AddMaterial( const Color& colAmb, const Color& colDiff,
const Color& colSpec, float fShin) override ;
+9
View File
@@ -52,6 +52,15 @@ ObjNewGraphics::Clear( void)
m_nCurrMode = GL_NONE ;
}
//----------------------------------------------------------------------------
bool
ObjNewGraphics::Validate( void)
{
if ( ! m_bValid)
m_bValid = m_ngaVect.empty() ;
return m_bValid ;
}
//----------------------------------------------------------------------------
bool
ObjNewGraphics::AddColor( const Color& colC)
+1
View File
@@ -70,6 +70,7 @@ class ObjNewGraphics : public ObjEGrGraphics
Scene* GetScene( void) override
{ return m_pScene ; }
void Clear( void) override ;
bool Validate( void) override ;
bool AddColor( const Color& colC) override ;
bool AddMaterial( const Color& colAmb, const Color& colDiff,
const Color& colSpec, float fShin) override ;
+9
View File
@@ -48,6 +48,15 @@ ObjOldGraphics::Clear( void)
m_nCurrMode = GL_NONE ;
}
//----------------------------------------------------------------------------
bool
ObjOldGraphics::Validate( void)
{
if ( ! m_bValid)
m_bValid = m_ogaVect.empty() ;
return m_bValid ;
}
//----------------------------------------------------------------------------
bool
ObjOldGraphics::AddColor( const Color& colC)
+1
View File
@@ -75,6 +75,7 @@ class ObjOldGraphics : public ObjEGrGraphics
Scene* GetScene( void) override
{ return m_pScene ; }
void Clear( void) override ;
bool Validate( void) override ;
bool AddColor( const Color& colC) override ;
bool AddMaterial( const Color& colAmb, const Color& colDiff,
const Color& colSpec, float fShin) override ;
+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 ;
}
//----------------------------------------------------------------------------