お世話になっております。連続投稿で大変失礼いたします。
表題の件についてご連絡いたします。
MakeScreenとDerivationGraphを組み合わせた際に不具合と思われる動作がありました。
以下に動作確認プログラムを添付します。
grHandle2に文字列描画が正しく行われていません。恐らく元のグラフィックハンドルgrHandle0に対して描画されていると推測されます。
またコメントアウトしているClearDrawScreenを有効にした場合、やはり元のgrHandle0がクリアされているような感じです。
お忙しいかと思いますが、ご確認頂けますと幸いです。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(true);
SetGraphMode(640, 480, 32);
SetAlwaysRunFlag(true);
if (DxLib_Init() == -1) { return -1; }
int grHandle0, grHandle1, grHandle2;
int fnHandle;
grHandle0 = MakeScreen(400, 100, TRUE); // MakeScreenでグラフィック作成:grHandle0
grHandle1 = DerivationGraph(0, 0, 400, 30, grHandle0); // grHandle0から上部の一部分を抜き出し:grHandle1
grHandle2 = DerivationGraph(0, 50, 400, 30, grHandle0); // grHandle0から下部の一部分を抜き出し:grHandle2
SetFontCacheUsePremulAlphaFlag(TRUE);
fnHandle = CreateFontToHandle("MS ゴシック", 32, 4, DX_FONTTYPE_ANTIALIASING_8X8);
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 255);
FillGraph(grHandle0, 0x00, 0xFF, 0x00, 128); // grHandle0を緑に(全体が緑に)
FillGraph(grHandle1, 0xFF, 0x00, 0x00, 192); // grHandle1を赤に(上部一部が赤に)
FillGraph(grHandle2, 0xFF, 0xFF, 0x00, 64); // grHandle2を黄に(下部一部が黄に)
// grHandle1に文字列描画
SetDrawScreen(grHandle1); // 描画対象をgrHandle1に
// ClearDrawScreen();
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 128);
DrawStringToHandle(0, 0, "赤っぽい背景に文字列", GetColor(0xFF, 0xFF, 0xFF), fnHandle);
// grHandle2に文字列描画
SetDrawScreen(grHandle2); // 描画対象をgrHandle2に
// ClearDrawScreen();
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 128);
DrawStringToHandle(10, 0, "黄っぽい背景に文字列", GetColor(0xFF, 0xFF, 0xFF), fnHandle);
SetDrawScreen(DX_SCREEN_BACK); // 描画対象を裏画面に
SetBackgroundColor(0x00, 0x00, 0xFF); // 背景色を青
ClearDrawScreen(); // クリア(背景全体が青)
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA, 255);
DrawGraph(50, 20, grHandle0, TRUE); // @grHandle0を描画(MakeScreenで作った本体)
DrawGraph(100, 150, grHandle1, TRUE); // AgrHandle1を描画(上部一部分を抜き出した画像)
DrawGraph(100, 225, grHandle2, TRUE); // BgrHandle2を描画(下部一部分を抜き出した画像)
ScreenFlip();
WaitKey();
DxLib_End();
}