質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

1回答

2446閲覧

60フレームでの描画を行う際に遅延してしまいます

hsuzuki146

総合スコア4

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

0グッド

2クリップ

投稿2019/11/29 12:06

編集2019/11/29 12:17

前提・実現したいこと

ディスプレイの垂直同期に依存しない60fpsの描画を達成させたい

発生している問題・エラーメッセージ

DirectXでSwapChainの実装を行っているのですが、PCで60フレームでの描画を考えた時に ディスプレイの垂直同期をチェックしてPresentを行うようにすると、 30Hzまたは240Hzのでリフレッシュレートが返ってきてしまい、 任意の時間での描画更新が行えないと思います。 そこで、自分で16msのタイマーを計測し、その時間経過したら Presentを呼び出す実装をしたのですが、垂直同期とタイマーのタイミングが 大きくずれることにより、意図せず二回垂直同期を行った後で描画されるようになってしまいました。 このような動作になった場合、ずっとこの状態となってしまうのですが、 どなたか解決方法をお持ちの方はいらっしゃいますでしょうか?

試したこと

一度ずれた状態になった際に、フルスクリーンモードにして強制的に垂直同期を行うと
再度安定した状態に戻ります。

補足情報(FW/ツールのバージョンなど)

Visual Studio 2015 & DirectX11を使用し

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

DirectXは(というかWindowsは)自分でいじっていないのでJust an ideaですが、

そもそも60Hzは16.666...ms周期なので16.0msでタイマーを叩いていたらずれていくと思います。が、

意図せず二回垂直同期を行った後で描画される

のは、現象としては逆(垂直同期より長い周期で画面を更新している)ですね。処理が1コマに間に合わないことがあるのか、16msのタイマーというのが他の優先度の高いタスクにブロックされたりとかがあるのでしょうか。要確認な気がします。

30Hzまたは240Hzのでリフレッシュレートが返ってきてしまい、

これは意図して選べるのでしょうか。240Hzが選択的に拾えるなら、その4回に1回で処理してやる、というのはどうでしょうか。(単純に引っ掛けると4msで一コマの処理が終わらなければいけないことになるので、処理が重いと一工夫しなければいけないかも知れませんが)

投稿2019/11/30 00:05

編集2019/11/30 02:20
thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問