Skip to content

Commit de432ef

Browse files
committed
perf(heighmap): Create light list iterator on the stack instead of the heap in BaseHeightMapRenderObjClass::getStaticDiffuse()
1 parent ffac8f9 commit de432ef

7 files changed

Lines changed: 10 additions & 73 deletions

File tree

Core/GameEngineDevice/Source/W3DDevice/GameClient/BaseHeightMap.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2127,12 +2127,9 @@ Int BaseHeightMapRenderObjClass::getStaticDiffuse(Int x, Int y)
21272127

21282128
RTS3DScene *pMyScene = (RTS3DScene *)Scene;
21292129
if (pMyScene) {
2130-
RefRenderObjListIterator *it = pMyScene->createLightsIterator();
2131-
doTheLight(&vertex, lightRay, &normalAtTexel, it, 1.0f);
2132-
if (it) {
2133-
pMyScene->destroyLightsIterator(it);
2134-
it = nullptr;
2135-
}
2130+
RefRenderObjListClass *lightlist = pMyScene->getLightList();
2131+
RefRenderObjListIterator it(lightlist);
2132+
doTheLight(&vertex, lightRay, &normalAtTexel, &it, 1.0f);
21362133
} else {
21372134
doTheLight(&vertex, lightRay, &normalAtTexel, nullptr, 1.0f);
21382135
}

Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTerrainVisual.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -601,27 +601,19 @@ Bool W3DTerrainVisual::load( AsciiString filename )
601601
pMapObj = pMapObj->getNext();
602602
}
603603

604-
605-
RefRenderObjListIterator *it = W3DDisplay::m_3DScene ? W3DDisplay::m_3DScene->createLightsIterator() : nullptr;
606604
// apply the heightmap to the terrain render object
607-
608605
#ifdef DO_SEISMIC_SIMULATIONS
609606
m_terrainRenderObject->initHeightData( m_clientHeightMap->getDrawWidth(),
610607
m_clientHeightMap->getDrawHeight(),
611608
m_clientHeightMap,
612-
it);
609+
nullptr);
613610
#else
614611
m_terrainRenderObject->initHeightData( m_logicHeightMap->getDrawWidth(),
615612
m_logicHeightMap->getDrawHeight(),
616613
m_logicHeightMap,
617-
it);
614+
nullptr);
618615
#endif
619616

620-
621-
if (it) {
622-
W3DDisplay::m_3DScene->destroyLightsIterator(it);
623-
it = nullptr;
624-
}
625617
// add our terrain render object to the scene
626618
if (W3DDisplay::m_3DScene != nullptr)
627619
W3DDisplay::m_3DScene->Add_Render_Object( m_terrainRenderObject );

Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DView.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3602,11 +3602,7 @@ void W3DView::updateTerrain()
36023602
{
36033603
DEBUG_ASSERTCRASH(TheTerrainRenderObject != nullptr, ("TheTerrainRenderObject is null"));
36043604

3605-
RefRenderObjListIterator *it = W3DDisplay::m_3DScene->createLightsIterator();
3606-
TheTerrainRenderObject->updateCenter(m_3DCamera, it);
3607-
if (it)
3608-
{
3609-
W3DDisplay::m_3DScene->destroyLightsIterator(it);
3610-
it = nullptr;
3611-
}
3605+
RefRenderObjListClass* lightlist = W3DDisplay::m_3DScene->getLightList();
3606+
RefRenderObjListIterator it(lightlist);
3607+
TheTerrainRenderObject->updateCenter(m_3DCamera, &it);
36123608
}

Generals/Code/GameEngineDevice/Include/W3DDevice/GameClient/W3DScene.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,11 @@ class RTS3DScene : public SimpleSceneClass, public SubsystemInterface
8585
/// Lighting methods
8686
void addDynamicLight(W3DDynamicLight * obj);
8787
void removeDynamicLight(W3DDynamicLight * obj);
88-
RefRenderObjListIterator *createLightsIterator();
89-
void destroyLightsIterator(RefRenderObjListIterator * it);
9088
RefRenderObjListClass *getDynamicLights() {return &m_dynamicLightList;};
9189
W3DDynamicLight *getADynamicLight();
9290
void setGlobalLight(LightClass *pLight,Int lightIndex=0);
9391
LightEnvironmentClass &getDefaultLightEnv() {return m_defaultLightEnv;}
92+
RefRenderObjListClass* getLightList() { return &LightList; }
9493

9594
virtual void init() override {}
9695
virtual void update() override {}

Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,29 +1596,6 @@ void RTS3DScene::flushTranslucentObjects(RenderInfoClass & rinfo)
15961596
DX8Wrapper::Set_DX8_Render_State(D3DRS_AMBIENT,DX8Wrapper::Convert_Color(this->Get_Ambient_Light(),0.0f));
15971597
}
15981598

1599-
//=============================================================================
1600-
// RTS3DScene::createLightsIterator
1601-
//=============================================================================
1602-
/** Returns an iterator of the lights in the scene. */
1603-
//=============================================================================
1604-
RefRenderObjListIterator * RTS3DScene::createLightsIterator()
1605-
{
1606-
RefRenderObjListIterator * it = NEW RefRenderObjListIterator(&LightList); // poolify
1607-
return it;
1608-
}
1609-
1610-
1611-
//=============================================================================
1612-
// RTS3DScene::destroyLightsIterator
1613-
//=============================================================================
1614-
/** Destroys the iterator returned by createLightsIterator. */
1615-
//=============================================================================
1616-
void RTS3DScene::destroyLightsIterator(RefRenderObjListIterator * it)
1617-
{
1618-
delete it;
1619-
}
1620-
1621-
16221599
//=============================================================================
16231600
// RTS3DScene::addDynamicLight
16241601
//=============================================================================

GeneralsMD/Code/GameEngineDevice/Include/W3DDevice/GameClient/W3DScene.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,11 @@ class RTS3DScene : public SimpleSceneClass, public SubsystemInterface
8585
/// Lighting methods
8686
void addDynamicLight(W3DDynamicLight * obj);
8787
void removeDynamicLight(W3DDynamicLight * obj);
88-
RefRenderObjListIterator *createLightsIterator();
89-
void destroyLightsIterator(RefRenderObjListIterator * it);
9088
RefRenderObjListClass *getDynamicLights() {return &m_dynamicLightList;};
9189
W3DDynamicLight *getADynamicLight();
9290
void setGlobalLight(LightClass *pLight,Int lightIndex=0);
9391
LightEnvironmentClass &getDefaultLightEnv() {return m_defaultLightEnv;}
92+
RefRenderObjListClass* getLightList() { return &LightList; }
9493

9594
virtual void init() override {}
9695
virtual void update() override {}

GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DScene.cpp

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,29 +1668,6 @@ void RTS3DScene::flushTranslucentObjects(RenderInfoClass & rinfo)
16681668
DX8Wrapper::Set_DX8_Render_State(D3DRS_AMBIENT,DX8Wrapper::Convert_Color(this->Get_Ambient_Light(),0.0f));
16691669
}
16701670

1671-
//=============================================================================
1672-
// RTS3DScene::createLightsIterator
1673-
//=============================================================================
1674-
/** Returns an iterator of the lights in the scene. */
1675-
//=============================================================================
1676-
RefRenderObjListIterator * RTS3DScene::createLightsIterator()
1677-
{
1678-
RefRenderObjListIterator * it = NEW RefRenderObjListIterator(&LightList); // poolify
1679-
return it;
1680-
}
1681-
1682-
1683-
//=============================================================================
1684-
// RTS3DScene::destroyLightsIterator
1685-
//=============================================================================
1686-
/** Destroys the iterator returned by createLightsIterator. */
1687-
//=============================================================================
1688-
void RTS3DScene::destroyLightsIterator(RefRenderObjListIterator * it)
1689-
{
1690-
delete it;
1691-
}
1692-
1693-
16941671
//=============================================================================
16951672
// RTS3DScene::addDynamicLight
16961673
//=============================================================================

0 commit comments

Comments
 (0)