Skip to content

Commit bee6c7f

Browse files
committed
Fixed #9861 ([REQUEST] postGUI argument for dxDrawMaterialLine3D)
1 parent 98f7f4a commit bee6c7f

File tree

8 files changed

+47
-26
lines changed

8 files changed

+47
-26
lines changed

Client/core/CCore.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1870,12 +1870,12 @@ void CCore::OnDeviceRestore(void)
18701870
void CCore::OnPreFxRender(void)
18711871
{
18721872
// Don't do nothing if nothing won't be drawn
1873-
if (!CGraphics::GetSingleton().HasMaterialLine3DQueueItems())
1873+
if (!CGraphics::GetSingleton().HasLine3DPreGUIQueueItems())
18741874
return;
18751875

18761876
CGraphics::GetSingleton().EnteringMTARenderZone();
18771877

1878-
CGraphics::GetSingleton().DrawMaterialLine3DQueue();
1878+
CGraphics::GetSingleton().DrawLine3DPreGUIQueue();
18791879

18801880
CGraphics::GetSingleton().LeavingMTARenderZone();
18811881
}

Client/core/Graphics/CGraphics.cpp

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ CGraphics::CGraphics(CLocalGUI* pGUI)
4242
m_pTileBatcher = new CTileBatcher();
4343
m_pLine3DBatcherPreGUI = new CLine3DBatcher(true);
4444
m_pLine3DBatcherPostGUI = new CLine3DBatcher(false);
45-
m_pMaterialLine3DBatcher = new CMaterialLine3DBatcher();
45+
m_pMaterialLine3DBatcherPreGUI = new CMaterialLine3DBatcher(true);
46+
m_pMaterialLine3DBatcherPostGUI = new CMaterialLine3DBatcher(false);
4647

4748
m_pScreenGrabber = NewScreenGrabber();
4849
m_pPixelsManager = NewPixelsManager();
@@ -63,7 +64,8 @@ CGraphics::~CGraphics(void)
6364
SAFE_DELETE(m_pTileBatcher);
6465
SAFE_DELETE(m_pLine3DBatcherPreGUI);
6566
SAFE_DELETE(m_pLine3DBatcherPostGUI);
66-
SAFE_DELETE(m_pMaterialLine3DBatcher);
67+
SAFE_DELETE(m_pMaterialLine3DBatcherPreGUI);
68+
SAFE_DELETE(m_pMaterialLine3DBatcherPostGUI);
6769
SAFE_DELETE(m_pScreenGrabber);
6870
SAFE_DELETE(m_pPixelsManager);
6971
SAFE_DELETE(m_pAspectRatioConverter);
@@ -746,14 +748,15 @@ void CGraphics::DrawLine3DQueued(const CVector& vecBegin, const CVector& vecEnd,
746748
return;
747749

748750
// Add it to the queue
749-
if (bPostGUI)
751+
if (bPostGUI && !CCore::GetSingleton().IsMenuVisible())
750752
m_pLine3DBatcherPostGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor);
751753
else
752754
m_pLine3DBatcherPreGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor);
753755
}
754756

755757
void CGraphics::DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, CMaterialItem* pMaterial,
756-
float fU, float fV, float fSizeU, float fSizeV, bool bRelativeUV, bool bUseFaceToward, const CVector& vecFaceToward)
758+
float fU, float fV, float fSizeU, float fSizeV, bool bRelativeUV, bool bUseFaceToward, const CVector& vecFaceToward,
759+
bool bPostGUI)
757760
{
758761
if (g_pCore->IsWindowMinimized())
759762
return;
@@ -765,7 +768,12 @@ void CGraphics::DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector&
765768
}
766769

767770
// Add it to the queue
768-
m_pMaterialLine3DBatcher->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bUseFaceToward, vecFaceToward);
771+
if (bPostGUI && !CCore::GetSingleton().IsMenuVisible())
772+
m_pMaterialLine3DBatcherPostGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bUseFaceToward,
773+
vecFaceToward);
774+
else
775+
m_pMaterialLine3DBatcherPreGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bUseFaceToward,
776+
vecFaceToward);
769777
}
770778

771779
void CGraphics::DrawRectQueued(float fX, float fY, float fWidth, float fHeight, unsigned long ulColor, bool bPostGUI, bool bSubPixelPositioning)
@@ -1252,7 +1260,8 @@ void CGraphics::OnDeviceCreate(IDirect3DDevice9* pDevice)
12521260
m_pTileBatcher->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
12531261
m_pLine3DBatcherPreGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
12541262
m_pLine3DBatcherPostGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
1255-
m_pMaterialLine3DBatcher->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
1263+
m_pMaterialLine3DBatcherPreGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
1264+
m_pMaterialLine3DBatcherPostGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
12561265
m_pRenderItemManager->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
12571266
m_pScreenGrabber->OnDeviceCreate(pDevice);
12581267
m_pPixelsManager->OnDeviceCreate(pDevice);
@@ -1320,27 +1329,28 @@ void CGraphics::OnZBufferModified(void)
13201329

13211330
void CGraphics::DrawPreGUIQueue(void)
13221331
{
1323-
m_pLine3DBatcherPreGUI->Flush();
13241332
DrawQueue(m_PreGUIQueue);
13251333
}
13261334

13271335
void CGraphics::DrawPostGUIQueue(void)
13281336
{
13291337
DrawQueue(m_PostGUIQueue);
13301338
m_pLine3DBatcherPostGUI->Flush();
1339+
m_pMaterialLine3DBatcherPostGUI->Flush();
13311340

13321341
// Both queues should be empty now, and there should be no outstanding refs
13331342
assert(m_PreGUIQueue.empty() && m_iDebugQueueRefs == 0);
13341343
}
13351344

1336-
void CGraphics::DrawMaterialLine3DQueue(void)
1345+
void CGraphics::DrawLine3DPreGUIQueue(void)
13371346
{
1338-
m_pMaterialLine3DBatcher->Flush();
1347+
m_pLine3DBatcherPreGUI->Flush();
1348+
m_pMaterialLine3DBatcherPreGUI->Flush();
13391349
}
13401350

1341-
bool CGraphics::HasMaterialLine3DQueueItems(void)
1351+
bool CGraphics::HasLine3DPreGUIQueueItems(void)
13421352
{
1343-
return m_pMaterialLine3DBatcher->HasItems();
1353+
return m_pLine3DBatcherPreGUI->HasItems() || m_pMaterialLine3DBatcherPreGUI->HasItems();
13441354
}
13451355

13461356
void CGraphics::DrawQueue(std::vector<sDrawQueueItem>& Queue)

Client/core/Graphics/CGraphics.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class CGraphics : public CGraphicsInterface, public CSingleton<CGraphics>
130130

131131
void DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, CMaterialItem* pMaterial, float fU = 0,
132132
float fV = 0, float fSizeU = 1, float fSizeV = 1, bool bRelativeUV = true, bool bUseFaceToward = false,
133-
const CVector& vecFaceToward = CVector());
133+
const CVector& vecFaceToward = CVector(), bool bPostGUI = false);
134134

135135
void DrawRectQueued(float fX, float fY, float fWidth, float fHeight, unsigned long ulColor, bool bPostGUI, bool bSubPixelPositioning = false);
136136

@@ -165,8 +165,8 @@ class CGraphics : public CGraphicsInterface, public CSingleton<CGraphics>
165165
// To draw queued up drawings
166166
void DrawPreGUIQueue(void);
167167
void DrawPostGUIQueue(void);
168-
void DrawMaterialLine3DQueue(void);
169-
bool HasMaterialLine3DQueueItems(void);
168+
void DrawLine3DPreGUIQueue(void);
169+
bool HasLine3DPreGUIQueueItems(void);
170170

171171
void DidRenderScene(void);
172172
void SetProgressMessage(const SString& strMessage);
@@ -202,7 +202,8 @@ class CGraphics : public CGraphicsInterface, public CSingleton<CGraphics>
202202
CTileBatcher* m_pTileBatcher;
203203
CLine3DBatcher* m_pLine3DBatcherPreGUI;
204204
CLine3DBatcher* m_pLine3DBatcherPostGUI;
205-
CMaterialLine3DBatcher* m_pMaterialLine3DBatcher;
205+
CMaterialLine3DBatcher* m_pMaterialLine3DBatcherPreGUI;
206+
CMaterialLine3DBatcher* m_pMaterialLine3DBatcherPostGUI;
206207
CAspectRatioConverter* m_pAspectRatioConverter;
207208

208209
// Fonts

Client/core/Graphics/CLine3DBatcher.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class CLine3DBatcher
4343

4444
void OnDeviceCreate(IDirect3DDevice9* pDevice, float fViewportSizeX, float fViewportSizeY);
4545
void Flush(void);
46+
bool HasItems(void) { return !m_LineList.empty(); }
4647
void AddLine3D(const CVector& vecFrom, const CVector& vecTo, float fWidth, ulong ulColor);
4748

4849
protected:

Client/core/Graphics/CMaterialLine3DBatcher.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ SMaterialLine3DItem* CMaterialLine3DBatcher::ms_pLines = NULL;
2222
//
2323
//
2424
////////////////////////////////////////////////////////////////
25-
CMaterialLine3DBatcher::CMaterialLine3DBatcher(void)
25+
CMaterialLine3DBatcher::CMaterialLine3DBatcher(bool bPreGUI)
2626
{
27+
m_bPreGUI = bPreGUI;
2728
}
2829

2930
////////////////////////////////////////////////////////////////
@@ -80,7 +81,7 @@ void CMaterialLine3DBatcher::Flush(void)
8081
// Set render states
8182
if (g_pDeviceState->AdapterState.bRequiresClipping)
8283
m_pDevice->SetRenderState(D3DRS_CLIPPING, TRUE);
83-
m_pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
84+
m_pDevice->SetRenderState(D3DRS_ZENABLE, m_bPreGUI ? D3DZB_TRUE : D3DZB_FALSE);
8485
m_pDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL);
8586
m_pDevice->SetRenderState(D3DRS_ZWRITEENABLE, FALSE);
8687
m_pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
@@ -203,9 +204,12 @@ void CMaterialLine3DBatcher::DrawBatch(const CVector& vecCameraPos, uint* pBatch
203204
const SMaterialLine3DItem& item = m_LineList[pBatchIndices[i]];
204205

205206
SColor color = item.ulColor;
206-
color.R /= 2;
207-
color.G /= 2;
208-
color.B /= 2;
207+
if (m_bPreGUI)
208+
{
209+
color.R /= 2;
210+
color.G /= 2;
211+
color.B /= 2;
212+
}
209213
const ulong ulColor = color;
210214
const CVector& vecA = item.vecFrom;
211215
const CVector& vecB = item.vecTo;

Client/core/Graphics/CMaterialLine3DBatcher.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class CMaterialLine3DBatcher
3232
{
3333
public:
3434
ZERO_ON_NEW
35-
CMaterialLine3DBatcher(void);
35+
CMaterialLine3DBatcher(bool bPreGUI);
3636
~CMaterialLine3DBatcher(void);
3737

3838
void OnDeviceCreate(IDirect3DDevice9* pDevice, float fViewportSizeX, float fViewportSizeY);
@@ -44,6 +44,7 @@ class CMaterialLine3DBatcher
4444
protected:
4545
void DrawBatch(const CVector& vecCameraPos, uint* pBatchIndices, uint uiNumBatchLines, CMaterialItem* pMaterial);
4646

47+
bool m_bPreGUI;
4748
IDirect3DDevice9* m_pDevice;
4849
std::vector<SMaterialLine3DItem> m_LineList;
4950
static SMaterialLine3DItem* ms_pLines; // Used in sort callback

Client/mods/deathmatch/logic/luadefs/CLuaDrawingDefs.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ int CLuaDrawingDefs::DxDrawMaterialLine3D(lua_State* luaVM)
206206
CClientMaterial* pMaterial;
207207
float fWidth;
208208
SColor color;
209+
bool bPostGUI;
209210
CVector vecFaceToward;
210211
bool bUseFaceToward = false;
211212

@@ -215,6 +216,7 @@ int CLuaDrawingDefs::DxDrawMaterialLine3D(lua_State* luaVM)
215216
argStream.ReadUserData(pMaterial);
216217
argStream.ReadNumber(fWidth);
217218
argStream.ReadColor(color, 0xFFFFFFFF);
219+
argStream.ReadIfNextIsBool(bPostGUI, false);
218220
if (argStream.NextIsVector3D())
219221
{
220222
argStream.ReadVector3D(vecFaceToward);
@@ -224,7 +226,7 @@ int CLuaDrawingDefs::DxDrawMaterialLine3D(lua_State* luaVM)
224226
if (!argStream.HasErrors())
225227
{
226228
g_pCore->GetGraphics()->DrawMaterialLine3DQueued(vecBegin, vecEnd, fWidth, color, pMaterial->GetMaterialItem(), 0, 0, 1, 1, true, bUseFaceToward,
227-
vecFaceToward);
229+
vecFaceToward, bPostGUI);
228230
lua_pushboolean(luaVM, true);
229231
return 1;
230232
}
@@ -248,6 +250,7 @@ int CLuaDrawingDefs::DxDrawMaterialSectionLine3D(lua_State* luaVM)
248250
CClientMaterial* pMaterial;
249251
float fWidth;
250252
SColor color;
253+
bool bPostGUI;
251254
CVector vecFaceToward;
252255
bool bUseFaceToward = false;
253256

@@ -259,6 +262,7 @@ int CLuaDrawingDefs::DxDrawMaterialSectionLine3D(lua_State* luaVM)
259262
argStream.ReadUserData(pMaterial);
260263
argStream.ReadNumber(fWidth);
261264
argStream.ReadColor(color, 0xFFFFFFFF);
265+
argStream.ReadIfNextIsBool(bPostGUI, false);
262266
if (argStream.NextIsVector3D())
263267
{
264268
argStream.ReadVector3D(vecFaceToward);
@@ -268,7 +272,7 @@ int CLuaDrawingDefs::DxDrawMaterialSectionLine3D(lua_State* luaVM)
268272
if (!argStream.HasErrors())
269273
{
270274
g_pCore->GetGraphics()->DrawMaterialLine3DQueued(vecBegin, vecEnd, fWidth, color, pMaterial->GetMaterialItem(), vecSectionPos.fX, vecSectionPos.fY,
271-
vecSectionSize.fX, vecSectionSize.fY, false, bUseFaceToward, vecFaceToward);
275+
vecSectionSize.fX, vecSectionSize.fY, false, bUseFaceToward, vecFaceToward, bPostGUI);
272276
lua_pushboolean(luaVM, true);
273277
return 1;
274278
}

Client/sdk/core/CGraphicsInterface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class CGraphicsInterface
116116

117117
virtual void DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, CMaterialItem* pMaterial,
118118
float fU = 0, float fV = 0, float fSizeU = 1, float fSizeV = 1, bool bRelativeUV = true, bool bUseFaceToward = false,
119-
const CVector& vecFaceToward = CVector()) = 0;
119+
const CVector& vecFaceToward = CVector(), bool bPostGUI = false) = 0;
120120

121121
virtual void DrawRectQueued(float fX, float fY, float fWidth, float fHeight, unsigned long ulColor, bool bPostGUI, bool bSubPixelPositioning = false) = 0;
122122

0 commit comments

Comments
 (0)