[過去ログ] DXライブラリ 総合スレッド その18 (981レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
814
(8): 2015/09/06(日)10:04 ID:E7bRQ4Kv(1) AAS
Drawcircleを1000回連続でやっても、一気に表示されるのは何故ですか?
例えば円を増やすようなプログラムの場合、一気に出力されるんですが…
順番に実行されるなら増えていくように描画されるはずだと思いますが
何がいけないんでしょうかね。
816
(2): 2015/09/06(日)12:12 ID:qpvafNwe(1/2) AAS
>>814
DXライブラリでは人が目にするディスプレイの画面(表画面)とは別の仮想的なスクリーン(裏画面)に描画して
最後にScreenFlipで裏画面に描かれたグラフィックを表画面に反映させてる
だからScreenFlipする直前までに裏画面に描かれた内容全部がScreenFlipのタイミングで一瞬でディスプレイに表示される
一気に表示されるのは裏画面の中で連続して描画した後最後にそれをScreenFlipしてるからじゃない?
だんだん増えていくように描画したいのならDrawcircleの回数を最初は1から始まってループが繰り返されるにつれて
増やしていくようにしないとダメなんじゃないかと
825: 814 2015/09/06(日)19:35 ID:z/NhP+Yl(5/5) AAS
つまり
drawcircleの中に ScreenFlip関数が埋め込まれているのではないか?
っていうのが僕の予想です。

でもscreenflip関数によってある程度書き込みがなかったら、一定期間終了後
書き出すんじゃないでしょうか?つまりscreenflip関数が呼び出されたかどうか
監視するための、Detectionscreenflip関数なるものがあって、それによって制御
されていると。
省4
828
(1): 814 2015/09/07(月)19:10 ID:nsmH+La5(1/6) AAS
実験しました

for(i=0; i<=100; i++){drawcircle(); waittimer(1000);}の場合も
for(i=0; i<=100; i++){drawcircle(); waittimer(100000);}の場合も

最初の円を表示する時間はいずれも3秒前後でした。もちろん次の円以降は
waittimerの影響で後者のほうが100倍遅いですが…

つまりdraw系の関数は、連続でdrawが実行されない場合は3秒たったら
出力されるってことでいいですかね?
829: 814 2015/09/07(月)19:37 ID:nsmH+La5(2/6) AAS
違うな…
やっぱりわかんね…
10ミリwaitかませたら、最初は3秒でも次以降は10ミリ秒未満で連続で
表示されるってことだからな…

何故drawcircleが連続であるときは、一気に表示されずに
waitを挟むと連続的に表示されるのか?

これが謎です
830: 814 2015/09/07(月)19:53 ID:nsmH+La5(3/6) AAS
分かった分かった
最初の3秒はたぶん描画と関係ないんだ、エンジンを準備してるとか
そういう話なんだろうな。
さっき
for(i=0; i<=100; i++){drawcircle(); waittimer(1);}
で試したら、こっちは10秒くらいたってから一気に表示
for(i=0; i<=100; i++){drawcircle(); waittimer(10);}
省3
832: 814 2015/09/07(月)19:55 ID:nsmH+La5(4/6) AAS
でなんでdrawcircleを待ってるかって言うと
一々描画のエンジンを呼んでたら処理量が多くなるから
描画エンジンのバッファを一定期間開放して溜まったら表示みたいに
したほうが効率的なんだろうね

ここまで分かると本当に気持ちいいな
834: 814 2015/09/07(月)20:03 ID:nsmH+La5(5/6) AAS
>>831
描画の仕組みは裏画面に表示してから出力って事じゃないんですか?
DrawCircle内部にScreenFlip関数があるんでしょう。

で、あるとして問題はタイミングですよ。
LoagGraphみたいに内部にScreenFlipが無い場合はScreenFlipをこちからから
呼べるけどDrawCircleの場合はできないですからね。

だから、DrawCircleが一気に呼ばれた場合はScreenFlip関数が競合してしまうから
省2
835: 814 2015/09/07(月)20:14 ID:nsmH+La5(6/6) AAS
>>833
DxLib_Init()
これに3秒かかるんでしょう?
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.031s