乗算済みα画像と普通の画像を混在させた際の、画像の再読み込み時の挙動についての要望です。
Ver 3.16のDxLibだと、デバイスロストの発生時やReloadFileGraphAllを呼び出したとき、
その際のSetUsePremulAlphaConvertLoadの設定に従って画像を読み込み直しているようですが、
これをその画像を読み込むときに使ったSetUsePremulAlphaConvertLoadの設定に従って読み込み直すようにしていただけないでしょうか?
現在、全体を乗算済みαを使わないように書き直したので急ぎではないのですが、時間があるときに検討いただければと思います。
テストコード
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR , int)
{
int non_pma_handle, pma_handle;
bool UsePremulAlphaConvertLoad;//乗算済みアルファ画像に変換するか
// DXライブラリの初期化
if (DxLib_Init() < 0) return -1;
SetDrawScreen(DX_SCREEN_BACK);
SetDrawMode(DX_DRAWMODE_BILINEAR);
//普通の半透明画像
non_pma_handle = LoadGraph("Bar.png");//適当な半透明画像
//乗算済みアルファ用の画像
SetTransColor(255, 0, 255);
UsePremulAlphaConvertLoad = true;
SetUsePremulAlphaConvertLoad(UsePremulAlphaConvertLoad);
pma_handle = LoadGraph("PMAImage01.png");//「乗算済みアルファのすすめ」のもの
while (ProcessMessage() == 0)
{
if (CheckHitKey(KEY_INPUT_Z)){//画像の再読み込み
ReloadFileGraphAll();
WaitTimer(100);//二重押し防止
}
if (CheckHitKey(KEY_INPUT_X)){//乗算済みアルファ画像に変換するかのフラグ切り替え
UsePremulAlphaConvertLoad = !UsePremulAlphaConvertLoad;
SetUsePremulAlphaConvertLoad(UsePremulAlphaConvertLoad);
WaitTimer(500);//二重押し防止
}
// 結果が分かりやすいように画面を灰色にする
DrawBox(0, 0, 400, 400, GetColor(128, 128, 128), TRUE);
// 乗算済みアルファを使い描画
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 255);
DrawExtendGraph(0, 0, 400, 400, pma_handle, TRUE);
// 結果が分かりやすいように画面を水色にする
DrawBox(400, 0, 640, 100, GetColor(0xab, 0xcd, 0xef), TRUE);
// 乗算済みアルファを使わずに描画
SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 255);
DrawExtendGraph(400, 0,640, 100, non_pma_handle, TRUE);
ScreenFlip();
ClearDrawScreen();
}
DxLib_End();
return 0;
}