|
 |
|
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を使いましょう。
(前に言った、「サポートが一切ない(かもしれない)」とはこういう事です)
それでもどうしても納得できないのであれば
駄目元でプラグインの製作者に連絡してみてください。
|
|
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の挙動が怪しいので、不具合のようにも思えます。
しかし私は製作者本人ではないので、何が正しい挙動で何が不具合なのかの
判断はできません。

| |
|
2014/5/8(Thu) 18:29:16|NO.61939
>ありさん
2周目からdgtextureが適用されていたのですか?
なんだか納得いきませんけれどprimitiveはバッファには
使わないようにします。
パソコンがすぐには使えず確かめられませんが
addprimitiveの前にtextureの指定も試してみます。
>774さん
はい、マップ画像の実験的なものとしています。
ループ組んで見ないとまだ分からないですよね。。。
バッファに描けるよう頑張ります。
|
|
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
|
|