トップページ > 記事閲覧
裏画面描画について
名前:zxc 日時: 2014/04/15 13:17

 Win7 VC++2010Expressを使っています 以下のコードでフルスクリーンではグレーのボックスが表示されず、ウィンドウモードでは表示されました。(フルスクリーンではScreenFlip関数をDrawBoxの後に追加することで表示することができることを確認しました) ウィンドウモードでは(少なくともDrawBox関数は)裏画面描画指定を無視する仕様なのでしょうか。それともこちらの環境、関数の使い方等の問題なのでしょうか #include "DxLib.h" int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ DxLib::DxLib_Init(); //ChangeWindowMode(TRUE); SetDrawScreen( DX_SCREEN_BACK ); DrawBox( 0, 0, 320,240 , GetColor( 127,127,127 ), TRUE ) ; WaitKey(); DxLib::DxLib_End(); return 0; }
メンテ

Page: 1 |

Re: 裏画面描画について ( No.1 )
名前:管理人 日時:2014/04/16 00:32

> ウィンドウモードでは(少なくともDrawBox関数は)裏画面描画指定を無視する仕様なのでしょうか いえ、裏画面描画指定はウインドウモードでも有効です ChangeWindowMode( TRUE ) ; を DxLib_Init よりも前に実行するようにすると グレーのボックスが表示されないことが確認できると思います #include "DxLib.h" int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE); DxLib::DxLib_Init(); SetDrawScreen( DX_SCREEN_BACK ); DrawBox( 0, 0, 320,240 , GetColor( 127,127,127 ), TRUE ) ; WaitKey(); DxLib::DxLib_End(); return 0; } ただ、ウインドウを最小化して、その後最小化を解除するとグレーのボックスが表示されます 何故かといいますと、表画面の表示内容は保存されていないので、最小化を解除した際に OSから「表画面の内容が消えたから表画面を再描画して」と指令がくるのですが、 DXライブラリではそのときに ScreenFlip を使用して裏画面の内容を表画面に表示するようにしているからです 恐らく DxLib_Init の直後に ChangeWindowMode( TRUE ) ; を呼んだ場合は フルスクリーンモードからウインドウモードに変化した直後の微妙なタイミングで OSからの「再描画指令」が来て、DXライブラリ内部で ScreenFlip が呼ばれて 結果裏画面に描画したグレーのボックスが表示されるのだと思います
メンテ
Re: 裏画面描画について ( No.2 )
名前:zxc 日時:2014/04/16 19:40

 確かにChangeWindowMode(TRUE)をDxLib::DxLib_Init関数よりも前に実行することで、ボックスが表示されないことが確認できました。  理由が無い限りは基本的にChangeWindowMode(TRUE)を先に呼ぶべきなのですね。ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存