DxLib::GetDrawScreenGraph関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
spaaaark・∀・
記事: 66
登録日時: 10年前
住所: 埼玉
連絡を取る:

DxLib::GetDrawScreenGraph関数について

#1

投稿記事 by spaaaark・∀・ » 9年前

結構久しぶりの投稿です。
画像ファイルにテクスチャを群として保存しておき、その1部分をモデルのテクスチャとして使いたいのですが、
DxLib::GetDrawScreenGraph関数の要件である画像サイズをそろえているにもかかわらず、この関数でエラーが出てしまいます。
以下に実行しているコードを記述します。

コード:

const int DefGraphID = pGraphData.GetDataHandle(l_pNowDivGraphData->GraphicHandle);
const int CutPos[] = {
	l_pNowDivGraphData->BeginPos.first,
	l_pNowDivGraphData->BeginPos.second,
	l_pNowDivGraphData->DivSize.first ,
	l_pNowDivGraphData->DivSize.second
};
/* 分割描画処理 */{
	SetTextureGraphID = DxLib::MakeGraph(CutPos[2],CutPos[3]);
	// 描画対象を画像データセットに変更
	DxLib::SetDrawScreen(DefGraphID);
	// 描画対象スクリーンから指定範囲のグラフィックを読み込む
	int a=DxLib::GetDrawScreenGraph(CutPos[0],CutPos[1],CutPos[0]+CutPos[2],CutPos[1]+CutPos[3],SetTextureGraphID);
	m_LastUseGraphHandle.push_back(SetTextureGraphID); // 別系統の処理で使用(今回の件では関係なし)
	// 描画対象を元に戻す
	DxLib::SetDrawScreen(DX_SCREEN_BACK);
}
変数についてなんですが、
DefGraphID:元の大きな画像データ(デバッグにより読み込みに成功していることを確認済み)
CutPos[]:切り出しデータ[左上x/左上y/大きさx/大きさy]
SetTextureGraphID:テクスチャとして使用する画像のハンドル
という感じです。ちなみにaは出力確認用で-1(エラー)が返ってきています。

若干お手上げになりつつあるのでもし対策が思いつく方がいましたら意見をください。よろしくお願いします。
クリエイティブな生活で刺激的な毎日を!

Rittai_3D
記事: 525
登録日時: 11年前

Re: DxLib::GetDrawScreenGraph関数について

#2

投稿記事 by Rittai_3D » 9年前

CutPos にどんな値が入っている。や、全体のコードを書いた方が回答しやすいと思います。

さて、検索してみましたところ、
http://hpcgi2.nifty.com/natupaji/bbs/pa ... st&no=2153
という記事を見つけました。

また、画像を抜き出して表示だけならhttp://homepage2.nifty.com/natupaji/DxL ... html#R3N20DrawRectGraph()でよいのでしょうか。
初心者です

アバター
spaaaark・∀・
記事: 66
登録日時: 10年前
住所: 埼玉
連絡を取る:

Re: DxLib::GetDrawScreenGraph関数について

#3

投稿記事 by spaaaark・∀・ » 9年前

進捗状況です。
動作が重いので初期化タイミングを変更し、DrawRectGraph関数を使うこととしました。
以下にそのコードを示します。

コード:

const int DefGraphID = pGraphData.GetDataHandle(l_pNowDivGraphData->GraphicHandle);
const int CutPos[] = {
	l_pNowDivGraphData->BeginPos.first,
	l_pNowDivGraphData->BeginPos.second,
	l_pNowDivGraphData->DivSize.first ,
	l_pNowDivGraphData->DivSize.second
};
/* 分割描画処理 */{
	const int TextureID = DxLib::MakeScreen(CutPos[2],CutPos[3]);
	// 描画対象を画像データセットに変更
	int a = DxLib::SetDrawScreen(TextureID);
	// 描画対象スクリーンから指定範囲のグラフィックを読み込む
	DxLib::DrawRectGraph(0,0,CutPos[0],CutPos[1],CutPos[2],CutPos[3],DefGraphID,TRUE,FALSE);
	// 描画対象を元に戻す
	DxLib::SetDrawScreen(DX_SCREEN_BACK);
	m_UseGraphHandle.push_back(TextureID);
}
変数については、
TextureID:テクスチャとして使用するハンドル(控え)
その他の変数は前回のコードと同じ意味です。
なお、今回戻り値aの場所は0となっています。

これでうまくいくと思ったのですが、DrawRectGraphが正常に動作していないようで、この関数で描画した
結果が裏画面にそのまま描画されてしまい、テクスチャ作成に失敗してしまいます。戻り値も0で成功
しているはずなのに妙な挙動をしています。

どなたか原因が分かる方はおられますでしょうか? おられましたら意見をくださるとうれしいです。
クリエイティブな生活で刺激的な毎日を!

アバター
spaaaark・∀・
記事: 66
登録日時: 10年前
住所: 埼玉
連絡を取る:

Re: DxLib::GetDrawScreenGraph関数について

#4

投稿記事 by spaaaark・∀・ » 9年前

以下のコードを追加して実行してみたら-1が返ってきました…。

コード:

int b = DxLib::DrawGraph(0,0,TextureID,TRUE);
クリエイティブな生活で刺激的な毎日を!

アバター
spaaaark・∀・
記事: 66
登録日時: 10年前
住所: 埼玉
連絡を取る:

Re: DxLib::GetDrawScreenGraph関数について

#5

投稿記事 by spaaaark・∀・ » 9年前

いろいろ調べた結果、DxLib自体のバグの可能性が出てきた(関数にMakeScreenのサンプルを
入れたら同じ現象が起こった)ので、DXライブラリ質問掲示板とマルチポストという形を
取らせていただきます。よろしくお願いします。

http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=3370
クリエイティブな生活で刺激的な毎日を!

アバター
spaaaark・∀・
記事: 66
登録日時: 10年前
住所: 埼玉
連絡を取る:

Re: DxLib::GetDrawScreenGraph関数について

#6

投稿記事 by spaaaark・∀・ » 9年前

リンク先の掲示板で調査していただいたところ、別の処理系で非同期読み込みが切れておらず、
それによりデータが作成される前のハンドルが渡っていたことが原因だと判明しました。
よって間違っているのはこの部分ではなく、ファイルを読み込むクラスにあり、これを修正したところ、
正常に表示されることが確認できました。お騒がせしました。
クリエイティブな生活で刺激的な毎日を!

閉鎖

“C言語何でも質問掲示板” へ戻る