Skip to content

Commit 9f01206

Browse files
authored
An option to flip UV on material lines (#2193)
1 parent 1fbb303 commit 9f01206

File tree

6 files changed

+41
-22
lines changed

6 files changed

+41
-22
lines changed

Client/core/Graphics/CGraphics.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -844,7 +844,7 @@ void CGraphics::DrawLine3DQueued(const CVector& vecBegin, const CVector& vecEnd,
844844
}
845845

846846
void CGraphics::DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, CMaterialItem* pMaterial,
847-
float fU, float fV, float fSizeU, float fSizeV, bool bRelativeUV, bool bUseFaceToward, const CVector& vecFaceToward,
847+
float fU, float fV, float fSizeU, float fSizeV, bool bRelativeUV, bool bFlipUV, bool bUseFaceToward, const CVector& vecFaceToward,
848848
bool bPostGUI)
849849
{
850850
if (g_pCore->IsWindowMinimized())
@@ -858,10 +858,10 @@ void CGraphics::DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector&
858858

859859
// Add it to the queue
860860
if (bPostGUI && !CCore::GetSingleton().IsMenuVisible())
861-
m_pMaterialLine3DBatcherPostGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bUseFaceToward,
861+
m_pMaterialLine3DBatcherPostGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bFlipUV, bUseFaceToward,
862862
vecFaceToward);
863863
else
864-
m_pMaterialLine3DBatcherPreGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bUseFaceToward,
864+
m_pMaterialLine3DBatcherPreGUI->AddLine3D(vecBegin, vecEnd, fWidth, ulColor, pMaterial, fU, fV, fSizeU, fSizeV, bRelativeUV, bFlipUV, bUseFaceToward,
865865
vecFaceToward);
866866
}
867867

Client/core/Graphics/CGraphics.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ class CGraphics : public CGraphicsInterface, public CSingleton<CGraphics>
138138
void DrawLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, bool bPostGUI);
139139

140140
void DrawMaterialLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, CMaterialItem* pMaterial, float fU = 0,
141-
float fV = 0, float fSizeU = 1, float fSizeV = 1, bool bRelativeUV = true, bool bUseFaceToward = false,
142-
const CVector& vecFaceToward = CVector(), bool bPostGUI = false);
141+
float fV = 0, float fSizeU = 1, float fSizeV = 1, bool bRelativeUV = true, bool bFlipUV = false, bool bUseFaceToward = false,
142+
const CVector& vecFaceToward = CVector(), bool bPostGUI = false) override;
143143

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

Client/core/Graphics/CMaterialLine3DBatcher.cpp

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,26 @@ void CMaterialLine3DBatcher::DrawBatch(const CVector& vecCameraPos, uint* pBatch
235235
const CVector vecA1 = item.vecFrom - vecShift;
236236
const CVector vecB1 = item.vecTo - vecShift;
237237

238-
WRITE_PDT_VERTEX(pBuffer, vecA1.fX, vecA1.fY, vecA1.fZ, ulColor, item.fU1, item.fV1);
239-
WRITE_PDT_VERTEX(pBuffer, vecA2.fX, vecA2.fY, vecA2.fZ, ulColor, item.fU2, item.fV1);
240-
WRITE_PDT_VERTEX(pBuffer, vecB1.fX, vecB1.fY, vecB1.fZ, ulColor, item.fU1, item.fV2);
238+
if (item.bFlipUV)
239+
{
240+
WRITE_PDT_VERTEX(pBuffer, vecA1.fX, vecA1.fY, vecA1.fZ, ulColor, item.fU1, item.fV2);
241+
WRITE_PDT_VERTEX(pBuffer, vecA2.fX, vecA2.fY, vecA2.fZ, ulColor, item.fU1, item.fV1);
242+
WRITE_PDT_VERTEX(pBuffer, vecB1.fX, vecB1.fY, vecB1.fZ, ulColor, item.fU2, item.fV2);
241243

242-
WRITE_PDT_VERTEX(pBuffer, vecA2.fX, vecA2.fY, vecA2.fZ, ulColor, item.fU2, item.fV1);
243-
WRITE_PDT_VERTEX(pBuffer, vecB2.fX, vecB2.fY, vecB2.fZ, ulColor, item.fU2, item.fV2);
244-
WRITE_PDT_VERTEX(pBuffer, vecB1.fX, vecB1.fY, vecB1.fZ, ulColor, item.fU1, item.fV2);
244+
WRITE_PDT_VERTEX(pBuffer, vecA2.fX, vecA2.fY, vecA2.fZ, ulColor, item.fU1, item.fV1);
245+
WRITE_PDT_VERTEX(pBuffer, vecB2.fX, vecB2.fY, vecB2.fZ, ulColor, item.fU2, item.fV1);
246+
WRITE_PDT_VERTEX(pBuffer, vecB1.fX, vecB1.fY, vecB1.fZ, ulColor, item.fU2, item.fV2);
247+
}
248+
else
249+
{
250+
WRITE_PDT_VERTEX(pBuffer, vecA1.fX, vecA1.fY, vecA1.fZ, ulColor, item.fU1, item.fV1);
251+
WRITE_PDT_VERTEX(pBuffer, vecA2.fX, vecA2.fY, vecA2.fZ, ulColor, item.fU2, item.fV1);
252+
WRITE_PDT_VERTEX(pBuffer, vecB1.fX, vecB1.fY, vecB1.fZ, ulColor, item.fU1, item.fV2);
253+
254+
WRITE_PDT_VERTEX(pBuffer, vecA2.fX, vecA2.fY, vecA2.fZ, ulColor, item.fU2, item.fV1);
255+
WRITE_PDT_VERTEX(pBuffer, vecB2.fX, vecB2.fY, vecB2.fZ, ulColor, item.fU2, item.fV2);
256+
WRITE_PDT_VERTEX(pBuffer, vecB1.fX, vecB1.fY, vecB1.fZ, ulColor, item.fU1, item.fV2);
257+
}
245258
}
246259

247260
// Set vertex stream
@@ -310,7 +323,7 @@ void CMaterialLine3DBatcher::DrawBatch(const CVector& vecCameraPos, uint* pBatch
310323
//
311324
////////////////////////////////////////////////////////////////
312325
void CMaterialLine3DBatcher::AddLine3D(const CVector& vecFrom, const CVector& vecTo, float fWidth, ulong ulColor, CMaterialItem* pMaterial, float fU, float fV,
313-
float fSizeU, float fSizeV, bool bRelativeUV, bool bUseFaceToward, const CVector& vecFaceToward)
326+
float fSizeU, float fSizeV, bool bRelativeUV, bool bFlipUV, bool bUseFaceToward, const CVector& vecFaceToward)
314327
{
315328
if (!pMaterial)
316329
return;
@@ -330,6 +343,7 @@ void CMaterialLine3DBatcher::AddLine3D(const CVector& vecFrom, const CVector& ve
330343
item.fV1 = fV;
331344
item.fU2 = fU + fSizeU;
332345
item.fV2 = fV + fSizeV;
346+
item.bFlipUV = bFlipUV;
333347
if (!bRelativeUV)
334348
{
335349
// If UV's are absolute pixels, then scale the range to 0.0f - 1.0f.

Client/core/Graphics/CMaterialLine3DBatcher.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ struct SMaterialLine3DItem
1919
CMaterialItem* pMaterial;
2020
float fU1, fV1;
2121
float fU2, fV2;
22+
bool bFlipUV;
2223
float fWidth;
2324
ulong ulColor;
2425
bool bUseFaceToward;
@@ -39,7 +40,7 @@ class CMaterialLine3DBatcher
3940
void Flush();
4041
bool HasItems() { return !m_LineList.empty(); }
4142
void AddLine3D(const CVector& vecFrom, const CVector& vecTo, float fWidth, ulong ulColor, CMaterialItem* pMaterial, float fU, float fV, float fSizeU,
42-
float fSizeV, bool bRelativeUV, bool bUseFaceToward, const CVector& vecFaceToward);
43+
float fSizeV, bool bRelativeUV, bool bFlipUV, bool bUseFaceToward, const CVector& vecFaceToward);
4344

4445
protected:
4546
void DrawBatch(const CVector& vecCameraPos, uint* pBatchIndices, uint uiNumBatchLines, CMaterialItem* pMaterial);

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,14 @@ int CLuaDrawingDefs::DxDrawLine3D(lua_State* luaVM)
214214

215215
int CLuaDrawingDefs::DxDrawMaterialLine3D(lua_State* luaVM)
216216
{
217-
// bool dxDrawMaterialLine3D ( float startX, float startY, float startZ, float endX, float endY, float endZ, element material, int width [, int color =
217+
// bool dxDrawMaterialLine3D ( float startX, float startY, float startZ, float endX, float endY, float endZ, [bool flipUV,] element material, int width [, int color =
218218
// white,
219219
// float faceX, float faceY, float faceZ ] )
220220
CVector vecBegin;
221221
CVector vecEnd;
222+
bool bFlipUV;
222223
CClientMaterial* pMaterial;
223-
float fWidth;
224+
float fWidth;
224225
SColor color;
225226
bool bPostGUI;
226227
CVector vecFaceToward;
@@ -229,8 +230,9 @@ int CLuaDrawingDefs::DxDrawMaterialLine3D(lua_State* luaVM)
229230
CScriptArgReader argStream(luaVM);
230231
argStream.ReadVector3D(vecBegin);
231232
argStream.ReadVector3D(vecEnd);
233+
argStream.ReadIfNextIsBool(bFlipUV, false);
232234
argStream.ReadUserData(pMaterial);
233-
argStream.ReadNumber(fWidth);
235+
argStream.ReadNumber(fWidth);
234236
argStream.ReadColor(color, 0xFFFFFFFF);
235237
argStream.ReadIfNextIsBool(bPostGUI, false);
236238
if (argStream.NextIsVector3D())
@@ -241,7 +243,7 @@ int CLuaDrawingDefs::DxDrawMaterialLine3D(lua_State* luaVM)
241243

242244
if (!argStream.HasErrors())
243245
{
244-
g_pCore->GetGraphics()->DrawMaterialLine3DQueued(vecBegin, vecEnd, fWidth, color, pMaterial->GetMaterialItem(), 0, 0, 1, 1, true, bUseFaceToward,
246+
g_pCore->GetGraphics()->DrawMaterialLine3DQueued(vecBegin, vecEnd, fWidth, color, pMaterial->GetMaterialItem(), 0, 0, 1, 1, true, bFlipUV, bUseFaceToward,
245247
vecFaceToward, bPostGUI);
246248
lua_pushboolean(luaVM, true);
247249
return 1;
@@ -258,13 +260,14 @@ int CLuaDrawingDefs::DxDrawMaterialSectionLine3D(lua_State* luaVM)
258260
{
259261
// bool dxDrawMaterialSectionLine3D ( float startX, float startY, float startZ, float endX, float endY, float endZ, float u, float v, float usize, float
260262
// vsize,
261-
// element material, int width, [ int color = white, float faceX, float faceY, float faceZ ] )
263+
// [bool flipUV,] element material, int width, [int color = white, float faceX, float faceY, float faceZ ] )
262264
CVector vecBegin;
263265
CVector vecEnd;
264266
CVector2D vecSectionPos;
265267
CVector2D vecSectionSize;
268+
bool bFlipUV;
266269
CClientMaterial* pMaterial;
267-
float fWidth;
270+
float fWidth;
268271
SColor color;
269272
bool bPostGUI;
270273
CVector vecFaceToward;
@@ -275,8 +278,9 @@ int CLuaDrawingDefs::DxDrawMaterialSectionLine3D(lua_State* luaVM)
275278
argStream.ReadVector3D(vecEnd);
276279
argStream.ReadVector2D(vecSectionPos);
277280
argStream.ReadVector2D(vecSectionSize);
281+
argStream.ReadIfNextIsBool(bFlipUV, false);
278282
argStream.ReadUserData(pMaterial);
279-
argStream.ReadNumber(fWidth);
283+
argStream.ReadNumber(fWidth);
280284
argStream.ReadColor(color, 0xFFFFFFFF);
281285
argStream.ReadIfNextIsBool(bPostGUI, false);
282286
if (argStream.NextIsVector3D())
@@ -288,7 +292,7 @@ int CLuaDrawingDefs::DxDrawMaterialSectionLine3D(lua_State* luaVM)
288292
if (!argStream.HasErrors())
289293
{
290294
g_pCore->GetGraphics()->DrawMaterialLine3DQueued(vecBegin, vecEnd, fWidth, color, pMaterial->GetMaterialItem(), vecSectionPos.fX, vecSectionPos.fY,
291-
vecSectionSize.fX, vecSectionSize.fY, false, bUseFaceToward, vecFaceToward, bPostGUI);
295+
vecSectionSize.fX, vecSectionSize.fY, false, bFlipUV, bUseFaceToward, vecFaceToward, bPostGUI);
292296
lua_pushboolean(luaVM, true);
293297
return 1;
294298
}

Client/sdk/core/CGraphicsInterface.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class CGraphicsInterface
147147
virtual void DrawLine3DQueued(const CVector& vecBegin, const CVector& vecEnd, float fWidth, unsigned long ulColor, bool bPostGUI) = 0;
148148

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

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

0 commit comments

Comments
 (0)