Skip to content

Commit 2bbf902

Browse files
authored
fix(shadow): Fix counting of W3DProjectedShadowManager::m_numDecalShadows (#1568)
1 parent 049ef5f commit 2bbf902

File tree

4 files changed

+52
-124
lines changed

4 files changed

+52
-124
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ class W3DProjectedShadowManager : public ProjectedShadowManager
7878

7979
private:
8080
Int renderProjectedTerrainShadow(W3DProjectedShadow *shadow, AABoxClass &box); ///<render shadow on map terrain.
81+
void updateShadowNumbers(ShadowType shadowType, Int addNum);
8182

83+
private:
8284
W3DProjectedShadow *m_shadowList;
8385
W3DProjectedShadow *m_decalList;
8486
TextureClass *m_dynamicRenderTarget; ///<offscreen video memory texture used to render all shadow textures.

Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp

Lines changed: 24 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,20 +1566,7 @@ Shadow* W3DProjectedShadowManager::addDecal(Shadow::ShadowTypeInfo *shadowInfo)
15661566
m_decalList = shadow;
15671567
}
15681568

1569-
switch (shadow->m_type)
1570-
{
1571-
case SHADOW_DECAL:
1572-
case SHADOW_ALPHA_DECAL:
1573-
case SHADOW_ADDITIVE_DECAL:
1574-
m_numDecalShadows++;
1575-
break;
1576-
case SHADOW_PROJECTION:
1577-
m_numProjectionShadows++;
1578-
break;
1579-
default:
1580-
break;
1581-
}
1582-
1569+
updateShadowNumbers(shadow->m_type, +1);
15831570
return shadow;
15841571
}
15851572

@@ -1703,20 +1690,7 @@ Shadow* W3DProjectedShadowManager::addDecal(RenderObjClass *robj, Shadow::Shadow
17031690
m_decalList = shadow;
17041691
}
17051692

1706-
switch (shadow->m_type)
1707-
{
1708-
case SHADOW_DECAL:
1709-
case SHADOW_ALPHA_DECAL:
1710-
case SHADOW_ADDITIVE_DECAL:
1711-
m_numDecalShadows++;
1712-
break;
1713-
case SHADOW_PROJECTION:
1714-
m_numProjectionShadows++;
1715-
break;
1716-
default:
1717-
break;
1718-
}
1719-
1693+
updateShadowNumbers(shadow->m_type, +1);
17201694
return shadow;
17211695
}
17221696

@@ -1902,18 +1876,7 @@ W3DProjectedShadow* W3DProjectedShadowManager::addShadow(RenderObjClass *robj, S
19021876
m_shadowList = shadow;
19031877
}
19041878

1905-
switch (shadow->m_type)
1906-
{
1907-
case SHADOW_DECAL:
1908-
m_numDecalShadows++;
1909-
break;
1910-
case SHADOW_PROJECTION:
1911-
m_numProjectionShadows++;
1912-
break;
1913-
default:
1914-
break;
1915-
}
1916-
1879+
updateShadowNumbers(shadow->m_type, +1);
19171880
return shadow;
19181881
}
19191882

@@ -2033,17 +1996,8 @@ void W3DProjectedShadowManager::removeShadow (W3DProjectedShadow *shadow)
20331996
prev_shadow->m_next=shadow->m_next;
20341997
else
20351998
m_decalList=shadow->m_next;
2036-
switch (shadow->m_type)
2037-
{
2038-
case SHADOW_DECAL:
2039-
m_numDecalShadows--;
2040-
break;
2041-
case SHADOW_PROJECTION:
2042-
m_numProjectionShadows--;
2043-
break;
2044-
default:
2045-
break;
2046-
}
1999+
2000+
updateShadowNumbers(shadow->m_type, -1);
20472001
delete shadow;
20482002
return;
20492003
}
@@ -2059,17 +2013,8 @@ void W3DProjectedShadowManager::removeShadow (W3DProjectedShadow *shadow)
20592013
prev_shadow->m_next=shadow->m_next;
20602014
else
20612015
m_shadowList=shadow->m_next;
2062-
switch (shadow->m_type)
2063-
{
2064-
case SHADOW_DECAL:
2065-
m_numDecalShadows--;
2066-
break;
2067-
case SHADOW_PROJECTION:
2068-
m_numProjectionShadows--;
2069-
break;
2070-
default:
2071-
break;
2072-
}
2016+
2017+
updateShadowNumbers(shadow->m_type, -1);
20732018
delete shadow;
20742019
return;
20752020
}
@@ -2104,6 +2049,23 @@ void W3DProjectedShadowManager::removeAllShadows(void)
21042049
}
21052050
}
21062051

2052+
void W3DProjectedShadowManager::updateShadowNumbers(ShadowType shadowType, Int addNum)
2053+
{
2054+
switch (shadowType)
2055+
{
2056+
case SHADOW_DECAL:
2057+
case SHADOW_ALPHA_DECAL:
2058+
case SHADOW_ADDITIVE_DECAL:
2059+
m_numDecalShadows += addNum;
2060+
break;
2061+
case SHADOW_PROJECTION:
2062+
m_numProjectionShadows += addNum;
2063+
break;
2064+
default:
2065+
break;
2066+
}
2067+
}
2068+
21072069
#if defined(RTS_DEBUG)
21082070
void W3DProjectedShadow::getRenderCost(RenderCost & rc) const
21092071
{

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ class W3DProjectedShadowManager : public ProjectedShadowManager
7878

7979
private:
8080
Int renderProjectedTerrainShadow(W3DProjectedShadow *shadow, AABoxClass &box); ///<render shadow on map terrain.
81+
void updateShadowNumbers(ShadowType shadowType, Int addNum);
8182

83+
private:
8284
W3DProjectedShadow *m_shadowList;
8385
W3DProjectedShadow *m_decalList;
8486
TextureClass *m_dynamicRenderTarget; ///<offscreen video memory texture used to render all shadow textures.

GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Shadow/W3DProjectedShadow.cpp

Lines changed: 24 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,20 +1566,7 @@ Shadow* W3DProjectedShadowManager::addDecal(Shadow::ShadowTypeInfo *shadowInfo)
15661566
m_decalList = shadow;
15671567
}
15681568

1569-
switch (shadow->m_type)
1570-
{
1571-
case SHADOW_DECAL:
1572-
case SHADOW_ALPHA_DECAL:
1573-
case SHADOW_ADDITIVE_DECAL:
1574-
m_numDecalShadows++;
1575-
break;
1576-
case SHADOW_PROJECTION:
1577-
m_numProjectionShadows++;
1578-
break;
1579-
default:
1580-
break;
1581-
}
1582-
1569+
updateShadowNumbers(shadow->m_type, +1);
15831570
return shadow;
15841571
}
15851572

@@ -1703,20 +1690,7 @@ Shadow* W3DProjectedShadowManager::addDecal(RenderObjClass *robj, Shadow::Shadow
17031690
m_decalList = shadow;
17041691
}
17051692

1706-
switch (shadow->m_type)
1707-
{
1708-
case SHADOW_DECAL:
1709-
case SHADOW_ALPHA_DECAL:
1710-
case SHADOW_ADDITIVE_DECAL:
1711-
m_numDecalShadows++;
1712-
break;
1713-
case SHADOW_PROJECTION:
1714-
m_numProjectionShadows++;
1715-
break;
1716-
default:
1717-
break;
1718-
}
1719-
1693+
updateShadowNumbers(shadow->m_type, +1);
17201694
return shadow;
17211695
}
17221696

@@ -1902,18 +1876,7 @@ W3DProjectedShadow* W3DProjectedShadowManager::addShadow(RenderObjClass *robj, S
19021876
m_shadowList = shadow;
19031877
}
19041878

1905-
switch (shadow->m_type)
1906-
{
1907-
case SHADOW_DECAL:
1908-
m_numDecalShadows++;
1909-
break;
1910-
case SHADOW_PROJECTION:
1911-
m_numProjectionShadows++;
1912-
break;
1913-
default:
1914-
break;
1915-
}
1916-
1879+
updateShadowNumbers(shadow->m_type, +1);
19171880
return shadow;
19181881
}
19191882

@@ -2033,17 +1996,8 @@ void W3DProjectedShadowManager::removeShadow (W3DProjectedShadow *shadow)
20331996
prev_shadow->m_next=shadow->m_next;
20341997
else
20351998
m_decalList=shadow->m_next;
2036-
switch (shadow->m_type)
2037-
{
2038-
case SHADOW_DECAL:
2039-
m_numDecalShadows--;
2040-
break;
2041-
case SHADOW_PROJECTION:
2042-
m_numProjectionShadows--;
2043-
break;
2044-
default:
2045-
break;
2046-
}
1999+
2000+
updateShadowNumbers(shadow->m_type, -1);
20472001
delete shadow;
20482002
return;
20492003
}
@@ -2059,17 +2013,8 @@ void W3DProjectedShadowManager::removeShadow (W3DProjectedShadow *shadow)
20592013
prev_shadow->m_next=shadow->m_next;
20602014
else
20612015
m_shadowList=shadow->m_next;
2062-
switch (shadow->m_type)
2063-
{
2064-
case SHADOW_DECAL:
2065-
m_numDecalShadows--;
2066-
break;
2067-
case SHADOW_PROJECTION:
2068-
m_numProjectionShadows--;
2069-
break;
2070-
default:
2071-
break;
2072-
}
2016+
2017+
updateShadowNumbers(shadow->m_type, -1);
20732018
delete shadow;
20742019
return;
20752020
}
@@ -2104,6 +2049,23 @@ void W3DProjectedShadowManager::removeAllShadows(void)
21042049
}
21052050
}
21062051

2052+
void W3DProjectedShadowManager::updateShadowNumbers(ShadowType shadowType, Int addNum)
2053+
{
2054+
switch (shadowType)
2055+
{
2056+
case SHADOW_DECAL:
2057+
case SHADOW_ALPHA_DECAL:
2058+
case SHADOW_ADDITIVE_DECAL:
2059+
m_numDecalShadows += addNum;
2060+
break;
2061+
case SHADOW_PROJECTION:
2062+
m_numProjectionShadows += addNum;
2063+
break;
2064+
default:
2065+
break;
2066+
}
2067+
}
2068+
21072069
#if defined(RTS_DEBUG)
21082070
void W3DProjectedShadow::getRenderCost(RenderCost & rc) const
21092071
{

0 commit comments

Comments
 (0)