いつもDXライブラリにお世話になっております。
DXライブラリ3.10aのDerivationGraphの挙動が、DrawRectGraphと
異なる点を確認いたしましたのでご報告させていただきます。
再現できた状況は以下の通りです。
1.OSはWindowsXP SP3
グラフィック Mobile Intel(R) 945 Express Chipset Family(最大テクスチャサイズ 幅:2048 高さ:2048)
2.3D機能を使用(3D機能をオフにした場合は再現できませんでした)
3.DrawRectGraphを使用して、画像の縦2048ピクセル前後を基点として描画
4.DerivationGraphで「3」と同じ部分の画像を分割し、
得られたハンドルを使用して描画
すると、「3」の処理では期待通りに描画されたのに対し、
「4」の処理では2048ピクセル以上を基点にした部分について、
以下の画像のように想定とは違う部分が描画されました。
ttp://silversecond.com/tmp/DxLib_result.png
※画像の左4つが「3」の処理で描画された、画像の縦2047、2048、2049、2050pxを基点とした部分。
右の4つが、「4」の処理で同じ部分を描画したものです。
想定通りなら左右同じ画像が表示されるはずですが、
右側の上から2番目以降、縦2048px以降(最大テクスチャサイズ以上?)を基点とした部分が、
左側と異なることが分かると思います。
(右は、本来の位置から2048ピクセルだけ上の部分の画像を描画している印象です)
<再現環境で得られたLog.txt> ttp://silversecond.com/tmp/Log.txt
<再現に使用した画像(128x3984)> ttp://silversecond.com/tmp/SampleChip.png
<再現に使用したソース>
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
SetOutApplicationLogValidFlag(1); // ログを出力
ChangeWindowMode(TRUE) ; // ウィンドウモード
if( DxLib_Init() == -1 ){ return -1;} // DXライブラリ初期化処理
int handle = LoadGraph("SampleChip.png");
// 画面の左に、画像の縦2048px付近を基点に描画
DrawRectGraph(50,10, 0, 2047, 128, 100, handle ,TRUE, FALSE);
DrawRectGraph(55,130, 0, 2048, 128, 100, handle ,TRUE, FALSE);
DrawRectGraph(60,250, 0, 2049, 128, 100, handle ,TRUE, FALSE);
DrawRectGraph(65,370, 0, 2050, 128, 100, handle ,TRUE, FALSE);
// 画面の右に、同じ画像をDerivationGraphでハンドルを作って描画
int subHandleA = DerivationGraph( 0, 2047, 128, 100, handle );
int subHandleB = DerivationGraph( 0, 2048, 128, 100, handle );
int subHandleC = DerivationGraph( 0, 2049, 128, 100, handle );
int subHandleD = DerivationGraph( 0, 2050, 128, 100, handle );
DrawGraph(350,10, subHandleA ,TRUE);
DrawGraph(355,130, subHandleB ,TRUE);
DrawGraph(360,250, subHandleC ,TRUE);
DrawGraph(365,370, subHandleD ,TRUE);
WaitKey();// キー待ち
DxLib_End() ;// DXライブラリ使用の終了処理
return 0 ;// ソフトの終了
}
----------
環境に依存する上、かなり古いPCでしか再現しない気もするのですが、
よろしければご確認いただけますと幸いです。