@@ -193,6 +193,55 @@ TEST_WRITE_FMT(UV88, VTF::FLAG_NO_MIP | VTF::FLAG_NO_LOD)
193193TEST_WRITE_FMT(UVWQ8888, VTF::FLAG_NO_MIP | VTF::FLAG_NO_LOD | VTF::FLAG_MULTI_BIT_ALPHA)
194194TEST_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
198247TEST (vtfpp, write_non_po2) {
0 commit comments