MFCで毎フレーム処理 – プログラミング – Home

MFCで毎フレーム処理
 
通知
すべてクリア

MFCで毎フレーム処理


初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

お世話になります。

MFCでPeekMessageのようなループを処理をしている箇所というのは
どこにあるのでしょうか?

毎フレーム(VSync毎に)処理をさせたいのがある場合に
どこに入れればよいのかなと思い、探していまして。

よろしくお願いします。


引用解決済
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

VSync毎にってのは難しいと思う。
CWinApp::Runだけど。


返信引用
初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

返信ありがとうございます。

>CWinApp::Runだけど

これを自分でオーラーライドした場合は、
MFCでのメッセージ処理を自分が書かないと駄目ですよね?
(CWinApp::Runのソースが用意されていないので、どのようにすれば良いでしょうか?)

また、VSync毎でなくても、ウィンドウズからメッセージがこない場合に
必ず処理させたいという感じなのですが、やはりCWinAppのRunでしょうか?

よろしくお願いします。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>毎フレーム(VSync毎に)処理をさせたいのがある場合に
グラフィックなどを「VSync信号」のタイミングで高速処理したいんですよね?
PC-DOSやPC9801のときは出来たみたいですけどWINDOWSでは直接グラフィックボード
のドライバーを直接操作しないとだまかも知れないです。
DirectX等で出来るかな?

>また、VSync毎でなくても、ウィンドウズからメッセージがこない場合に
>必ず処理させたいという感じなのですが
「OnIdle」ですね。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

修正
>しないとだまかも知れないです。
しないとだめかも知れないです。


返信引用
初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

返信有り難うございます。

なるほど、VSyncの場合はDirectXを使うのが手っ取り早そうですね。

でも、DirectXでもVsyncをまってフリップメソッドをどこかで呼ばないといけいなのです
が、それは教えていただいたOnIdleで呼べばいいのでしょうかね?


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>なるほど、VSyncの場合はDirectXを使うのが手っ取り早そうですね。

まず、このことはいいですか?
>グラフィックなどを「VSync信号」のタイミングで高速処理したいんですよね?
DirectXは可能性として発言しただけでそういう関数等があるかどうか
僕にも分りません。

>でも、DirectXでもVsyncをまってフリップメソッドをどこかで呼ばないといけ
>いなのですが、それは教えていただいたOnIdleで呼べばいいのでしょうかね?

OnIdleは次のための関数です。
>ウィンドウズからメッセージがこない場合に必ず処理させたい
>という感じなのですが


返信引用
まぁ
 まぁ
(@まぁ)
ゲスト
結合: 17年前
投稿: 9
 

>「VSync信号」のタイミングで高速処理

アプリケーションの作成でそこまでやるってことは
すごい高速のアプリケーションコードで書かれたプログラムなんですね。
すごいですね。


返信引用
麩
 麩
(@麩)
ゲスト
結合: 17年前
投稿: 95
 

正確にVSync計って動かせる環境ばかりとは限りません(ノートPCなんか特に)。

ドライバに近いところを触るので、Win32APIでは直接VSyncを計れません(確か
そのはず)。
DirectXも、最終的な画面転送をVSyncに合わせるオプションはあるようです
が、直接取得するオプションは見当たりませんでした。

複雑なメッセージ処理をやってる可能性のあるメインスレッドでVSyncに同期す
るのはあまりよくありません。
一つでもVSyncの間隔より長い処理があればその回のVSync同期は失敗しま
す。
例えば、SendMessageやMessageBoxもその処理をしている間は別のメッセー
ジループを使用したりするので、その間自分で用意したメッセージループは稼動
しません。

環境により、秒間のVSyncの回数は相当ばらつきが有ります。60~120くらいあ
る場合も有るそうなので、全VSyncごとに処理する必要があるかどうか考えてみ
てください。

VSyncに同期して処理する目的によっては、必ずしも全VSyncごとに処理する
必要はありませんし、そのあたりを整理してはどうでしょう。


返信引用
初心者
 初心者
(@初心者)
ゲスト
結合: 24年前
投稿: 206
Topic starter  

すいません、説明不足で。

ティアリングを出さないためにVSyncと合わせるだけなので、
VSyncに間に合わなかったら、次のVSyncまで待機しているのは問題無いです。


返信引用
まぁ
 まぁ
(@まぁ)
ゲスト
結合: 17年前
投稿: 9
 

「初心者」って名前を変更してもらえませんか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました