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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0507
SADOUS【hmm】dgdrawprimitiveだと描写できない5解決


SADOUS

リンク

2014/5/7(Wed) 22:15:00|NO.61931

度々すみません。
ようやく描写に成功したと思ったらスタックを積んで一斉描写する処理が
うまくいかないようです。

dgscreen 0は赤く初期化
dgbuffer 1は画像読み込み後は放置
dgbuffer 2は黒く初期化し、ID=1から画像の一部を抜き取る

実行結果は、画面が黒く塗りつぶされているので2→0へのコピーはできていて、
dgbuffer 2の画像の抜き取りの処理に問題があることがわかった。
更に、dg***primitiveをdggcopyに置き換えるとID=0に正しく画像が表示される。

#include "hmm.as" DGINIT onexit*exit ;---初期る #const MODE_WINDOW 1 #const MODE_FULLSC 0 DGSCREEN 640,480,MODE_WINDOW DGRENEWALTIMING 60 DGBUFFER 1,640,480 dgloadfname "image/map.bmp",1 DGBUFFER 2,640,480 ;---展開 DGGSEL 2 dgcolor 0,0,0,255:dgclear dgrect 0,0,32,32 dgscaleandangle 256,256,256 dgblendmode 1 dgcolor 255,255,255,255 dgpos 0,0 dgaddprimitive ;dggcopy 1,0 dgrect 0,0,32,32 dgscaleandangle 256,256,256/4 dgblendmode 1 dgcolor 255,255,255,255 dgpos 0,32*1 dgaddprimitive dgtexture 1:dgdrawprimitive ;dggcopy 1,0 ;---描写 DGGSEL 0 dgcolor 255,0,0,255:dgclear dgrect 0,0,640,480 dgscaleandangle 256,256,256;p3=256で一周 dgblendmode 1 /* 0 = 透過無し描画 1 = 半透明合成( 透過有りRGB(0, 0, 0)を透過 ) 2 = 加算合成*/ dgcolor 255,255,255,255 dgpos 0,0 dggcopy 2,0 ;TEXT dgfont msgothic,12:dgcolor 0,0,255,255 dgpos 0,0:dgdrawtext "dir_cur="+dir_cur+"\n/image/map.bmpを参照",640,480 dgredraw repeat getkey esc,27 if esc=1 :goto*exit wait 1 loop *exit dggsel 0:dgcolor 0,0,0,255:dgclear dgcolor 0,255,0,255 dgpos 0,0:dgdrawtext "this program is going to finish.\nplease wait.",640,480 dgredraw wait 100 DGEND end



この記事に返信する


あり

リンク

2014/5/8(Thu) 00:29:00|NO.61935

不具合なのか仕様なのかは分かりませんが
DGDRAWPRIMITIVEがバッファに対してでは正しく動作していないようですね。

おそらく開発時にDGDRAWPRIMITIVEをバッファに使う事が
想定されていなかったからでしょうが
開発が無期限休止状態である以上、修正も期待できないので
こういう仕様だと割り切ってDGGCOPYを使いましょう。
(前に言った、「サポートが一切ない(かもしれない)」とはこういう事です)

それでもどうしても納得できないのであれば
駄目元でプラグインの製作者に連絡してみてください。



774

リンク

2014/5/8(Thu) 01:24:32|NO.61937

少し触った程度なので間違っているかも知れませんが
描画ループ中ならバッファに対するDGDRAWPRIMITIVEも有効な気がします。
(スタック領域確保かバッファ更新が起動直後は間に合わない?)

描画用のループ処理を組まれてないのは、テストの為に敢えてそうなさってるのでしょうか?



あり

リンク

2014/5/8(Thu) 16:36:05|NO.61938

774さんの指摘を元に改めて調べてみたところ
どうやら最初のdgaddprimitiveの前にdgtextureを指定する必要があるようです。
マニュアルのサンプルはdgdrawprimitiveの直前にdgtextureがあるので
dgaddprimitiveより後で使わなければならないものと誤解していました。
(サンプルはループ処理なので2ループ目からdgtextureが適用されている模様)

ちなみに複数のバッファからのコピーは、バッファ毎にdgdrawprimitiveを
使わなければならないようです。
(dgdrawprimitive一回につきdgtextureは直前の一つしか適用されない?)

#include "hmm.as" DGINIT onexit*exit ;---初期る #const MODE_WINDOW 1 #const MODE_FULLSC 0 DGSCREEN 640,480,MODE_WINDOW DGRENEWALTIMING 60 DGBUFFER 1,640,480 dgloadfname dir_tv + "\\bg04.jpg",1 DGBUFFER 2,640,480 dgloadfname dir_tv + "\\bg05.jpg",2 DGBUFFER 3, 640, 480 ;---展開 DGGSEL 3 dgcolor 0,0,0,255:dgclear dgrect 0,0,32,32 dgscaleandangle 256,256,256 dgblendmode 1 dgcolor 255,255,255,255 dgpos 0,0 dgtexture 1 ; 最初のdgtextureだけはdgaddprimitiveより前に必要 dgaddprimitive dgdrawprimitive ; これを消すと後のdgtextureのみ適用される dgrect 0,0,32,32 dgscaleandangle 256,256,32 dgblendmode 1 dgcolor 255,255,255,255 dgpos 0,32 dgaddprimitive dgtexture 2 ; 2個目以降はdgaddprimitiveの後でも良い?(同じバッファからのコピーなら省略化) dgdrawprimitive ;---描写 DGGSEL 0 dgcolor 255,0,0,255:dgclear dgrect 0,0,640,480 dgscaleandangle 256,256,256;p3=256で一周 dgblendmode 1 dgcolor 255,255,255,255 dgpos 0,0 dggcopy 3,0 dgredraw repeat getkey esc,27 if esc=1 :goto*exit wait 1 loop *exit wait 10 DGEND end
これで一応ちゃんと動くようですが
dgtextureの挙動が怪しいので、不具合のようにも思えます。
しかし私は製作者本人ではないので、何が正しい挙動で何が不具合なのかの
判断はできません。



sadous mobile

リンク

2014/5/8(Thu) 18:29:16|NO.61939

>ありさん
2周目からdgtextureが適用されていたのですか?
なんだか納得いきませんけれどprimitiveはバッファには
使わないようにします。

パソコンがすぐには使えず確かめられませんが
addprimitiveの前にtextureの指定も試してみます。



>774さん
はい、マップ画像の実験的なものとしています。
ループ組んで見ないとまだ分からないですよね。。。
バッファに描けるよう頑張ります。



SADOUS

リンク

2014/5/8(Thu) 19:53:06|NO.61940

最終的に「;---展開」の処理がこんなわかりやすく・・・
primitive系の命令の前に一度だけ指定してやればいいんですね。
思い通りに表示させられました。

;---展開 DGGSEL 2 dgcolor 0,0,0,255:dgclear ;共通の設定 dgtexture 1 dgrect 0,0,32,32 dgblendmode 1 dgcolor 255,255,255,255 ;回転・ズーム・位置は個々 dgscaleandangle 256,256,256 dgpos 0,0 dgaddprimitive dgscaleandangle 256,256,256/4 dgpos 0,32*1 dgaddprimitive dgscaleandangle 256,256,256/2 dgpos 0,32*2 dgaddprimitive dgdrawprimitive



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