DXライブラリにて、mipmap付きのDDSファイル(D3DFMT_A8R8G8B8)を読み込むとRとBの色が反転します。
こちらDXライブラリの仕様でしょうか?
----------
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int SoftImage;
int Graph;
ChangeWindowMode(TRUE);
SetGraphMode(800, 600, 32);
if( DxLib_Init() == -1 ){
return -1;
}
SetDrawScreen(DX_SCREEN_BACK);
// mipmap付き A8R8G8B8 DDSを読み込む
SoftImage = LoadARGB8ColorSoftImage("test.dds");
if( SoftImage == -1 ){
DxLib_End();
return -1;
}
// SoftImageからグラフィックハンドルを作成
Graph = CreateGraphFromSoftImage(SoftImage);
DeleteSoftImage(SoftImage);
if( Graph == -1 ){
DxLib_End();
return -1;
}
while( ProcessMessage() == 0 ){
if( CheckHitKey(KEY_INPUT_ESCAPE) != 0 ){
break;
}
ClearDrawScreen();
DrawGraph(0, 0, Graph, TRUE);
ScreenFlip();
}
DeleteGraph(Graph);
DxLib_End();
return 0;
}
----------
・OS:Windows11 25H2
・開発環境:VisualStudio2019
・DXライブラリバージョン:Ver3.24f
LoadARGB8ColorSoftImage("test.dds")
↓
CreateGraphFromSoftImage()
のように、読み込んだSoftImageをそのまま直接CreateGraphすると色が反転するようです。
LoadARGB8ColorSoftImage()で読み込んだイメージとは別に、MakeARGB8ColorSoftImage()で同サイズのSoftImageを別途作成し、
画素データをmemcpy()などでコピーしてから後者をCreateGraphFromSoftImage()に渡すことで、正常に動作します。
※手動でRとBを入れ替えなくても、単純に画素データをコピーするだけで正常に動作します。
また、mipmapなしの同形式DDSでは現象は発生しません。
ご確認よろしくお願いします。