Skip to content

Commit 938b80e

Browse files
committed
vtfpp: add image format tests
1 parent a530687 commit 938b80e

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

test/vtfpp.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,55 @@ TEST_WRITE_FMT(UV88, VTF::FLAG_NO_MIP | VTF::FLAG_NO_LOD)
193193
TEST_WRITE_FMT(UVWQ8888, VTF::FLAG_NO_MIP | VTF::FLAG_NO_LOD | VTF::FLAG_MULTI_BIT_ALPHA)
194194
TEST_WRITE_FMT(UVLX8888, VTF::FLAG_NO_MIP | VTF::FLAG_NO_LOD | VTF::FLAG_MULTI_BIT_ALPHA)
195195

196+
#define GETCHAN(o, c) \
197+
static_cast<PIXFMT::CHANTYPE>(o.c())
198+
199+
// the input images are 2x2 composites of 16x16 tiles with r/g/b/a increasing/decreasing
200+
// in distinctive orders to catch out any byte order issues.
201+
#define TEST_READ_EXTFMT_BLOCK_RGBA(LE, GE) do { \
202+
EXPECT_##GE(GETCHAN(pixels[i], r), GETCHAN(pixels[i+1], r)); \
203+
EXPECT_##LE(GETCHAN(pixels[i], g), GETCHAN(pixels[i+1], g)); \
204+
EXPECT_##GE(GETCHAN(pixels[i], b), GETCHAN(pixels[i+1], b)); \
205+
EXPECT_##LE(GETCHAN(pixels[i], a), GETCHAN(pixels[i+1], a)); \
206+
} while (0)
207+
208+
#define TEST_READ_EXTFMT_BLOCK_RGB(LE, GE) do { \
209+
EXPECT_##GE(GETCHAN(pixels[i], r), GETCHAN(pixels[i+1], r)); \
210+
EXPECT_##LE(GETCHAN(pixels[i], g), GETCHAN(pixels[i+1], g)); \
211+
EXPECT_##LE(GETCHAN(pixels[i], b), GETCHAN(pixels[i+1], b)); \
212+
} while (0)
213+
214+
#define TEST_READ_EXTFMT(Chan, Rest, Ext) \
215+
TEST(vtfpp, read_extfmt_##Chan##Rest##_##Ext) { \
216+
using PIXFMT = ImagePixelV2::Chan##Rest; \
217+
std::cerr << typeid(PIXFMT::CHANTYPE).name() << std::endl; \
218+
VTF::CreationOptions options { \
219+
.outputFormat = VTF::FORMAT_UNCHANGED, \
220+
}; \
221+
auto vtf = VTF::create(ASSET_ROOT "vtfpp/extfmt/" #Chan #Rest "." #Ext, options); \
222+
ASSERT_TRUE(vtf); \
223+
EXPECT_EQ(vtf.getFormat(), ImageFormat::Chan##Rest); \
224+
EXPECT_EQ(vtf.getWidth(), 32); \
225+
EXPECT_EQ(vtf.getHeight(), 32); \
226+
auto rawspan = vtf.getImageDataRaw(); \
227+
auto pixels = std::span<const PIXFMT>(reinterpret_cast<const PIXFMT *>(rawspan.data()), rawspan.size() / sizeof(PIXFMT)); \
228+
for (size_t i = 0; i < 15; i++) { \
229+
TEST_READ_EXTFMT_BLOCK_##Chan(LT, GT); \
230+
} \
231+
for (size_t i = 16 * 32; i < 15 + 16 * 32; i++) { \
232+
TEST_READ_EXTFMT_BLOCK_##Chan(GT, LT); \
233+
} \
234+
}
235+
236+
TEST_READ_EXTFMT(RGB, 888, png)
237+
TEST_READ_EXTFMT(RGB, 888, qoi)
238+
TEST_READ_EXTFMT(RGBA, 16161616, png)
239+
TEST_READ_EXTFMT(RGBA, 32323232F, exr)
240+
TEST_READ_EXTFMT(RGBA, 8888, png)
241+
TEST_READ_EXTFMT(RGBA, 8888, qoi)
242+
TEST_READ_EXTFMT(RGBA, 8888, tga)
243+
TEST_READ_EXTFMT(RGBA, 8888, webp)
244+
196245
#endif
197246

198247
TEST(vtfpp, write_non_po2) {

0 commit comments

Comments
 (0)