dds読み込み
帰省して戻ってきたら2週間くらいたってしまった。
ぼちぼち活動再開。
今回は、x形式のファイル読み込みで必要になったddsファイルのローダ。
DirectXに依存しないで読めるように自前で実装した(代わりにboost入っているけども)。
非圧縮の32bit形式まで動作確認できた。
いつも画像読み込み時のRGBAチャンネルの割り振りが難航するのだが、今回もどうもよくわからず。
ビットマスクが
A 0xFF000000
R 0x00FF0000
G 0x0000FF00
B 0x000000FF
だとBGRAということらしい。
いや、むしろこれをARGBと呼称するべきなのか?
いまいち、脳内イメージとメモリ内容が一致しないなー。
あと、ポインタを構造体にキャストするときはアライメントに注意が必要。
vcだと
#ifdef _MSC_VER #pragma pack( push, 1 ) #endif struct Hoge { DWORD number; BYTE id; }; #ifdef _MSC_VER #pragma pack( pop ) #endif
gccだと
struct Hoge { DWORD number; BYTE id; } #ifdef __GNUG__ __attribute__((packed)) #endif ;
両用にすると
#ifdef _MSC_VER #pragma pack( push, 1 ) #endif struct Hoge { DWORD number; BYTE id; } #ifdef __GNUG__ __attribute__((packed)) #endif ; // だめ押し BOOST_STATIC_ASSERT(sizeof(Hoge)==5); #ifdef _MSC_VER #pragma pack( pop ) #endif