From 5a51bc10e56c8709b55fe53cb438f7a42ac09ad4 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Sat, 14 Mar 2015 10:15:19 +0100 Subject: [PATCH] SWVertexLoader: fix truncated components --- .../Core/VideoBackends/Software/SWVertexLoader.cpp | 12 +++++++++--- 1 file 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 -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; + } } }