Skip to content

Commit d6aaead

Browse files
fix(vtfpp): clamp all floating point values when converting to int formats
1 parent 69d5476 commit d6aaead

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/vtfpp/ImageConversion.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -537,10 +537,10 @@ namespace {
537537
for (int j = 0; j < 8; j++) {
538538
newData.push_back({});
539539
}
540-
*reinterpret_cast<uint16_t*>(&newData[newData.size() - 8]) = static_cast<uint16_t>(*reinterpret_cast<const float*>(&imageData[i]) * 65535.f);
541-
*reinterpret_cast<uint16_t*>(&newData[newData.size() - 6]) = static_cast<uint16_t>(*reinterpret_cast<const float*>(&imageData[i + 4]) * 65535.f);
542-
*reinterpret_cast<uint16_t*>(&newData[newData.size() - 4]) = static_cast<uint16_t>(*reinterpret_cast<const float*>(&imageData[i + 8]) * 65535.f);
543-
*reinterpret_cast<uint16_t*>(&newData[newData.size() - 2]) = static_cast<uint16_t>(*reinterpret_cast<const float*>(&imageData[i + 12]) * 65535.f);
540+
*reinterpret_cast<uint16_t*>(&newData[newData.size() - 8]) = static_cast<uint16_t>(std::clamp(*reinterpret_cast<const float*>(&imageData[i]), 0.f, 1.f) * 65535.f);
541+
*reinterpret_cast<uint16_t*>(&newData[newData.size() - 6]) = static_cast<uint16_t>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 4]), 0.f, 1.f) * 65535.f);
542+
*reinterpret_cast<uint16_t*>(&newData[newData.size() - 4]) = static_cast<uint16_t>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 8]), 0.f, 1.f) * 65535.f);
543+
*reinterpret_cast<uint16_t*>(&newData[newData.size() - 2]) = static_cast<uint16_t>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 12]), 0.f, 1.f) * 65535.f);
544544
}
545545
break;
546546
default:
@@ -568,10 +568,10 @@ namespace {
568568
std::vector<std::byte> newData;
569569
newData.reserve(imageData.size() / (ImageFormatDetails::bpp(ImageFormat::RGBA32323232F) / 8) * (ImageFormatDetails::bpp(ImageFormat::RGBA8888) / 8));
570570
for (int i = 0; i < imageData.size(); i += 16) {
571-
newData.push_back(static_cast<std::byte>(std::clamp(*reinterpret_cast<const float*>(&imageData[i]) * 255, 0.f, 255.f)));
572-
newData.push_back(static_cast<std::byte>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 4]) * 255, 0.f, 255.f)));
573-
newData.push_back(static_cast<std::byte>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 8]) * 255, 0.f, 255.f)));
574-
newData.push_back(static_cast<std::byte>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 12]) * 255, 0.f, 255.f)));
571+
newData.push_back(static_cast<std::byte>(std::clamp(*reinterpret_cast<const float*>(&imageData[i]), 0.f, 1.f) * 255));
572+
newData.push_back(static_cast<std::byte>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 4]), 0.f, 1.f) * 255));
573+
newData.push_back(static_cast<std::byte>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 8]), 0.f, 1.f) * 255));
574+
newData.push_back(static_cast<std::byte>(std::clamp(*reinterpret_cast<const float*>(&imageData[i + 12]), 0.f, 1.f) * 255));
575575
}
576576
return newData;
577577
}

0 commit comments

Comments
 (0)