Skip to content

Commit c79a3ac

Browse files
authored
Fix #1581: dxDrawPrimitive wrong colors with alpha <255 (#1595)
1 parent deada60 commit c79a3ac

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

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

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ int CLuaDrawingDefs::DxDrawPrimitive3D(lua_State* luaVM)
581581
argStream.ReadEnumString(ePrimitiveType);
582582
argStream.ReadBool(bPostGUI, false);
583583

584-
std::vector<float> vecTableContent;
584+
std::vector<double> vecTableContent;
585585

586586
while (argStream.NextIsTable())
587587
{
@@ -591,10 +591,12 @@ int CLuaDrawingDefs::DxDrawPrimitive3D(lua_State* luaVM)
591591
switch (vecTableContent.size())
592592
{
593593
case Primitive3DVerticeSizes::VERT_XYZ:
594-
pVecVertices->push_back(PrimitiveVertice{vecTableContent[0], vecTableContent[1], vecTableContent[2], (DWORD)0xFFFFFFFF});
594+
pVecVertices->push_back(PrimitiveVertice{static_cast<float>(vecTableContent[0]), static_cast<float>(vecTableContent[1]),
595+
static_cast<float>(vecTableContent[2]), (DWORD)0xFFFFFFFF});
595596
break;
596597
case Primitive3DVerticeSizes::VERT_XYZ_COLOR:
597-
pVecVertices->push_back(PrimitiveVertice{vecTableContent[0], vecTableContent[1], vecTableContent[2], static_cast<DWORD>(static_cast<int64_t>(vecTableContent[3]))});
598+
pVecVertices->push_back(PrimitiveVertice{static_cast<float>(vecTableContent[0]), static_cast<float>(vecTableContent[1]),
599+
static_cast<float>(vecTableContent[2]), static_cast<DWORD>(static_cast<int64_t>(vecTableContent[3]))});
598600
break;
599601
default:
600602
argStream.SetCustomError(SString("Expected table with 3 or 4 numbers, got %i numbers", vecTableContent.size()).c_str());
@@ -631,7 +633,7 @@ int CLuaDrawingDefs::DxDrawMaterialPrimitive3D(lua_State* luaVM)
631633
MixedReadMaterialString(argStream, pMaterialElement);
632634
argStream.ReadBool(bPostGUI, false);
633635

634-
std::vector<float> vecTableContent;
636+
std::vector<double> vecTableContent;
635637

636638
while (argStream.NextIsTable())
637639
{
@@ -641,12 +643,15 @@ int CLuaDrawingDefs::DxDrawMaterialPrimitive3D(lua_State* luaVM)
641643
switch (vecTableContent.size())
642644
{
643645
case Primitive3DVerticeSizes::VERT_XYZ_UV:
644-
pVecVertices->push_back(PrimitiveMaterialVertice{vecTableContent[0], vecTableContent[1], vecTableContent[2], (DWORD)0xFFFFFFFF,
645-
vecTableContent[3], vecTableContent[4]});
646+
pVecVertices->push_back(PrimitiveMaterialVertice{static_cast<float>(vecTableContent[0]), static_cast<float>(vecTableContent[1]),
647+
static_cast<float>(vecTableContent[2]), (DWORD)0xFFFFFFFF,
648+
static_cast<float>(vecTableContent[3]), static_cast<float>(vecTableContent[4])});
646649
break;
647650
case Primitive3DVerticeSizes::VERT_XYZ_COLOR_UV:
648-
pVecVertices->push_back(PrimitiveMaterialVertice{vecTableContent[0], vecTableContent[1], vecTableContent[2],
649-
static_cast<DWORD>(static_cast<int64_t>(vecTableContent[3])), vecTableContent[4], vecTableContent[5]});
651+
pVecVertices->push_back(PrimitiveMaterialVertice{static_cast<float>(vecTableContent[0]), static_cast<float>(vecTableContent[1]),
652+
static_cast<float>(vecTableContent[2]),
653+
static_cast<DWORD>(static_cast<int64_t>(vecTableContent[3])),
654+
static_cast<float>(vecTableContent[4]), static_cast<float>(vecTableContent[5])});
650655
break;
651656
default:
652657
argStream.SetCustomError(SString("Expected table with 5 or 6 numbers, got %i numbers", vecTableContent.size()).c_str());
@@ -681,7 +686,7 @@ int CLuaDrawingDefs::DxDrawPrimitive(lua_State* luaVM)
681686
argStream.ReadEnumString(ePrimitiveType);
682687
argStream.ReadBool(bPostGUI);
683688

684-
std::vector<float> vecTableContent;
689+
std::vector<double> vecTableContent;
685690

686691
while (argStream.NextIsTable())
687692
{
@@ -691,10 +696,11 @@ int CLuaDrawingDefs::DxDrawPrimitive(lua_State* luaVM)
691696
switch (vecTableContent.size())
692697
{
693698
case PrimitiveVerticeSizes::VERT_XY:
694-
pVecVertices->push_back(PrimitiveVertice{vecTableContent[0], vecTableContent[1], 0, (DWORD)0xFFFFFFFF});
699+
pVecVertices->push_back(PrimitiveVertice{static_cast<float>(vecTableContent[0]), static_cast<float>(vecTableContent[1]), 0, (DWORD)0xFFFFFFFF});
695700
break;
696701
case PrimitiveVerticeSizes::VERT_XY_COLOR:
697-
pVecVertices->push_back(PrimitiveVertice{vecTableContent[0], vecTableContent[1], 0, static_cast<DWORD>(static_cast<int64_t>(vecTableContent[2]))});
702+
pVecVertices->push_back(PrimitiveVertice{static_cast<float>(vecTableContent[0]), static_cast<float>(vecTableContent[1]), 0,
703+
static_cast<DWORD>(static_cast<int64_t>(vecTableContent[2]))});
698704
break;
699705
default:
700706
argStream.SetCustomError(SString("Expected table with 2 or 3 numbers, got %i numbers", vecTableContent.size()).c_str());
@@ -731,7 +737,7 @@ int CLuaDrawingDefs::DxDrawMaterialPrimitive(lua_State* luaVM)
731737
MixedReadMaterialString(argStream, pMaterialElement);
732738
argStream.ReadBool(bPostGUI);
733739

734-
std::vector<float> vecTableContent;
740+
std::vector<double> vecTableContent;
735741

736742
while (argStream.NextIsTable())
737743
{
@@ -741,12 +747,14 @@ int CLuaDrawingDefs::DxDrawMaterialPrimitive(lua_State* luaVM)
741747
switch (vecTableContent.size())
742748
{
743749
case PrimitiveVerticeSizes::VERT_XY_UV:
744-
pVecVertices->push_back(
745-
PrimitiveMaterialVertice{vecTableContent[0], vecTableContent[1], 0, (DWORD)0xFFFFFFFF, vecTableContent[2], vecTableContent[3]});
750+
pVecVertices->push_back(PrimitiveMaterialVertice{static_cast<float>(vecTableContent[0]), static_cast<float>(vecTableContent[1]), 0,
751+
(DWORD)0xFFFFFFFF, static_cast<float>(vecTableContent[2]),
752+
static_cast<float>(vecTableContent[3])});
746753
break;
747754
case PrimitiveVerticeSizes::VERT_XY_COLOR_UV:
748-
pVecVertices->push_back(PrimitiveMaterialVertice{vecTableContent[0], vecTableContent[1], 0, static_cast<DWORD>(static_cast<int64_t>(vecTableContent[2])),
749-
vecTableContent[3], vecTableContent[4]});
755+
pVecVertices->push_back(PrimitiveMaterialVertice{static_cast<float>(vecTableContent[0]), static_cast<float>(vecTableContent[1]), 0,
756+
static_cast<DWORD>(static_cast<int64_t>(vecTableContent[2])),
757+
static_cast<float>(vecTableContent[3]), static_cast<float>(vecTableContent[4])});
750758
break;
751759
default:
752760
argStream.SetCustomError(SString("Expected table with 4 or 5 numbers, got %i numbers", vecTableContent.size()).c_str());

Shared/sdk/CScriptArgReader.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,10 +1027,10 @@ class CScriptArgReader
10271027
}
10281028

10291029
//
1030-
// Reads a table of floating point numbers
1031-
// Taken from CrosRoad95 dxDrawPrimitive pull request
1030+
// Reads a table of numbers
10321031
//
1033-
void ReadNumberTable(std::vector<float>& outList)
1032+
template <typename T>
1033+
void ReadNumberTable(std::vector<T>& outList)
10341034
{
10351035
outList.clear();
10361036
int iArgument = lua_type(m_luaVM, m_iIndex);
@@ -1041,7 +1041,7 @@ class CScriptArgReader
10411041
int iArgument = lua_type(m_luaVM, -1);
10421042
if (iArgument == LUA_TNUMBER)
10431043
{
1044-
outList.push_back(static_cast<float>(lua_tonumber(m_luaVM, -1)));
1044+
outList.push_back(static_cast<T>(lua_tonumber(m_luaVM, -1)));
10451045
}
10461046
}
10471047
m_iIndex++;

0 commit comments

Comments
 (0)