HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0207
まるhgimg3 のテクスチャの挙動がXPと8.1で違って困ってます6解決


まる

リンク

2015/2/7(Sat) 19:07:40|NO.67312

buffer命令で作った画面をhgimg3のsettexでテクチャ登録して
hgrotate命令でメイン画面に描画するプログラムを作っています。

メインマシン(windows8.1 Directx 11)ではうまく動いていたので
サブマシン(windowsXP Directx 8)でテストしてみたところ
画像の転送がうまくいきません。
調べてみたところXP+Dirextxの環境ではsettex命令で
勝手にテクスチャサイズを縮小しているようなのです。

以下のスクリプトはwin8.1環境下では二つのウィンドウが同一のなるのですが
XP環境下ではhgimgを利用したがウィンドウでは同一になりません。

どうしてこうなってしまうのでしょうか?

;#############################################

#include "hgimg3.as" screen 1,640,480 title "1" ;テクスチャのサイズを640*480にするため ;640*480の画像を作る gradf 0, 0, 640, 480, 0, 0,255 bmpsave "screen2.bmp" w=ginfo(12) h=ginfo(13) wait 2 screen 0, w, h title "0" hgini gsel 1 ;テクスチャのサイズを640*480にするため ;640*480の画像を読む texload2 "screen2.bmp", w, h id=stat ;1番のスクリーンを settex w, h, 0,id repeat -1 gsel 1 redraw 0 color boxf 0,0,200,200 color 255,255,255 font "",200 pos 0,0 mes cnt redraw 1 hgdraw gsel 0 gmode 0 , w, h pos w/2, h/2 hgrotate id , 0 , 0 , 0 , w , h hgsync 10 gsel 1 settex w , h , 0 , id wait 1 loop



この記事に返信する


skyblue

リンク

2015/2/8(Sun) 10:45:09|NO.67322

DirectXのバージョン間で違いが出るのは当たり前です。
普通はバージョンを揃えて違いが出ないようにするのが普通です。
もしくは仕様です。



まる

リンク

2015/2/8(Sun) 12:59:56|NO.67327

Windows XPはDirectX9までで10や11は入らないはずです。

>もしくは仕様です。
これはhgimg3はDirectXのバージョンによって挙動が異なる命令があって
それを割り切って使うしかないという意味でしょうか?



暇人

リンク

2015/2/8(Sun) 14:12:35|NO.67329

>メインマシン(windows8.1 Directx 11)ではうまく動いていたので
Directx11が入っててもHgimg3が使用するのはDirectX8

OSじゃなくハードウェア側の問題だと思う
texload2はD3DXCreateTextureFromFileExを使ってると思うけど
https://msdn.microsoft.com/ja-jp/library/bb172802(v=vs.85).aspx
>幅 (ピクセル単位) です。この値が 0 または D3DX_DEFAULT の場合、
>寸法はファイルから取得され、2 の累乗に丸められます。
>デバイスが 2 の累乗でないテクスチャーをサポートし
>D3DX_DEFAULT_NONPOW2 が指定されている場合、サイズの丸めは行われません。
これはDirectX9でDirectX8だとD3DX_DEFAULT_NONPOW2は無いかも
ハードウェア側が2の累乗でないテクスチャーをサポートしてない場合
作られるテクスチャサイズが変わってしまう

これが原因なら↓ので問題無くなると思う

#include "hgimg3.as" screen 1,1024,512 title "1" gradf 0, 0, 640, 480, 0, 0,255 bmpsave "screen2.bmp" w=ginfo(12) h=ginfo(13) wait 2 screen 0, 640, 480 title "0" hgini gsel 1 texload2 "screen2.bmp", w, h id=stat settex w, h , 0 , id repeat -1 gsel 1 redraw 0 color boxf 0,0,200,200 color 255,255,255 font "",200 pos 0,0 mes cnt redraw 1 hgdraw gsel 0 gmode 0 , 640, 480 pos 640/2, 480/2 hgrotate id , 0 , 0 , 0 , 640, 480 hgsync 10 gsel 1 settex w, h , 0 , id wait 1 loop
settexの負荷が増えるが元々毎フレーム使用するような命令じゃないから・・・



Makoto

リンク

2015/2/8(Sun) 14:32:03|NO.67330

こちらの記事も参考になると思いますよ。
http://hsp.tv/play/pforum.php?mode=all&num=65942



暇人

リンク

2015/2/8(Sun) 14:48:35|NO.67331

あ、NO.67329のはグラボのテクスチャ最大サイズが512だった場合ダメだな・・・



まる

リンク

2015/2/8(Sun) 16:18:43|NO.67334

どうも、暇人さんのご指摘の通りテクスチャサイズが2の累乗でないと
強制的にリサイズされてしまい、それが問題だったようです。

テクスチャサイズを1024*1024になるようにプログラムを書き換えたら
2014年購入のwindows8.1 corei5 グラボなし DirectX 11
2000年購入のwindowsXP Pentium3 グラボなし DirectX 9

このふたつの環境で同一の動作をしてくれました。
質問に答えてくださった方々感謝です。



ONION software Copyright 1997-2021(c) All rights reserved.