[過去ログ]
DXライブラリ 総合スレッド その18 (981レス)
DXライブラリ 総合スレッド その18 http://peace.5ch.net/test/read.cgi/gamedev/1399459468/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
814: 名前は開発中のものです。 [] 2015/09/06(日) 10:04:28.73 ID:E7bRQ4Kv Drawcircleを1000回連続でやっても、一気に表示されるのは何故ですか? 例えば円を増やすようなプログラムの場合、一気に出力されるんですが… 順番に実行されるなら増えていくように描画されるはずだと思いますが 何がいけないんでしょうかね。 http://peace.5ch.net/test/read.cgi/gamedev/1399459468/814
816: 名前は開発中のものです。 [sage] 2015/09/06(日) 12:12:26.12 ID:qpvafNwe >>814 DXライブラリでは人が目にするディスプレイの画面(表画面)とは別の仮想的なスクリーン(裏画面)に描画して 最後にScreenFlipで裏画面に描かれたグラフィックを表画面に反映させてる だからScreenFlipする直前までに裏画面に描かれた内容全部がScreenFlipのタイミングで一瞬でディスプレイに表示される 一気に表示されるのは裏画面の中で連続して描画した後最後にそれをScreenFlipしてるからじゃない? だんだん増えていくように描画したいのならDrawcircleの回数を最初は1から始まってループが繰り返されるにつれて 増やしていくようにしないとダメなんじゃないかと http://peace.5ch.net/test/read.cgi/gamedev/1399459468/816
825: 814 [] 2015/09/06(日) 19:35:00.27 ID:z/NhP+Yl つまり drawcircleの中に ScreenFlip関数が埋め込まれているのではないか? っていうのが僕の予想です。 でもscreenflip関数によってある程度書き込みがなかったら、一定期間終了後 書き出すんじゃないでしょうか?つまりscreenflip関数が呼び出されたかどうか 監視するための、Detectionscreenflip関数なるものがあって、それによって制御 されていると。 だから1万回連続でdrawcircleがあった場合、連続的に書き込まれるために 5〜10秒待たなければならない、でもwaitを挟むとDetectionscreenflip関数が FALSEを返すから、すぐに出力されると。たぶん5〜10ミリの間だと思いますね。 違いますか? http://peace.5ch.net/test/read.cgi/gamedev/1399459468/825
828: 814 [] 2015/09/07(月) 19:10:44.33 ID:nsmH+La5 実験しました for(i=0; i<=100; i++){drawcircle(); waittimer(1000);}の場合も for(i=0; i<=100; i++){drawcircle(); waittimer(100000);}の場合も 最初の円を表示する時間はいずれも3秒前後でした。もちろん次の円以降は waittimerの影響で後者のほうが100倍遅いですが… つまりdraw系の関数は、連続でdrawが実行されない場合は3秒たったら 出力されるってことでいいですかね? http://peace.5ch.net/test/read.cgi/gamedev/1399459468/828
829: 814 [] 2015/09/07(月) 19:37:15.54 ID:nsmH+La5 違うな… やっぱりわかんね… 10ミリwaitかませたら、最初は3秒でも次以降は10ミリ秒未満で連続で 表示されるってことだからな… 何故drawcircleが連続であるときは、一気に表示されずに waitを挟むと連続的に表示されるのか? これが謎です http://peace.5ch.net/test/read.cgi/gamedev/1399459468/829
830: 814 [] 2015/09/07(月) 19:53:55.22 ID:nsmH+La5 分かった分かった 最初の3秒はたぶん描画と関係ないんだ、エンジンを準備してるとか そういう話なんだろうな。 さっき for(i=0; i<=100; i++){drawcircle(); waittimer(1);} で試したら、こっちは10秒くらいたってから一気に表示 for(i=0; i<=100; i++){drawcircle(); waittimer(10);} の場合は3秒たってから1個ずつ10ミリ感覚で表示 つまりdrawcircle内の描画の部分は1〜1+xしか感覚がない場合は まだ描画を我慢してるってことなのかな? http://peace.5ch.net/test/read.cgi/gamedev/1399459468/830
832: 814 [] 2015/09/07(月) 19:55:45.18 ID:nsmH+La5 でなんでdrawcircleを待ってるかって言うと 一々描画のエンジンを呼んでたら処理量が多くなるから 描画エンジンのバッファを一定期間開放して溜まったら表示みたいに したほうが効率的なんだろうね ここまで分かると本当に気持ちいいな http://peace.5ch.net/test/read.cgi/gamedev/1399459468/832
834: 814 [] 2015/09/07(月) 20:03:49.87 ID:nsmH+La5 >>831 描画の仕組みは裏画面に表示してから出力って事じゃないんですか? DrawCircle内部にScreenFlip関数があるんでしょう。 で、あるとして問題はタイミングですよ。 LoagGraphみたいに内部にScreenFlipが無い場合はScreenFlipをこちからから 呼べるけどDrawCircleの場合はできないですからね。 だから、DrawCircleが一気に呼ばれた場合はScreenFlip関数が競合してしまうから 一気にデータを送れるようなバッファに書き込むようにしてるんじゃないでしょうか? だから何十秒たって一気に表示されるんだと思いますよ。 http://peace.5ch.net/test/read.cgi/gamedev/1399459468/834
835: 814 [] 2015/09/07(月) 20:14:55.48 ID:nsmH+La5 >>833 DxLib_Init() これに3秒かかるんでしょう? http://peace.5ch.net/test/read.cgi/gamedev/1399459468/835
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.027s