diff options
| author | Tillmann Karras <tilkax@gmail.com> | 2015-03-14 10:15:19 +0100 |
|---|---|---|
| committer | Tillmann Karras <tilkax@gmail.com> | 2015-03-18 12:09:06 +0100 |
| commit | 5a51bc10e56c8709b55fe53cb438f7a42ac09ad4 (patch) | |
| tree | ba4be72f1ce912def3fbebdc3c592938f322702b /Source/Core/VideoBackends/Software/SWVertexLoader.cpp | |
| parent | 49ae99ffc9dd11695485d6f2fedc805080e5ff06 (diff) | |
SWVertexLoader: fix truncated components
Diffstat (limited to 'Source/Core/VideoBackends/Software/SWVertexLoader.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWVertexLoader.cpp | 12 |
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; + } } } |
