EgtGraphics 1.6v8 :
- migliorata velocità di visualizzazione oggetti con triangoli su nuova e vecchia grafica.
This commit is contained in:
Binary file not shown.
+18
-9
@@ -241,19 +241,28 @@ ObjNewGraphics::AddTriangle( const Triangle3d& Tria, const TriFlags3d& TFlags, c
|
||||
return false ;
|
||||
// recupero il conteggio dei vertici
|
||||
int nCount = m_ngaList.back().m_nCount ;
|
||||
// emetto i flag, le normali e i vertici del triangolo + aggiorno bbox
|
||||
// emetto i vertici, le normali e i flag del triangolo
|
||||
#pragma pack( push, 1)
|
||||
struct VnfBuf {
|
||||
Vert3f v3V ;
|
||||
Vert3f v3N ;
|
||||
unsigned char cFlag ;
|
||||
} ;
|
||||
#pragma pack( pop)
|
||||
VnfBuf Buffer[3] ;
|
||||
for ( int i = 0 ; i < 3 ; ++ i) {
|
||||
Vert3f v3V( Tria.GetP( i)) ;
|
||||
glBufferSubData( GL_ARRAY_BUFFER, nCount * SIZEVNF, SIZEV3F, &v3V) ;
|
||||
m_b3Loc.Add( Tria.GetP( i)) ;
|
||||
Vert3f v3N( TNrms.vtN[i]) ;
|
||||
glBufferSubData( GL_ARRAY_BUFFER, nCount * SIZEVNF + SIZEV3F, SIZEV3F, &v3N) ;
|
||||
unsigned char cFlag = ( TFlags.bFlag[i] ? 1 : 0) ;
|
||||
glBufferSubData( GL_ARRAY_BUFFER, nCount * SIZEVNF + 2 * SIZEV3F, SIZEFLAG, &cFlag) ;
|
||||
++ nCount ;
|
||||
Buffer[i].v3V = Tria.GetP( i) ;
|
||||
Buffer[i].v3N = TNrms.vtN[i] ;
|
||||
Buffer[i].cFlag = ( TFlags.bFlag[i] ? 1 : 0) ;
|
||||
}
|
||||
glBufferSubData( GL_ARRAY_BUFFER, nCount * SIZEVNF, 3 * SIZEVNF, Buffer) ;
|
||||
// aggiorno il conteggio
|
||||
nCount += 3 ;
|
||||
m_ngaList.back().m_nCount = nCount ;
|
||||
// aggiorno bbox
|
||||
for ( int i = 0 ; i < 3 ; ++ i)
|
||||
m_b3Loc.Add( Tria.GetP( i)) ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
||||
+16
-6
@@ -20,6 +20,10 @@
|
||||
#include "/EgtDev/Include/EGkGdbConst.h"
|
||||
#include "/EgtDev/Include/EGKTriangle3d.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const int VECT_HEAP = 20 ;
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
ObjOldGraphics::~ObjOldGraphics( void)
|
||||
{
|
||||
@@ -38,7 +42,7 @@ ObjOldGraphics::Reset( void)
|
||||
void
|
||||
ObjOldGraphics::Clear( void)
|
||||
{
|
||||
m_ogaList.clear() ;
|
||||
m_ogaVect.clear() ;
|
||||
m_bValid = false ;
|
||||
m_nCurrMode = GL_NONE ;
|
||||
}
|
||||
@@ -100,6 +104,8 @@ ObjOldGraphics::AddLines( const PNTVECTOR& vPnt, bool bAux)
|
||||
// modo corrente deve essere nullo
|
||||
if ( m_nCurrMode != GL_NONE)
|
||||
return false ;
|
||||
// riservo memoria per vettore
|
||||
m_ogaVect.reserve( VECT_HEAP + vPnt.size()) ;
|
||||
// start
|
||||
AddStart( GL_LINES, bAux) ;
|
||||
// inserisco i vertici + aggiorno bbox
|
||||
@@ -122,6 +128,8 @@ ObjOldGraphics::AddPolyLine( const PolyLine& PL, bool bAux)
|
||||
// modo corrente deve essere nullo
|
||||
if ( m_nCurrMode != GL_NONE)
|
||||
return false ;
|
||||
// riservo memoria per vettore
|
||||
m_ogaVect.reserve( VECT_HEAP + PL.GetPointNbr()) ;
|
||||
// start
|
||||
AddStart( GL_LINE_STRIP, bAux) ;
|
||||
// inserisco i nuovi vertici + aggiorno bbox
|
||||
@@ -145,6 +153,8 @@ ObjOldGraphics::StartTriangles( int nNum, bool bAux)
|
||||
// modo corrente deve essere nullo
|
||||
if ( m_nCurrMode != GL_NONE)
|
||||
return false ;
|
||||
// riservo memoria per vettore
|
||||
m_ogaVect.reserve( VECT_HEAP + 3 * nNum) ;
|
||||
// inizio emissione triangoli
|
||||
AddStart( GL_TRIANGLES, bAux) ;
|
||||
m_nCurrMode = GL_TRIANGLES ;
|
||||
@@ -189,7 +199,7 @@ bool
|
||||
ObjOldGraphics::Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bShowAux)
|
||||
{
|
||||
// se vuoto non faccio alcunché
|
||||
if ( m_ogaList.size() == 0)
|
||||
if ( m_ogaVect.size() == 0)
|
||||
return true ;
|
||||
|
||||
// gestione stato di visualizzazione
|
||||
@@ -227,8 +237,8 @@ ObjOldGraphics::Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bSho
|
||||
|
||||
// ciclo di disegno
|
||||
bool bStartA = false ;
|
||||
OGALIST::iterator iIter ;
|
||||
for ( iIter = m_ogaList.begin() ; iIter != m_ogaList.end() ; ++ iIter) {
|
||||
OGAVECT::iterator iIter ;
|
||||
for ( iIter = m_ogaVect.begin() ; iIter != m_ogaVect.end() ; ++ iIter) {
|
||||
switch ( iIter->m_nType) {
|
||||
case OgAtom::START :
|
||||
glBegin( iIter->m_nMode) ;
|
||||
@@ -292,8 +302,8 @@ ObjOldGraphics::Draw( int nStat, int nMark, bool bSurfSha, int nAlpha, bool bSho
|
||||
|
||||
// ciclo di disegno
|
||||
bool bStartA = false ;
|
||||
OGALIST::iterator iIter ;
|
||||
for ( iIter = m_ogaList.begin() ; iIter != m_ogaList.end() ; ++ iIter) {
|
||||
OGAVECT::iterator iIter ;
|
||||
for ( iIter = m_ogaVect.begin() ; iIter != m_ogaVect.end() ; ++ iIter) {
|
||||
switch ( iIter->m_nType) {
|
||||
case OgAtom::START :
|
||||
glBegin( iIter->m_nMode) ;
|
||||
|
||||
+4
-3
@@ -52,8 +52,9 @@ class OgAtom {
|
||||
} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Lista di OgAtom
|
||||
// Lista e vettore di OgAtom
|
||||
typedef std::list<OgAtom> OGALIST ;
|
||||
typedef std::vector<OgAtom> OGAVECT ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
class ObjOldGraphics : public ObjEGrGraphics
|
||||
@@ -89,7 +90,7 @@ class ObjOldGraphics : public ObjEGrGraphics
|
||||
|
||||
private :
|
||||
bool AddOgAtom( const OgAtom& oga)
|
||||
{ try { m_ogaList.push_back( oga) ; }
|
||||
{ try { m_ogaVect.push_back( oga) ; }
|
||||
catch(...) { return false ; }
|
||||
return true ; }
|
||||
bool AddStart( int nMode, bool bAux = false)
|
||||
@@ -131,7 +132,7 @@ class ObjOldGraphics : public ObjEGrGraphics
|
||||
Scene* m_pScene ; // puntatore alla scena
|
||||
bool m_bValid ; // flag
|
||||
int m_nCurrMode ; // modo corrente
|
||||
OGALIST m_ogaList ; // lista di atomi per vecchia grafica
|
||||
OGAVECT m_ogaVect ; // vettore di atomi per vecchia grafica
|
||||
BBox3d m_b3Loc ; // BoundingBox locale
|
||||
} ;
|
||||
|
||||
|
||||
+1
-1
@@ -363,7 +363,7 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, const MdStMkCol& siObj)
|
||||
POLYLINELIST lstPL ;
|
||||
for ( int k = 0 ; k < 3 ; ++ k) {
|
||||
switch ( k) {
|
||||
default : pGraphics->AddColor( BLUE) ; break ;
|
||||
case 0 : pGraphics->AddColor( BLUE) ; break ;
|
||||
case 1 : pGraphics->AddColor( RED) ; break ;
|
||||
case 2 : pGraphics->AddColor( GREEN) ; break ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user