mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-03-22 15:05:03 +01:00
ground cells render code moved to renderer and partially unified; fix for slipping wheels calculation logic
This commit is contained in:
147
Ground.cpp
147
Ground.cpp
@@ -840,84 +840,6 @@ void TSubRect::Release()
|
||||
CMesh::Clear(); // usuwanie buforów
|
||||
};
|
||||
|
||||
void TSubRect::RenderDL()
|
||||
{ // renderowanie nieprzezroczystych (DL)
|
||||
TGroundNode *node;
|
||||
RaAnimate(); // przeliczenia animacji torów w sektorze
|
||||
/*
|
||||
LoadNodes(); // czemu tutaj?
|
||||
*/
|
||||
for( node = nRenderRect; node; node = node->nNext3 ) {
|
||||
GfxRenderer.Render( node ); // nieprzezroczyste obiekty terenu
|
||||
}
|
||||
for( node = nRender; node; node = node->nNext3 )
|
||||
GfxRenderer.Render( node ); // nieprzezroczyste obiekty (oprócz pojazdów)
|
||||
for (node = nRenderMixed; node; node = node->nNext3)
|
||||
GfxRenderer.Render( node ); // nieprzezroczyste z mieszanych modeli
|
||||
for (int j = 0; j < iTracks; ++j)
|
||||
tTracks[j]->RenderDyn(); // nieprzezroczyste fragmenty pojazdów na torach
|
||||
#ifdef EU07_SCENERY_EDITOR
|
||||
// memcells
|
||||
if( DebugModeFlag ) {
|
||||
for( auto const memcell : m_memcells ) {
|
||||
memcell->RenderDL();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
void TSubRect::RenderAlphaDL()
|
||||
{ // renderowanie przezroczystych modeli oraz pojazdów (DL)
|
||||
TGroundNode *node;
|
||||
for( node = nRenderMixed; node; node = node->nNext3 )
|
||||
GfxRenderer.Render_Alpha( node ); // przezroczyste z mieszanych modeli
|
||||
for( node = nRenderAlpha; node; node = node->nNext3 )
|
||||
GfxRenderer.Render_Alpha( node ); // przezroczyste modele
|
||||
for (int j = 0; j < iTracks; ++j)
|
||||
tTracks[j]->RenderDynAlpha(); // przezroczyste fragmenty pojazdów na torach
|
||||
};
|
||||
|
||||
void TSubRect::RenderVBO()
|
||||
{ // renderowanie nieprzezroczystych (VBO)
|
||||
TGroundNode *node;
|
||||
RaAnimate(); // przeliczenia animacji torów w sektorze
|
||||
/*
|
||||
LoadNodes(); // czemu tutaj?
|
||||
*/
|
||||
if (StartVBO())
|
||||
{
|
||||
for( node = nRenderRect; node; node = node->nNext3 )
|
||||
if( node->iVboPtr >= 0 )
|
||||
GfxRenderer.Render( node ); // nieprzezroczyste obiekty terenu
|
||||
EndVBO();
|
||||
}
|
||||
for( node = nRender; node; node = node->nNext3 )
|
||||
GfxRenderer.Render( node ); // nieprzezroczyste obiekty (oprócz pojazdów)
|
||||
for (node = nRenderMixed; node; node = node->nNext3)
|
||||
GfxRenderer.Render( node ); // nieprzezroczyste z mieszanych modeli
|
||||
for (int j = 0; j < iTracks; ++j)
|
||||
tTracks[j]->RenderDyn(); // nieprzezroczyste fragmenty pojazdów na torach
|
||||
#ifdef EU07_SCENERY_EDITOR
|
||||
// memcells
|
||||
if( DebugModeFlag ) {
|
||||
for( auto const memcell : m_memcells ) {
|
||||
memcell->RenderVBO();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
void TSubRect::RenderAlphaVBO()
|
||||
{ // renderowanie przezroczystych modeli oraz pojazdów (VBO)
|
||||
TGroundNode *node;
|
||||
for( node = nRenderMixed; node; node = node->nNext3 )
|
||||
GfxRenderer.Render_Alpha( node ); // przezroczyste z mieszanych modeli
|
||||
for( node = nRenderAlpha; node; node = node->nNext3 )
|
||||
GfxRenderer.Render_Alpha( node ); // przezroczyste modele
|
||||
for (int j = 0; j < iTracks; ++j)
|
||||
tTracks[j]->RenderDynAlpha(); // przezroczyste fragmenty pojazdów na torach
|
||||
};
|
||||
|
||||
void TSubRect::RenderSounds()
|
||||
{ // aktualizacja dźwięków w pojazdach sektora (sektor może nie być wyświetlany)
|
||||
for (int j = 0; j < iTracks; ++j)
|
||||
@@ -955,75 +877,6 @@ TGroundRect::Init() {
|
||||
}
|
||||
};
|
||||
|
||||
void TGroundRect::RenderDL()
|
||||
{ // renderowanie kwadratu kilometrowego (DL), jeśli jeszcze nie zrobione
|
||||
#ifdef EU07_USE_OLD_RENDERCODE
|
||||
if (iLastDisplay != iFrameNumber)
|
||||
{ // tylko jezeli dany kwadrat nie był jeszcze renderowany
|
||||
// for (TGroundNode* node=pRender;node;node=node->pNext3)
|
||||
// node->Render(); //nieprzezroczyste trójkąty kwadratu kilometrowego
|
||||
if (nRender)
|
||||
{ //łączenie trójkątów w jedną listę - trochę wioska
|
||||
if (!nRender->DisplayListID || (nRender->iVersion != Global::iReCompile))
|
||||
{ // jeżeli nie skompilowany, kompilujemy wszystkie trójkąty w jeden
|
||||
nRender->fSquareRadius = 5000.0 * 5000.0; // aby agregat nigdy nie znikał
|
||||
nRender->DisplayListID = glGenLists(1);
|
||||
glNewList(nRender->DisplayListID, GL_COMPILE);
|
||||
nRender->iVersion = Global::iReCompile; // aktualna wersja siatek
|
||||
auto const origin = Math3D::vector3( m_area.center.x, m_area.center.y, m_area.center.z );
|
||||
for (TGroundNode *node = nRender; node; node = node->nNext3) // następny tej grupy
|
||||
node->Compile(origin, true);
|
||||
glEndList();
|
||||
}
|
||||
GfxRenderer.Render( nRender ); // nieprzezroczyste trójkąty kwadratu kilometrowego
|
||||
}
|
||||
// submodels geometry is world-centric, so at least for the time being we need to pop the stack early
|
||||
::glPopMatrix();
|
||||
if( nRootMesh ) {
|
||||
GfxRenderer.Render( nRootMesh );
|
||||
}
|
||||
iLastDisplay = iFrameNumber; // drugi raz nie potrzeba
|
||||
}
|
||||
else {
|
||||
::glPopMatrix();
|
||||
}
|
||||
#else
|
||||
if( iLastDisplay != iFrameNumber ) { // tylko jezeli dany kwadrat nie był jeszcze renderowany
|
||||
LoadNodes(); // ewentualne tworzenie siatek
|
||||
if( nRenderRect ) {
|
||||
for( TGroundNode *node = nRenderRect; node; node = node->nNext3 ) // następny tej grupy
|
||||
GfxRenderer.Render( node ); // nieprzezroczyste trójkąty kwadratu kilometrowego
|
||||
}
|
||||
if( nRootMesh )
|
||||
GfxRenderer.Render( nRootMesh );
|
||||
iLastDisplay = iFrameNumber;
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
void TGroundRect::RenderVBO()
|
||||
{ // renderowanie kwadratu kilometrowego (VBO), jeśli jeszcze nie zrobione
|
||||
if (iLastDisplay != iFrameNumber)
|
||||
{ // tylko jezeli dany kwadrat nie był jeszcze renderowany
|
||||
LoadNodes(); // ewentualne tworzenie siatek
|
||||
if ( nRenderRect && StartVBO())
|
||||
{
|
||||
for (TGroundNode *node = nRenderRect; node; node = node->nNext3) // następny tej grupy
|
||||
#ifdef EU07_USE_OLD_RENDERCODE
|
||||
node->RaRenderVBO(); // nieprzezroczyste trójkąty kwadratu kilometrowego
|
||||
#else
|
||||
GfxRenderer.Render( node ); // nieprzezroczyste trójkąty kwadratu kilometrowego
|
||||
#endif
|
||||
EndVBO();
|
||||
iLastDisplay = iFrameNumber;
|
||||
}
|
||||
if (nTerrain)
|
||||
nTerrain->smTerrain->iVisible = iFrameNumber; // ma się wyświetlić w tej ramce
|
||||
}
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
std::vector<TGroundVertex> TempVerts;
|
||||
|
||||
Reference in New Issue
Block a user