summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Software/SWVertexLoader.cpp
diff options
context:
space:
mode:
authorTillmann Karras <tilkax@gmail.com>2015-03-14 10:15:19 +0100
committerTillmann Karras <tilkax@gmail.com>2015-03-18 12:09:06 +0100
commit5a51bc10e56c8709b55fe53cb438f7a42ac09ad4 (patch)
treeba4be72f1ce912def3fbebdc3c592938f322702b /Source/Core/VideoBackends/Software/SWVertexLoader.cpp
parent49ae99ffc9dd11695485d6f2fedc805080e5ff06 (diff)
SWVertexLoader: fix truncated components
Diffstat (limited to 'Source/Core/VideoBackends/Software/SWVertexLoader.cpp')
-rw-r--r--Source/Core/VideoBackends/Software/SWVertexLoader.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/Source/Core/VideoBackends/Software/SWVertexLoader.cpp b/Source/Core/VideoBackends/Software/SWVertexLoader.cpp
index d824893243..859cf593b4 100644
--- a/Source/Core/VideoBackends/Software/SWVertexLoader.cpp
+++ b/Source/Core/VideoBackends/Software/SWVertexLoader.cpp
@@ -100,16 +100,17 @@ static T ReadNormalized(I value)
}
template <typename T, bool swap = false>
-static void ReadVertexAttribute(T* dst, DataReader src, const AttributeFormat& format, int base_component, int max_components, bool reverse)
+static void ReadVertexAttribute(T* dst, DataReader src, const AttributeFormat& format, int base_component, int components, bool reverse)
{
if (format.enable)
{
src.Skip(format.offset);
src.Skip(base_component * (1<<(format.type>>1)));
- for (int i = 0; i < std::min(format.components - base_component, max_components); i++)
+ int i;
+ for (i = 0; i < std::min(format.components - base_component, components); i++)
{
- int i_dst = reverse ? max_components - i - 1 : i;
+ int i_dst = reverse ? components - i - 1 : i;
switch (format.type)
{
case VAR_UNSIGNED_BYTE:
@@ -131,6 +132,11 @@ static void ReadVertexAttribute(T* dst, DataReader src, const AttributeFormat& f
_assert_msg_(VIDEO, !format.integer || format.type != VAR_FLOAT, "only non-float values are allowed to be streamed as integer");
}
+ for (; i < components; i++)
+ {
+ int i_dst = reverse ? components - i - 1 : i;
+ dst[i_dst] = i == 3;
+ }
}
}