Skip to content

Commit 0bbcacb

Browse files
committed
vtfpp: more ImagePixelV2
1 parent e0e722f commit 0bbcacb

File tree

4 files changed

+61
-61
lines changed

4 files changed

+61
-61
lines changed

src/vtfpp/ImageConversion.cpp

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,52 +1118,52 @@ std::vector<std::byte> ImageConversion::convertImageDataToFile(std::span<const s
11181118
switch (fileFormat) {
11191119
case FileFormat::PNG: {
11201120
if (format == ImageFormat::RGB888) {
1121-
stbi_write_png_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGB888), imageData.data(), 0);
1121+
stbi_write_png_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGB888), imageData.data(), 0);
11221122
} else if (format == ImageFormat::RGBA8888) {
1123-
stbi_write_png_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGBA8888), imageData.data(), 0);
1123+
stbi_write_png_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGBA8888), imageData.data(), 0);
11241124
} else if (ImageFormatDetails::opaque(format)) {
11251125
const auto rgb = convertImageDataToFormat(imageData, format, ImageFormat::RGB888, width, height);
1126-
stbi_write_png_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGB888), rgb.data(), 0);
1126+
stbi_write_png_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGB888), rgb.data(), 0);
11271127
} else {
11281128
const auto rgba = convertImageDataToFormat(imageData, format, ImageFormat::RGBA8888, width, height);
1129-
stbi_write_png_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGBA8888), rgba.data(), 0);
1129+
stbi_write_png_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGBA8888), rgba.data(), 0);
11301130
}
11311131
break;
11321132
}
11331133
case FileFormat::JPG: {
11341134
if (format == ImageFormat::RGB888) {
1135-
stbi_write_jpg_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGB888), imageData.data(), 95);
1135+
stbi_write_jpg_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGB888), imageData.data(), 95);
11361136
} else {
11371137
const auto rgb = convertImageDataToFormat(imageData, format, ImageFormat::RGB888, width, height);
1138-
stbi_write_jpg_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGB888), rgb.data(), 95);
1138+
stbi_write_jpg_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGB888), rgb.data(), 95);
11391139
}
11401140
break;
11411141
}
11421142
case FileFormat::BMP: {
11431143
if (format == ImageFormat::RGB888) {
1144-
stbi_write_bmp_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGB888), imageData.data());
1144+
stbi_write_bmp_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGB888), imageData.data());
11451145
} else if (format == ImageFormat::RGBA8888) {
1146-
stbi_write_bmp_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGBA8888), imageData.data());
1146+
stbi_write_bmp_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGBA8888), imageData.data());
11471147
} else if (ImageFormatDetails::opaque(format)) {
11481148
const auto rgb = convertImageDataToFormat(imageData, format, ImageFormat::RGB888, width, height);
1149-
stbi_write_bmp_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGB888), rgb.data());
1149+
stbi_write_bmp_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGB888), rgb.data());
11501150
} else {
11511151
const auto rgba = convertImageDataToFormat(imageData, format, ImageFormat::RGBA8888, width, height);
1152-
stbi_write_bmp_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGBA8888), rgba.data());
1152+
stbi_write_bmp_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGBA8888), rgba.data());
11531153
}
11541154
break;
11551155
}
11561156
case FileFormat::TGA: {
11571157
if (format == ImageFormat::RGB888) {
1158-
stbi_write_tga_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGB888), imageData.data());
1158+
stbi_write_tga_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGB888), imageData.data());
11591159
} else if (format == ImageFormat::RGBA8888) {
1160-
stbi_write_tga_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGBA8888), imageData.data());
1160+
stbi_write_tga_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGBA8888), imageData.data());
11611161
} else if (ImageFormatDetails::opaque(format)) {
11621162
const auto rgb = convertImageDataToFormat(imageData, format, ImageFormat::RGB888, width, height);
1163-
stbi_write_tga_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGB888), rgb.data());
1163+
stbi_write_tga_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGB888), rgb.data());
11641164
} else {
11651165
const auto rgba = convertImageDataToFormat(imageData, format, ImageFormat::RGBA8888, width, height);
1166-
stbi_write_tga_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixel::RGBA8888), rgba.data());
1166+
stbi_write_tga_to_func(stbWriteFunc, &out, width, height, sizeof(ImagePixelV2::RGBA8888), rgba.data());
11671167
}
11681168
break;
11691169
}
@@ -1184,15 +1184,15 @@ std::vector<std::byte> ImageConversion::convertImageDataToFile(std::span<const s
11841184
}
11851185

11861186
if (format == ImageFormat::RGB888) {
1187-
WebPPictureImportRGB(&pic, reinterpret_cast<const uint8_t*>(imageData.data()), static_cast<int>(width * sizeof(ImagePixel::RGB888)));
1187+
WebPPictureImportRGB(&pic, reinterpret_cast<const uint8_t*>(imageData.data()), static_cast<int>(width * sizeof(ImagePixelV2::RGB888)));
11881188
} else if (format == ImageFormat::RGBA8888) {
1189-
WebPPictureImportRGBA(&pic, reinterpret_cast<const uint8_t*>(imageData.data()), static_cast<int>(width * sizeof(ImagePixel::RGBA8888)));
1189+
WebPPictureImportRGBA(&pic, reinterpret_cast<const uint8_t*>(imageData.data()), static_cast<int>(width * sizeof(ImagePixelV2::RGBA8888)));
11901190
} else if (ImageFormatDetails::opaque(format)) {
11911191
const auto rgb = convertImageDataToFormat(imageData, format, ImageFormat::RGB888, width, height);
1192-
WebPPictureImportRGB(&pic, reinterpret_cast<const uint8_t*>(rgb.data()), static_cast<int>(width * sizeof(ImagePixel::RGB888)));
1192+
WebPPictureImportRGB(&pic, reinterpret_cast<const uint8_t*>(rgb.data()), static_cast<int>(width * sizeof(ImagePixelV2::RGB888)));
11931193
} else {
11941194
const auto rgba = convertImageDataToFormat(imageData, format, ImageFormat::RGBA8888, width, height);
1195-
WebPPictureImportRGBA(&pic, reinterpret_cast<const uint8_t*>(rgba.data()), static_cast<int>(width * sizeof(ImagePixel::RGBA8888)));
1195+
WebPPictureImportRGBA(&pic, reinterpret_cast<const uint8_t*>(rgba.data()), static_cast<int>(width * sizeof(ImagePixelV2::RGBA8888)));
11961196
}
11971197

11981198
WebPMemoryWriter writer;
@@ -2093,43 +2093,43 @@ std::vector<std::byte> ImageConversion::gammaCorrectImageData(std::span<const st
20932093

20942094
#ifdef SOURCEPP_BUILD_WITH_TBB
20952095
#define VTFPP_GAMMA_CORRECT(InputType, ...) \
2096-
std::span imageDataSpan{reinterpret_cast<const ImagePixel::InputType*>(imageData.data()), imageData.size() / sizeof(ImagePixel::InputType)}; \
2097-
std::span outSpan{reinterpret_cast<ImagePixel::InputType*>(out.data()), out.size() / sizeof(ImagePixel::InputType)}; \
2098-
std::transform(std::execution::par_unseq, imageDataSpan.begin(), imageDataSpan.end(), outSpan.begin(), [gammaLUTs](ImagePixel::InputType pixel) -> ImagePixel::InputType { \
2099-
using PIXEL_TYPE = ImagePixel::InputType; \
2100-
return __VA_ARGS__; \
2096+
std::span imageDataSpan{reinterpret_cast<const ImagePixelV2::InputType*>(imageData.data()), imageData.size() / sizeof(ImagePixelV2::InputType)}; \
2097+
std::span outSpan{reinterpret_cast<ImagePixelV2::InputType*>(out.data()), out.size() / sizeof(ImagePixelV2::InputType)}; \
2098+
std::transform(std::execution::par_unseq, imageDataSpan.begin(), imageDataSpan.end(), outSpan.begin(), [gammaLUTs](ImagePixelV2::InputType pixel) -> ImagePixelV2::InputType { \
2099+
using PIXEL_TYPE = ImagePixelV2::InputType; \
2100+
return PIXEL_TYPE(__VA_ARGS__); \
21012101
})
21022102
#else
21032103
#define VTFPP_GAMMA_CORRECT(InputType, ...) \
2104-
std::span imageDataSpan{reinterpret_cast<const ImagePixel::InputType*>(imageData.data()), imageData.size() / sizeof(ImagePixel::InputType)}; \
2105-
std::span outSpan{reinterpret_cast<ImagePixel::InputType*>(out.data()), out.size() / sizeof(ImagePixel::InputType)}; \
2106-
std::transform(imageDataSpan.begin(), imageDataSpan.end(), outSpan.begin(), [gammaLUTs](ImagePixel::InputType pixel) -> ImagePixel::InputType { \
2107-
using PIXEL_TYPE = ImagePixel::InputType; \
2108-
return __VA_ARGS__; \
2104+
std::span imageDataSpan{reinterpret_cast<const ImagePixelV2::InputType*>(imageData.data()), imageData.size() / sizeof(ImagePixelV2::InputType)}; \
2105+
std::span outSpan{reinterpret_cast<ImagePixelV2::InputType*>(out.data()), out.size() / sizeof(ImagePixelV2::InputType)}; \
2106+
std::transform(imageDataSpan.begin(), imageDataSpan.end(), outSpan.begin(), [gammaLUTs](ImagePixelV2::InputType pixel) -> ImagePixelV2::InputType { \
2107+
using PIXEL_TYPE = ImagePixelV2::InputType; \
2108+
return PIXEL_TYPE(__VA_ARGS__); \
21092109
})
21102110
#endif
21112111
#define VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(InputType, ...) \
21122112
case InputType: { VTFPP_CREATE_GAMMA_LUTS(InputType) VTFPP_GAMMA_CORRECT(InputType, __VA_ARGS__); } break
21132113

21142114
switch (format) {
21152115
using enum ImageFormat;
2116-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(ABGR8888, {pixel.a, VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r)});
2117-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(RGB888, {VTFPP_APPLY_GAMMA_RED(pixel.r), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_BLUE(pixel.b)});
2118-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(RGB888_BLUESCREEN, pixel.r == 0 && pixel.g == 0 && pixel.b == 0xff ? ImagePixel::RGB888_BLUESCREEN{0, 0, 0xff} : ImagePixel::RGB888_BLUESCREEN{VTFPP_APPLY_GAMMA_RED(pixel.r), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_BLUE(pixel.b)});
2119-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGR888, {VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r)});
2120-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGR888_BLUESCREEN, pixel.r == 0 && pixel.g == 0 && pixel.b == 0xff ? ImagePixel::BGR888_BLUESCREEN{0, 0, 0xff} : ImagePixel::BGR888_BLUESCREEN{VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r)});
2121-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(RGB565, {VTFPP_APPLY_GAMMA_RED(pixel.r), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_BLUE(pixel.b)});
2122-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(I8, {VTFPP_APPLY_GAMMA_RED(pixel.i)});
2123-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(IA88, {VTFPP_APPLY_GAMMA_RED(pixel.i), pixel.a});
2124-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(ARGB8888, {pixel.a, VTFPP_APPLY_GAMMA_RED(pixel.r), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_BLUE(pixel.b)});
2125-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRA8888, {VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r), pixel.a});
2126-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRX8888, {VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r), 0xff});
2127-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGR565, {VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r)});
2128-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRA5551, {VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r), pixel.a});
2129-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRX5551, {VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r), 1});
2130-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRA4444, {VTFPP_APPLY_GAMMA_BLUE(pixel.b), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_RED(pixel.r), pixel.a});
2131-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(RGBX8888, {VTFPP_APPLY_GAMMA_RED(pixel.r), VTFPP_APPLY_GAMMA_GREEN(pixel.g), VTFPP_APPLY_GAMMA_BLUE(pixel.b), 0xff});
2132-
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(R8, {VTFPP_APPLY_GAMMA_RED(pixel.r)});
2116+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(ABGR8888, pixel.a(), VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r()));
2117+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(RGB888, VTFPP_APPLY_GAMMA_RED(pixel.r()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_BLUE(pixel.b()));
2118+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(RGB888_BLUESCREEN, pixel.r() == 0 && pixel.g() == 0 && pixel.b() == 0xff ? ImagePixelV2::RGB888_BLUESCREEN{0, 0, 0xff} : ImagePixelV2::RGB888_BLUESCREEN{VTFPP_APPLY_GAMMA_RED(pixel.r()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_BLUE(pixel.b())});
2119+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGR888, VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r()));
2120+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGR888_BLUESCREEN, pixel.r() == 0 && pixel.g() == 0 && pixel.b() == 0xff ? ImagePixelV2::BGR888_BLUESCREEN{0, 0, 0xff} : ImagePixelV2::BGR888_BLUESCREEN{VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r())});
2121+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(RGB565, VTFPP_APPLY_GAMMA_RED(pixel.r()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_BLUE(pixel.b()));
2122+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(I8, VTFPP_APPLY_GAMMA_RED(pixel.i()));
2123+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(IA88, VTFPP_APPLY_GAMMA_RED(pixel.i()), pixel.a());
2124+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(ARGB8888, pixel.a(), VTFPP_APPLY_GAMMA_RED(pixel.r()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_BLUE(pixel.b()));
2125+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRA8888, VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r()), pixel.a());
2126+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRX8888, VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r()), 0xff);
2127+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGR565, VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r()));
2128+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRA5551, VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r()), pixel.a());
2129+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRX5551, VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r()), 1);
2130+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(BGRA4444, VTFPP_APPLY_GAMMA_BLUE(pixel.b()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_RED(pixel.r()), pixel.a());
2131+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(RGBX8888, VTFPP_APPLY_GAMMA_RED(pixel.r()), VTFPP_APPLY_GAMMA_GREEN(pixel.g()), VTFPP_APPLY_GAMMA_BLUE(pixel.b()), 0xff);
2132+
VTFPP_CASE_GAMMA_CORRECT_AND_BREAK(R8, VTFPP_APPLY_GAMMA_RED(pixel.r()));
21332133
default: SOURCEPP_DEBUG_BREAK; break;
21342134
}
21352135

@@ -2155,17 +2155,17 @@ std::vector<std::byte> ImageConversion::invertGreenChannelForImageData(std::span
21552155
}
21562156

21572157
#define VTFPP_INVERT_GREEN(PixelType, ChannelName, ...) \
2158-
static constexpr auto channelSize = ImageFormatDetails::green(ImagePixel::PixelType::FORMAT); \
2159-
std::span imageDataSpan{reinterpret_cast<const ImagePixel::PixelType*>(imageData.data()), imageData.size() / sizeof(ImagePixel::PixelType)}; \
2160-
std::span outSpan{reinterpret_cast<ImagePixel::PixelType*>(out.data()), out.size() / sizeof(ImagePixel::PixelType)}; \
2161-
std::transform(__VA_ARGS__ __VA_OPT__(,) imageDataSpan.begin(), imageDataSpan.end(), outSpan.begin(), [](ImagePixel::PixelType pixel) -> ImagePixel::PixelType { \
2162-
if constexpr (std::same_as<decltype(pixel.ChannelName), float> || std::same_as<decltype(pixel.ChannelName), half>) { \
2163-
pixel.ChannelName = static_cast<decltype(pixel.ChannelName)>(static_cast<float>(static_cast<uint64_t>(1) << channelSize) - 1.f - static_cast<float>(pixel.ChannelName)); \
2158+
static constexpr auto channelSize = ImageFormatDetails::green(ImagePixelV2::PixelType::FORMAT); \
2159+
std::span imageDataSpan{reinterpret_cast<const ImagePixelV2::PixelType*>(imageData.data()), imageData.size() / sizeof(ImagePixelV2::PixelType)}; \
2160+
std::span outSpan{reinterpret_cast<ImagePixelV2::PixelType*>(out.data()), out.size() / sizeof(ImagePixelV2::PixelType)}; \
2161+
std::transform(__VA_ARGS__ __VA_OPT__(,) imageDataSpan.begin(), imageDataSpan.end(), outSpan.begin(), [](ImagePixelV2::PixelType pixel) -> ImagePixelV2::PixelType { \
2162+
if constexpr (std::same_as<decltype(pixel.ChannelName()), float> || std::same_as<decltype(pixel.ChannelName()), half>) { \
2163+
pixel.set_##ChannelName(static_cast<decltype(pixel.ChannelName())>(static_cast<float>(static_cast<uint64_t>(1) << channelSize) - 1.f - static_cast<float>(pixel.ChannelName()))); \
21642164
} else { \
21652165
if constexpr (channelSize >= sizeof(uint32_t) * 8) { \
2166-
pixel.ChannelName = static_cast<decltype(pixel.ChannelName)>((static_cast<uint64_t>(1) << channelSize) - 1 - static_cast<uint32_t>(pixel.ChannelName)); \
2166+
pixel.set_##ChannelName(static_cast<decltype(pixel.ChannelName())>((static_cast<uint64_t>(1) << channelSize) - 1 - static_cast<uint32_t>(pixel.ChannelName()))); \
21672167
} else { \
2168-
pixel.ChannelName = static_cast<decltype(pixel.ChannelName)>(static_cast<uint32_t>(1 << channelSize) - 1 - static_cast<uint32_t>(pixel.ChannelName)); \
2168+
pixel.set_##ChannelName(static_cast<decltype(pixel.ChannelName())>(static_cast<uint32_t>(1 << channelSize) - 1 - static_cast<uint32_t>(pixel.ChannelName()))); \
21692169
} \
21702170
} \
21712171
return pixel; \

src/vtfpp/ImageQuantize.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
using namespace vtfpp;
44

55
std::vector<std::byte> ImageQuantize::convertP8ImageDataToBGRA8888(std::span<const std::byte> paletteData, std::span<const std::byte> imageData) {
6-
if (paletteData.size() != 256 * sizeof(ImagePixel::BGRA8888)) {
6+
if (paletteData.size() != 256 * sizeof(ImagePixelV2::BGRA8888)) {
77
return {};
88
}
99

10-
std::span palettePixelData{reinterpret_cast<const ImagePixel::BGRA8888*>(paletteData.data()), 256};
10+
std::span palettePixelData{reinterpret_cast<const ImagePixelV2::BGRA8888*>(paletteData.data()), 256};
1111

1212
std::vector<std::byte> out;
13-
out.resize(imageData.size() * sizeof(ImagePixel::BGRA8888));
13+
out.resize(imageData.size() * sizeof(ImagePixelV2::BGRA8888));
1414
BufferStream stream{out};
1515
for (const auto index : imageData) {
1616
stream << palettePixelData[static_cast<uint8_t>(index)];

src/vtfpp/VTF.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,9 +1288,9 @@ void VTF::setReflectivity(sourcepp::math::Vec3f newReflectivity) {
12881288

12891289
void VTF::computeReflectivity() {
12901290
static constexpr auto getReflectivityForImage = [](const VTF& vtf, uint16_t frame, uint8_t face, uint16_t slice) {
1291-
static constexpr auto getReflectivityForPixel = [](const ImagePixel::RGBA8888* pixel) -> math::Vec3f {
1291+
static constexpr auto getReflectivityForPixel = [](const ImagePixelV2::RGBA8888* pixel) -> math::Vec3f {
12921292
// http://markjstock.org/doc/gsd_talk_11_notes.pdf page 11
1293-
math::Vec3f ref{static_cast<float>(pixel->r), static_cast<float>(pixel->g), static_cast<float>(pixel->b)};
1293+
math::Vec3f ref{static_cast<float>(pixel->r()), static_cast<float>(pixel->g()), static_cast<float>(pixel->b())};
12941294
ref /= 255.f * 0.9f;
12951295
ref[0] *= ref[0];
12961296
ref[1] *= ref[1];
@@ -1301,9 +1301,9 @@ void VTF::computeReflectivity() {
13011301
auto rgba8888Data = vtf.getImageDataAsRGBA8888(0, frame, face, slice);
13021302
math::Vec3f out{};
13031303
for (uint64_t i = 0; i < rgba8888Data.size(); i += 4) {
1304-
out += getReflectivityForPixel(reinterpret_cast<ImagePixel::RGBA8888*>(rgba8888Data.data() + i));
1304+
out += getReflectivityForPixel(reinterpret_cast<ImagePixelV2::RGBA8888*>(rgba8888Data.data() + i));
13051305
}
1306-
return out / (rgba8888Data.size() / sizeof(ImagePixel::RGBA8888));
1306+
return out / (rgba8888Data.size() / sizeof(ImagePixelV2::RGBA8888));
13071307
};
13081308

13091309
const auto faceCount = this->getFaceCount();

test/vtfpp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1169,7 +1169,7 @@ TEST(vtfpp, read_xbox_p8) {
11691169
const auto* palette = vtf.getResource(Resource::TYPE_PALETTE_DATA);
11701170
ASSERT_TRUE(palette);
11711171
EXPECT_EQ(palette->flags, Resource::FLAG_NONE);
1172-
EXPECT_EQ(palette->data.size(), 256 * sizeof(ImagePixel::BGRA8888));
1172+
EXPECT_EQ(palette->data.size(), 256 * sizeof(ImagePixelV2::BGRA8888));
11731173

11741174
const auto* fallback = vtf.getResource(Resource::TYPE_FALLBACK_DATA);
11751175
ASSERT_TRUE(fallback);

0 commit comments

Comments
 (0)