トップページ > 記事閲覧
【不具合?】GraphBlendRectBlt2が条件によって異常な描画になる
名前:was-blue.0793 日時: 2023/08/13 00:06

いつもお世話になっております。 表題の件につきまして、「GraphBlendRectBlt2」と「DX_GRAPH_BLEND_RGBA_SELECT_MIX」を併用した上で色指定に「BLEND」が絡む引数を渡すと異常な描画になることがあります。 例えば、RGBAを順に「DX_RGBA_SELECT_BLEND_R, DX_RGBA_SELECT_BLEND_G, DX_RGBA_SELECT_BLEND_B, DX_RGBA_SELECT_SRC_A」で描画すると以下のような想定していない描画になります。 これは、以下の想定されていない描画がされていることを示します: ・4つ全てで左下に何かの一部分のようなものが見えます。(ブレンドに使う画像が小さい描画で発生) ・上から2番目では上から1番目の背景の青を、上から4番目では上から3番目の背景のグラデーションをブレンドしようとしていますが、ブレンドされていません。(ブレンドに使う画像が同じ描画で発生) ・上から2番目と4番目で、ループしているような描画になっています。(ブレンドに使う画像が同じ描画で発生) drive.google.com/file/d/1NFgMzGxFkYarflscsoLDh-VzIZywVAYf/view?usp=sharing こちらは比較のために「DX_RGBA_SELECT_SRC_R, DX_RGBA_SELECT_SRC_G, DX_RGBA_SELECT_SRC_B, DX_RGBA_SELECT_SRC_A」で描画したものですが、こちらは想定通りの描画結果が得られています。 (白く見えますが元の画像が白いためなので正常な描画になっています) drive.google.com/file/d/1zQ5gi4QnBBRzGqxYNRUjxgVESAzRblnI/view?usp=sharing このような描画について、何か考えられることはあるでしょうか? それではよろしくお願いします。
メンテ

Page: 1 |

Re: 【不具合?】GraphBlendRectBlt2が条件によって異常な描画になる ( No.1 )
名前:was-blue.0793 日時:2023/08/13 12:46

参考までに、異常な描画が発生する可能性がある簡易的なコードを示します: --- //画像ブレンドの準備 int GraphHandle = LoadGraph("base.png"); int BlendGraphHandle = LoadGraph("blend.png"); int ScreenHandle = MakeScreen(512,512,TRUE); SetDrawScreen(ScreenHandle); //何か描画 DrawSomething(); //ブレンドを実行(この時、ブレンドに使う画像はスクリーンより小さくする) GraphBlendRectBlt2(GraphHandle, BlendGraphHandle, ScreenHandle, 0, 0, 512, 512, 0, 0, 256, 256, 0, 0, 255, DX_GRAPH_BLEND_RGBA_SELECT_MIX, DX_RGBA_SELECT_BLEND_R, DX_RGBA_SELECT_BLEND_G, DX_RGBA_SELECT_BLEND_B, DX_RGBA_SELECT_SRC_A); //描画先を戻す SetDrawScreen(DX_SCREEN_BACK); //ブレンドした結果を描画 (恐らく、異常な描画になっている) DrawGraph(0, 0, ScreenHandle, TRUE); ScreenFlip(); --- --- ベース画像 drive.google.com/file/d/1L5qo5Buxv7d-87Y3A40B2bNJa9tolDLs/view?usp=sharing ブレンド画像 drive.google.com/file/d/10jS76NupPgE4S81IZS38C1561mNZZ0tZ/view?usp=sharing 描画結果 drive.google.com/file/d/1337_r3sCz1NolYvGn6jYKqSmXtnsnhAF/view?usp=sharing 想定する描画に近いもの(実際は背景なし、Aviutlで作成) drive.google.com/file/d/17U2IjSM0xjnNr9eCfDvgds_Rdt6ZmbR7/view?usp=sharing --- ※検証用の画像を用意したので、検証用の画像を使うように修正しました
メンテ
Re: 【不具合?】GraphBlendRectBlt2が条件によって異常な描画になる ( No.2 )
名前:管理人 日時:2023/08/13 23:56

検証用の画像とプログラムのご提供ありがとうございます DX_GRAPH_BLEND_RGBA_SELECT_MIX はよくある組み合わせの場合に若干高速なピクセルシェーダーを 使用するようになっているのですが、その仕組みが Src と Blend の画像サイズが異なる場合や GraphBlendRectBlt2 の SrcX1,SrcY1-SrcX2,SrcY2 の指定範囲と BlendX1,BlendY1-BlendX2,BlendY2 の 指定範囲のサイズが異なる場合などが考慮されていませんでした 正常にブレンドされるように修正したバージョンをアップしましたので よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 因みに正常なブレンド結果は『想定する描画に近いもの』とは異なり文字に黒い縁は付きません ( Src から継承しているのはアルファ値のみなので )
メンテ
Re: 【不具合?】GraphBlendRectBlt2が条件によって異常な描画になる ( No.3 )
名前:was-blue.0793 日時:2023/08/14 18:16

>> 管理人様 ご対応ありがとうございます。 正しく描画されることを確認しましたが、このテスト版を使用すると「C4819」の警告が発生することが確認されています。 それではよろしくお願いします。
メンテ
Re: 【不具合?】GraphBlendRectBlt2が条件によって異常な描画になる ( No.4 )
名前:管理人 日時:2023/08/15 00:09

すみません、手元の環境では C4819 の警告が発生することを確認できません どちらのファイルの何行目で C4819 の警告が発生しているのか教えて頂けますでしょうか? m(_ _)m
メンテ
Re: 【不具合?】GraphBlendRectBlt2が条件によって異常な描画になる ( No.5 )
名前:was-blue.0793 日時:2023/08/15 12:14

>> 管理人様 「atoiDx」(2318行目)と「MV1GetAnimKeySetNum」(5265行目)の行でC4819が発生しております。 それではよろしくお願いします。
メンテ
Re: 【不具合?】GraphBlendRectBlt2が条件によって異常な描画になる ( No.6 )
名前:管理人 日時:2023/08/16 02:50

ご返答ありがとうございます すみません、手元では Visual Studio 2019 を使用していたのですが、Visual Studio 2022 で コンパイルしたところ、ご返答いただいた DxLib.h の 2318行目と 5265行目で C4819 が発生しました ただ、実際に 2318行目と 5265行目を確認しても警告の内容である Shift-JIS で表現できない文字は 使用されていないので、どうも Visual Studio 2022 のバグ(?)による誤判定のようです このような場合は適当に該当行内の文字を変更すると誤判定が解消されるのですが 本件では行の末尾に半角スペースを追加することで対応することができました というわけで、DxLib.h の 2318行目と 5265行目の末尾にスペースが追加されただけの違いしかありませんが、 よろしければこちらの変更版をお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: 【不具合?】GraphBlendRectBlt2が条件によって異常な描画になる ( No.7 )
名前:was-blue.0793(解決) 日時:2023/08/22 20:33

>> 管理人様 お待たせしております。 確認したところC4819が発生しなかったことを確認したので、これで解決とさせていただきます。 それではよろしくお願いします。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存