Skip to content

Commit

Permalink
Render stages for 3D primitives (multitheftauto#3402)
Browse files Browse the repository at this point in the history
  • Loading branch information
tederis authored May 25, 2024
1 parent c3cef61 commit 8414476
Show file tree
Hide file tree
Showing 14 changed files with 142 additions and 60 deletions.
4 changes: 4 additions & 0 deletions Client/core/CCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2014,6 +2014,10 @@ void CCore::OnPreHUDRender()

CGraphics::GetSingleton().EnteringMTARenderZone();

// Draw post-fx 3D primitives
CGraphics::GetSingleton().DrawPrimitive3DPostFXQueue();
CGraphics::GetSingleton().DrawLine3DPostFXQueue();

// Maybe capture screen and other stuff
CGraphics::GetSingleton().GetRenderItemManager()->DoPulse();

Expand Down
62 changes: 48 additions & 14 deletions Client/core/Graphics/CGraphics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,16 @@ CGraphics::CGraphics(CLocalGUI* pGUI)
m_pRenderItemManager = new CRenderItemManager();
m_pTileBatcher = new CTileBatcher();
m_pLine3DBatcherPreGUI = new CLine3DBatcher(true);
m_pLine3DBatcherPostFX = new CLine3DBatcher(true);
m_pLine3DBatcherPostGUI = new CLine3DBatcher(false);
m_pMaterialLine3DBatcherPreGUI = new CMaterialLine3DBatcher(true);
m_pMaterialLine3DBatcherPostFX = new CMaterialLine3DBatcher(true);
m_pMaterialLine3DBatcherPostGUI = new CMaterialLine3DBatcher(false);
m_pPrimitive3DBatcherPreGUI = new CPrimitive3DBatcher(true);
m_pPrimitive3DBatcherPostFX = new CPrimitive3DBatcher(true);
m_pPrimitive3DBatcherPostGUI = new CPrimitive3DBatcher(false);
m_pMaterialPrimitive3DBatcherPreGUI = new CMaterialPrimitive3DBatcher(true, this);
m_pMaterialPrimitive3DBatcherPostFX = new CMaterialPrimitive3DBatcher(true, this);
m_pMaterialPrimitive3DBatcherPostGUI = new CMaterialPrimitive3DBatcher(false, this);
m_pPrimitiveBatcher = new CPrimitiveBatcher();
m_pPrimitiveMaterialBatcher = new CPrimitiveMaterialBatcher(this);
Expand All @@ -83,14 +87,18 @@ CGraphics::~CGraphics()
SAFE_DELETE(m_pRenderItemManager);
SAFE_DELETE(m_pTileBatcher);
SAFE_DELETE(m_pLine3DBatcherPreGUI);
SAFE_DELETE(m_pLine3DBatcherPostFX);
SAFE_DELETE(m_pLine3DBatcherPostGUI);
SAFE_DELETE(m_pMaterialLine3DBatcherPreGUI);
SAFE_DELETE(m_pMaterialLine3DBatcherPostFX);
SAFE_DELETE(m_pMaterialLine3DBatcherPostGUI);
SAFE_DELETE(m_pPrimitiveBatcher);
SAFE_DELETE(m_pPrimitiveMaterialBatcher);
SAFE_DELETE(m_pPrimitive3DBatcherPreGUI);
SAFE_DELETE(m_pPrimitive3DBatcherPostFX);
SAFE_DELETE(m_pPrimitive3DBatcherPostGUI);
SAFE_DELETE(m_pMaterialPrimitive3DBatcherPreGUI);
SAFE_DELETE(m_pMaterialPrimitive3DBatcherPostFX);
SAFE_DELETE(m_pMaterialPrimitive3DBatcherPostGUI);
SAFE_DELETE(m_pScreenGrabber);
SAFE_DELETE(m_pPixelsManager);
Expand Down Expand Up @@ -207,7 +215,7 @@ void CGraphics::DrawStringOutline(const RECT& rect, unsigned long ulColor, const

void CGraphics::DrawLine3D(const CVector& vecBegin, const CVector& vecEnd, unsigned long ulColor, float fWidth)
{
DrawLine3DQueued(vecBegin, vecEnd, fWidth, ulColor, true);
DrawLine3DQueued(vecBegin, vecEnd, fWidth, ulColor, eRenderStage::POST_GUI);
}

void CGraphics::DrawRectangleInternal(float fX, float fY, float fWidth, float fHeight, unsigned long ulColor, bool bSubPixelPositioning)
Expand Down Expand Up @@ -831,21 +839,23 @@ void CGraphics::DrawLineQueued(float fX1, float fY1, float fX2, float fY2, float
AddQueueItem(Item, bPostGUI);
}

void CGraphics::DrawLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, bool bPostGUI)
void CGraphics::DrawLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, eRenderStage stage)
{
if (g_pCore->IsWindowMinimized())
return;

// Add it to the queue
if (bPostGUI && !CCore::GetSingleton().IsMenuVisible())
if (stage == eRenderStage::POST_GUI && !CCore::GetSingleton().IsMenuVisible())
m_pLine3DBatcherPostGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor);
else
else if (stage == eRenderStage::PRE_FX)
m_pLine3DBatcherPreGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor);
else
m_pLine3DBatcherPostFX->AddLine3D(vecBegin, vecEnd, fWidth, ulColor);
}

void CGraphics::DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, CMaterialItem* pMaterial,
float fU, float fV, float fSizeU, float fSizeV, bool bRelativeUV, bool bFlipUV, bool bUseFaceToward,
const CVector& vecFaceToward, bool bPostGUI)
const CVector& vecFaceToward, eRenderStage stage)
{
if (g_pCore->IsWindowMinimized())
return;
Expand All @@ -857,12 +867,15 @@ void CGraphics::DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector&
}

// Add it to the queue
if (bPostGUI && !CCore::GetSingleton().IsMenuVisible())
if (stage == eRenderStage::POST_GUI && !CCore::GetSingleton().IsMenuVisible())
m_pMaterialLine3DBatcherPostGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bFlipUV, bUseFaceToward,
vecFaceToward);
else
else if (stage == eRenderStage::PRE_FX)
m_pMaterialLine3DBatcherPreGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bFlipUV, bUseFaceToward,
vecFaceToward);
else
m_pMaterialLine3DBatcherPostFX->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bFlipUV, bUseFaceToward,
vecFaceToward);
}

void CGraphics::DrawRectQueued(float fX, float fY, float fWidth, float fHeight, unsigned long ulColor, bool bPostGUI, bool bSubPixelPositioning)
Expand Down Expand Up @@ -939,7 +952,7 @@ void CGraphics::DrawPrimitiveQueued(std::vector<PrimitiveVertice>* pVecVertices,
AddQueueItem(Item, bPostGUI);
}

void CGraphics::DrawPrimitive3DQueued(std::vector<PrimitiveVertice>* pVecVertices, D3DPRIMITIVETYPE eType, bool bPostGUI)
void CGraphics::DrawPrimitive3DQueued(std::vector<PrimitiveVertice>* pVecVertices, D3DPRIMITIVETYPE eType, eRenderStage stage)
{
// Prevent queuing when minimized
if (g_pCore->IsWindowMinimized())
Expand All @@ -949,14 +962,16 @@ void CGraphics::DrawPrimitive3DQueued(std::vector<PrimitiveVertice>* pVecVertice
}

// Add it to the queue
if (bPostGUI && !CCore::GetSingleton().IsMenuVisible())
if (stage == eRenderStage::POST_GUI && !CCore::GetSingleton().IsMenuVisible())
m_pPrimitive3DBatcherPostGUI->AddPrimitive(eType, pVecVertices);
else
else if (stage == eRenderStage::PRE_FX)
m_pPrimitive3DBatcherPreGUI->AddPrimitive(eType, pVecVertices);
else
m_pPrimitive3DBatcherPostFX->AddPrimitive(eType, pVecVertices);
}

void CGraphics::DrawMaterialPrimitive3DQueued(std::vector<PrimitiveMaterialVertice>* pVecVertices, D3DPRIMITIVETYPE eType, CMaterialItem* pMaterial,
bool bPostGUI)
eRenderStage stage)
{
// Prevent queuing when minimized
if (g_pCore->IsWindowMinimized())
Expand All @@ -972,10 +987,13 @@ void CGraphics::DrawMaterialPrimitive3DQueued(std::vector<PrimitiveMaterialVerti
}

// Add it to the queue
if (bPostGUI && !CCore::GetSingleton().IsMenuVisible())
if (stage == eRenderStage::POST_GUI && !CCore::GetSingleton().IsMenuVisible())
m_pMaterialPrimitive3DBatcherPostGUI->AddPrimitive(eType, pMaterial, pVecVertices);
else
else if (stage == eRenderStage::PRE_FX)
m_pMaterialPrimitive3DBatcherPreGUI->AddPrimitive(eType, pMaterial, pVecVertices);
else
m_pMaterialPrimitive3DBatcherPostFX->AddPrimitive(eType, pMaterial, pVecVertices);

}

void CGraphics::DrawMaterialPrimitiveQueued(std::vector<PrimitiveMaterialVertice>* pVecVertices, D3DPRIMITIVETYPE eType, CMaterialItem* pMaterial,
Expand Down Expand Up @@ -1515,14 +1533,18 @@ void CGraphics::OnDeviceCreate(IDirect3DDevice9* pDevice)

m_pTileBatcher->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pLine3DBatcherPreGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pLine3DBatcherPostFX->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pLine3DBatcherPostGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pMaterialLine3DBatcherPreGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pMaterialLine3DBatcherPostFX->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pMaterialLine3DBatcherPostGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pPrimitiveBatcher->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pPrimitiveMaterialBatcher->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pPrimitive3DBatcherPreGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pPrimitive3DBatcherPostFX->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pPrimitive3DBatcherPostGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pMaterialPrimitive3DBatcherPreGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pMaterialPrimitive3DBatcherPostFX->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pMaterialPrimitive3DBatcherPostGUI->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pRenderItemManager->OnDeviceCreate(pDevice, GetViewportWidth(), GetViewportHeight());
m_pScreenGrabber->OnDeviceCreate(pDevice);
Expand Down Expand Up @@ -1612,6 +1634,12 @@ void CGraphics::DrawLine3DPreGUIQueue()
m_pMaterialLine3DBatcherPreGUI->Flush();
}

void CGraphics::DrawLine3DPostFXQueue(void)
{
m_pLine3DBatcherPostFX->Flush();
m_pMaterialLine3DBatcherPostFX->Flush();
}

void CGraphics::DrawPrimitive3DPreGUIQueue(void)
{
m_pPrimitive3DBatcherPreGUI->Flush();
Expand All @@ -1623,6 +1651,12 @@ bool CGraphics::HasLine3DPreGUIQueueItems(void)
return m_pLine3DBatcherPreGUI->HasItems() || m_pMaterialLine3DBatcherPreGUI->HasItems();
}

void CGraphics::DrawPrimitive3DPostFXQueue(void)
{
m_pPrimitive3DBatcherPostFX->Flush();
m_pMaterialPrimitive3DBatcherPostFX->Flush();
}

bool CGraphics::HasPrimitive3DPreGUIQueueItems(void)
{
return m_pMaterialPrimitive3DBatcherPreGUI->HasItems() || m_pPrimitive3DBatcherPreGUI->HasItems();
Expand Down Expand Up @@ -2519,6 +2553,6 @@ void CGraphics::DrawWiredSphere(CVector vecPosition, float fRadius, SColor color
{
const CVector& vecBegin = model.vertexList[i] * fRadius + vecPosition;
const CVector& vecEnd = model.vertexList[i + 1] * fRadius + vecPosition;
DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, false);
DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}
16 changes: 11 additions & 5 deletions Client/core/Graphics/CGraphics.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,11 +135,11 @@ class CGraphics : public CGraphicsInterface, public CSingleton<CGraphics>
// Queued up drawing funcs
void DrawLineQueued(float fX1, float fY1, float fX2, float fY2, float fWidth, unsigned long ulColor, bool bPostGUI);

void DrawLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, bool bPostGUI);
void DrawLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, eRenderStage stage = eRenderStage::PRE_FX);

void DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, CMaterialItem* pMaterial, float fU = 0,
float fV = 0, float fSizeU = 1, float fSizeV = 1, bool bRelativeUV = true, bool bFlipUV = false, bool bUseFaceToward = false,
const CVector& vecFaceToward = CVector(), bool bPostGUI = false) override;
const CVector& vecFaceToward = CVector(), eRenderStage stage = eRenderStage::PRE_FX) override;

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

Expand All @@ -153,8 +153,8 @@ class CGraphics : public CGraphicsInterface, public CSingleton<CGraphics>
void DrawPrimitiveQueued(std::vector<PrimitiveVertice>* pVecVertices, D3DPRIMITIVETYPE eType, bool bPostGUI = false);
void DrawMaterialPrimitiveQueued(std::vector<PrimitiveMaterialVertice>* vertices, D3DPRIMITIVETYPE type, CMaterialItem* pMaterial, bool bPostGUI);

void DrawPrimitive3DQueued(std::vector<PrimitiveVertice>* pVecVertices, D3DPRIMITIVETYPE eType, bool bPostGUI);
void DrawMaterialPrimitive3DQueued(std::vector<PrimitiveMaterialVertice>* pVecVertices, D3DPRIMITIVETYPE eType, CMaterialItem* pMaterial, bool bPostGUI);
void DrawPrimitive3DQueued(std::vector<PrimitiveVertice>* pVecVertices, D3DPRIMITIVETYPE eType, eRenderStage stage = eRenderStage::PRE_FX);
void DrawMaterialPrimitive3DQueued(std::vector<PrimitiveMaterialVertice>* pVecVertices, D3DPRIMITIVETYPE eType, CMaterialItem* pMaterial, eRenderStage stage = eRenderStage::PRE_FX);

void DrawCircleQueued(float fX, float fY, float fRadius, float fStartAngle, float fStopAngle, unsigned long ulColor, unsigned long ulColorCenter,
short siSegments, float fRatio, bool bPostGUI);
Expand Down Expand Up @@ -188,7 +188,9 @@ class CGraphics : public CGraphicsInterface, public CSingleton<CGraphics>
void DrawPreGUIQueue(void);
void DrawPostGUIQueue(void);
void DrawLine3DPreGUIQueue(void);
void DrawLine3DPostFXQueue(void);
bool HasLine3DPreGUIQueueItems(void);
void DrawPrimitive3DPostFXQueue(void);
void DrawPrimitive3DPreGUIQueue(void);
bool HasPrimitive3DPreGUIQueueItems(void);

Expand Down Expand Up @@ -226,14 +228,18 @@ class CGraphics : public CGraphicsInterface, public CSingleton<CGraphics>
CPixelsManagerInterface* m_pPixelsManager = nullptr;
CTileBatcher* m_pTileBatcher = nullptr;
CLine3DBatcher* m_pLine3DBatcherPreGUI = nullptr;
CLine3DBatcher* m_pLine3DBatcherPostFX = nullptr;
CLine3DBatcher* m_pLine3DBatcherPostGUI = nullptr;
CMaterialLine3DBatcher* m_pMaterialLine3DBatcherPreGUI = nullptr;
CMaterialLine3DBatcher* m_pMaterialLine3DBatcherPostFX = nullptr;
CMaterialLine3DBatcher* m_pMaterialLine3DBatcherPostGUI = nullptr;
CPrimitiveBatcher* m_pPrimitiveBatcher = nullptr;
CPrimitiveMaterialBatcher* m_pPrimitiveMaterialBatcher = nullptr;
CPrimitive3DBatcher* m_pPrimitive3DBatcherPreGUI = nullptr;
CPrimitive3DBatcher* m_pPrimitive3DBatcherPostGUI = nullptr;
CPrimitive3DBatcher* m_pPrimitive3DBatcherPostFX = nullptr;
CPrimitive3DBatcher* m_pPrimitive3DBatcherPostGUI = nullptr;
CMaterialPrimitive3DBatcher* m_pMaterialPrimitive3DBatcherPreGUI = nullptr;
CMaterialPrimitive3DBatcher* m_pMaterialPrimitive3DBatcherPostFX = nullptr;
CMaterialPrimitive3DBatcher* m_pMaterialPrimitive3DBatcherPostGUI = nullptr;
CAspectRatioConverter* m_pAspectRatioConverter = nullptr;

Expand Down
4 changes: 2 additions & 2 deletions Client/mods/deathmatch/logic/CClientColCircle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ void CClientColCircle::DebugRender(const CVector& vecPosition, float fDrawRadius
{
CVector vecBegin = vertexList[i] * vecMult + vecAdd;
CVector vecEnd = vertexList[(i + 1) % uiNumPoints] * vecMult + vecAdd;
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}
}
Expand All @@ -94,7 +94,7 @@ void CClientColCircle::DebugRender(const CVector& vecPosition, float fDrawRadius
{
CVector vecBegin = vertexList[i] * vecMultB + vecAdd;
CVector vecEnd = vertexList[i] * vecMultT + vecAdd;
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}
}
6 changes: 3 additions & 3 deletions Client/mods/deathmatch/logic/CClientColCuboid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ void CClientColCuboid::DebugRender(const CVector& vecPosition, float fDrawRadius
{
const CVector& vecBegin = cornerPoints[i] * vecMult + vecAdd;
const CVector& vecEnd = cornerPoints[(i + 1) % 4] * vecMult + vecAdd;
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}
}
Expand All @@ -89,7 +89,7 @@ void CClientColCuboid::DebugRender(const CVector& vecPosition, float fDrawRadius
{
const CVector& vecBegin = cornerPoints[i] * vecMult + vecAdd;
const CVector& vecEnd = cornerPoints[(i + 1) % 4] * vecMult + vecAdd;
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}
}
Expand All @@ -108,7 +108,7 @@ void CClientColCuboid::DebugRender(const CVector& vecPosition, float fDrawRadius
{
const CVector& vecBegin = cornerPoints[i] * vecMult + vecAdd;
const CVector& vecEnd = cornerPoints[(i + 1) % 4] * vecMult + vecAdd;
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions Client/mods/deathmatch/logic/CClientColPolygon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ void CClientColPolygon::DebugRender(const CVector& vecPosition, float fDrawRadiu

CVector vecBegin(vecPointBegin.fX, vecPointBegin.fY, fZ);
CVector vecEnd(vecPointEnd.fX, vecPointEnd.fY, fZ);
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}
}
Expand All @@ -219,7 +219,7 @@ void CClientColPolygon::DebugRender(const CVector& vecPosition, float fDrawRadiu

CVector vecBegin(vecPoint.fX, vecPoint.fY, std::max(vecPosition.fZ - fDrawRadius, m_fFloor));
CVector vecEnd(vecPoint.fX, vecPoint.fY, std::min(vecPosition.fZ + fDrawRadius, m_fCeil));
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecBegin, vecEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}

Expand All @@ -231,10 +231,10 @@ void CClientColPolygon::DebugRender(const CVector& vecPosition, float fDrawRadiu

CVector vecFloorBegin(vecPointBegin.fX, vecPointBegin.fY, m_fFloor);
CVector vecFloorEnd(vecPointEnd.fX, vecPointEnd.fY, m_fFloor);
pGraphics->DrawLine3DQueued(vecFloorBegin, vecFloorEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecFloorBegin, vecFloorEnd, fLineWidth, color, eRenderStage::POST_FX);

CVector vecCeilBegin(vecPointBegin.fX, vecPointBegin.fY, m_fCeil);
CVector vecCeilEnd(vecPointEnd.fX, vecPointEnd.fY, m_fCeil);
pGraphics->DrawLine3DQueued(vecCeilBegin, vecCeilEnd, fLineWidth, color, false);
pGraphics->DrawLine3DQueued(vecCeilBegin, vecCeilEnd, fLineWidth, color, eRenderStage::POST_FX);
}
}
Loading

0 comments on commit 8414476

Please sign in to comment.