MakeScreen()によりマスク用ハンドルを作り,そこにDrawTriangle()等の図形描画関数で複数描画,その描いた部分でくり抜く,
といった処理を行うことはいけますでしょうか。
一度組んでみたのですが,
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int GraphHandle;
int ScreenHandle;
// ウインドウモードで起動
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if (DxLib_Init() < 0) return -1;
// マスクスクリーンに使うアルファチャンネル付きの描画対象にできるグラフィックハンドルを作成
ScreenHandle = MakeScreen(640, 480, TRUE);
// 描画先を裏画面にする
SetDrawScreen(DX_SCREEN_BACK);
// マスク機能の初期化を行う
CreateMaskScreen();
// マスクスクリーンに使用するグラフィックハンドルとして MakeScreen で作成したグラフィックハンドルをセット
SetMaskScreenGraph(ScreenHandle);
// メインループ
while (ProcessMessage() == 0)
{
// 描画先をマスク用の画像に変更
SetDrawScreen(ScreenHandle);
// マスク用の画像をクリア
ClearDrawScreen();
// 三角形を描画
DrawTriangle(0, 0, 200, 200, 0, 200, GetColor(0, 0, 0), TRUE);
// 描画先を裏画面に変更
SetDrawScreen(DX_SCREEN_BACK);
// 裏画面をクリア
ClearDrawScreen();
// マスクを有効にする
SetUseMaskScreenFlag(TRUE);
// 1920*1080の画像を描画
LoadGraphScreen(0, 0, "test.png", TRUE);
// マスクを無効にする
SetUseMaskScreenFlag(FALSE);
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
この場合だと,三角形を描画した際にその部分以外がマスク処理によって描画されます。(アルファ値がなくなるから…?)
この状況を逆にしたいです。