問題タブ [frame-rate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
4398 参照

c++ - C++: v-sync を使用しないフレーム レート リミッタはどこで入手できますか?

これはプログラマーの間では大きな秘密のように思えます。誰もこのコードを共有したくありません。なんで?

v-sync を使用せずに FPS を少なくとも 60 に制限できる有効な FPS リミッターが見つかりません。

もちろん、私はそれを正しい方法で行いたいと思っています。だから私はまだ自分のものを作っていません.彼らは皆、fpsリミッターのすべてのトリックを学ぶのに1年かかったと言っています...

編集:これは完璧ではない私のfpsリミッターコードですが、私ができる最善のことですが、それでも涙が出ます:

EDIT2 :提案されたように待機可能なタイマーを使用して、2回目の試行を行います:

うまくいくと思います。しかし、まだ引き裂かれています... while ループを追加したことに注意してください。

--

別の質問:この初期化は安全ですか?:

待機可能なタイマーがサポートされていても、最後の2つのチェックが失敗する可能性があるのではないかと心配しています...これまでのところ、失敗していません。これは、そのサポートを確認する正しいアプローチですか?

0 投票する
1 に答える
1245 参照

android - Android アプリでフレームレートを調整するにはどうすればよいですか?

Android アプリでフレームレートを調整するにはどうすればよいですか? ゲームを一定の速度で実行したいと思います。私のアプリは高いフレームレートを必要としないので、必要以上にバッテリーを消費するので、必要ありません。

0 投票する
1 に答える
2109 参照

flash - Flashゲームのフレームレートを制限しようとしています

私は2008年に作ったFlashゲームを持っています。最近は超高速で動作します。実際には速すぎます。FlashDevelopでは60fpsに設定していますが、これは描画呼び出しの量を制限しているだけだと思います。最近、私のロジックは1秒間に60回をはるかに超えて実行されていると思います。しばらくActionScriptを実行していませんが、ロジックループを実行するenterFrameHandlerを使用していることに気付きました。制約が設定されていないようです。私が信じているように、それはただ発火します。30または60fpsで上限を設定する方法はありますか?助けやアイデアをいただければ幸いです。ロジックの実行速度が速すぎると、ゲームが台無しになります:(

更新 ActionScriptの知識が戻ってきたので、私は何かを考えました。enterFrameHandlerは、プロジェクトプロパティのFlashまたはFlashDevelopでfpsが設定されているものにバインドされていませんか?誰かがこれを確認できますか?それは私の描画呼び出しと論理呼び出しが1:1であることを意味しますか?

0 投票する
4 に答える
14597 参照

c# - C# WPF プログラムで FPS を決定しようとしています

WPF と C# を使用して、タッチ テーブルのアプリケーションを作成しています。(そして、私は WPF にあまり詳しくありません。まったくです。) API から「要求」しているフレームレートを取得していないと思われるため、独自の FPS 計算機を作成しようとしています。内部クロックに基づいて計算する数学は知っていますが、Windows/WPF API 内でタイマーにアクセスする方法がわかりません。

タイマーにアクセスするには、どのライブラリ/コマンドが必要ですか?

0 投票する
1 に答える
1178 参照

java - カスタムJavaコンポーネントでフレームレートを正しく見つける

フレームレートコードが正しいとは確信できません。また、探しているものの正確な例を見つけることができませんでした。

基本的に、私はサブクラスjava.awt.Component化しており、メソッド内で関数paint(Graphics)を呼び出しcalculateFrameRate()ます。これを以下に示します。でインクリメンタル描画は行いませんupdate()。これからの数は多いようですが、Componentクラスの固有のダブルバッファリングは、ペイントがレンダリングされている量の2倍の量で呼び出されていることを意味するのでしょうか。私はダブルバッファのものにさびていますが、それは完全に間違っているかもしれません。

フレームレートの方法は次のとおりです。

乾杯、

ハミー

0 投票する
1 に答える
12703 参照

linux - Linux: ネットワーク経由のスクリーン デスクトップ ビデオ キャプチャ、および VNC フレームレート

テキストの壁で申し訳ありません - TL;DR:

  • VNC 接続のフレームレート (フレーム/秒単位) は? というか、それを決定するのはクライアントかサーバーか?
  • デスクトップ画面キャプチャに関するその他の提案-ただし、「正しくタイムコード化」/ジッターのないフレームレート(安定した期間); 非圧縮(またはロスレス)の画像シーケンスとして取得する可能性はありますか?

簡単に言えば、私が直面している典型的な問題があります。私は時々ハードウェアを開発し、PC に入力されたコマンド (「デスクトップ キャプチャ」)ハードウェアの応答 (「ライブ ビデオ」) の両方を示すビデオを録画したいと考えています。 . 具体的な詳細に入る前に、イントロのチャンクが続きます。  
 

イントロ/コンテキスト

現時点での私の戦略は、ビデオ カメラを使用してハードウェア テストのプロセスを ( 「ライブ」ビデオとして) 記録し、同時にデスクトップ キャプチャを行うことです。ビデオ カメラは 29.97 (30) FPS MPEG-2 .AVI ビデオを生成します。ビデオと同じフレームレートで、PNGの画像シーケンスとしてデスクトップキャプチャを取得したいと考えています。アイデアは次のようになります。2 つのビデオのフレーム レートが同じ場合。それから私は簡単にできる

  • デスクトップ キャプチャの開始時間を、「ライブ」ビデオの一致するポイントに合わせます。
  • デスクトップ キャプチャの縮小バージョンが「ライブ」ビデオの上にオーバーレイとして配置される ピクチャー イン ピクチャーを設定します。
    • (「ライブ」ビデオの画面の一部は、「デスクトップ キャプチャ」オーバーレイとの視覚的な同期ソースとして機能します)
  • インターネット用に適切に圧縮された「最終的な」結合ビデオをエクスポートします

ffmpeg原則として、このプロセスのようなコマンド ライン ツールを使用できると思います。ただし、2 つのビデオの位置合わせの開始点を見つけるために GUI を使用することをお勧めします。

最終的に、私が達成したいことは、「最終」ビデオをエクスポートするときに最高の品質を維持することです。「ライブ」ビデオは、カメラから取り出したときにすでに圧縮されています。これは、Theora .ogv コーデックを通過するときにさらに劣化することを意味します -そのため、元のビデオを保持し、別の圧縮/解像度が必要な場合は、コマンドラインなどを使用して「最終的な」ビデオを新たに生成したいと考えています。これが、「デスクトップ キャプチャ」ビデオを PNG シーケンスとして使用するのが好きな理由でもあります (ただし、圧縮されていない形式であれば何でもよいと思います)。 (つまり、PNG) が適切です。  
 

デスクトップ キャプチャ オプション

さて、私が現在使用している Ubuntu Lucid でのこのプロセスには多くの問題があります (そして、10.04 での私の試練のいくつかについて読むことができます: Theora ogv を使用したビデオ オーバーレイ/コンポジット編集 - Ubuntu フォーラム)。ただし、重大な問題の 1 つは、2 つの受信ビデオのフレーム レートが等しいという仮定です。実際には、通常、デスクトップ キャプチャのフレームレートは低くなります。さらに悪いことに、非常に頻繁にフレームが同期していません。

これには、ビデオ エディターの前に座って、フレーム レベルで 1 秒未満のクリップを手動でカットおよび編集するという面倒が必要です。最終的に 5分間のビデオになるには、何時間もの作業が必要です。一方、2 つのビデオ (「ライブ」と「キャプチャ」) のフレームレートと同期同じである場合: 原則として、ビデオ エディターで開始同期ポイントを見つけるのに数分以上かかることはありません。 - そして、残りの「マージされた」ビデオ処理は、単一のコマンド ラインで処理できます。そのため、この投稿では、デスクトップ キャプチャの部分に焦点を当てたいと思います。

私が見る限り、Linux / Ubuntu でのデスクトップ キャプチャの実行可能な( Linux デスクトップをスクリーンキャストする 5 つの方法とは対照的に) 代替手段はほとんどありません (注意してください、私は通常、デスクトップ キャプチャのターゲットとしてラップトップを使用します)。

  1. ターゲット PC (ラップトップ) の VGA 出力でデスクトップのクローンを作成します。VGA からコンポジットまたは VGA から S ビデオへのハードウェアを使用して、VGA からビデオ信号を取得します。別の PC でビデオ キャプチャ カードを使用してビデオを取得する
  2. ターゲット PC でrecordMyDesktopを使用する
  3. キャプチャするターゲット PC にVNC サーバー( Ubuntu ではvi no、またはvncserver ) をセットアップします。別の PC でVNC キャプチャ ソフトウェア ( vncrecなど) を使用して、VNC ストリームを取得/記録します (その後、ビデオに変換できます)。
  4. オプションffmpegで使用x11grab
  5. *(ターゲット PC で、デスクトップ イメージ フレームのDMA転送を直接実行するツールを使用します - グラフィックス カード フレーム バッファ メモリからネットワーク アダプタ メモリへ)

上記のアプローチの有用性は、私の使用状況によって制限されることに注意してください。キャプチャしたいターゲット PC は、通常、大量のデータを移動するソフトウェア (テスト済みのハードウェアを利用) を実行します。そのようなシステムを説明するのは「かろうじて安定している」としか言いようがありません :) これは、要求の厳しいゲームのビデオ キャプチャを取得したいときにゲーマーが直面する問題に似ていると思います。recordMyDesktopまた、かなりのリソースを使用し、ローカル ハードディスクにキャプチャしたい のようなものを使い始めるとすぐに、深刻なカーネル クラッシュが発生します (多くの場合、vmcore が生成されません)。

したがって、私のコンテキストでは、通常、「ターゲット」PC デスクトップのキャプチャと記録を実行するために、2 台目のコンピューターの関与を想定しています。それ以外に、上記のオプションでこれまでに確認できる長所と短所を以下に示します。

(机上準備)

以下で説明するすべての方法について、私は事前にデスクトップを「準備」する傾向があります。

  • デスクトップの背景とアイコンを削除する
  • システム/環境設定/モニター ( gnome-desktop-properties)で解像度を 800x600 に下げます。
  • 色深度を 16 bpp に変更 (xdpyinfo | grep "of root"チェックに使用)

... デスクトップ キャプチャ ソフトウェアの負荷を最小限に抑えるためです。Ubuntu で色深度を変更するには、xorg.conf を変更する必要があることに注意してください。ただし、「/etc/X11 (Ubuntu 10.04) に xorg.conf (is) が見つかりませんsudo Xorg -configure」 -最初に実行する必要がある場合があります。

グラフィック リソースの使用を低く抑えるために、通常はcompiz無効にしていました。むしろ、「システム/設定/外観/視覚効果」を「なし」に設定していました。compizただし、 「視覚効果」を「通常」に設定して有効にしてみた後(これは保存されません)、LCD 画面のウィンドウがはるかに高速に再描画されることに気付きました。デスクトップキャプチャ用にもこのようにしています。これは少し奇妙だと思います。より多くのエフェクトを使用すると、画面のリフレッシュが速くなるのはなぜでしょうか? プロプライエタリドライバーが原因ではないようです(カードは「Intel Corporation N10 Family Integrated Graphics Controller」であり、Ubuntuからの切り替え時にプロプライエタリドライバーオプションは提供されませんcompiz)-ただし、すべてのぼかしと効果が私の目を欺くだけかもしれません:))。

VGAのクローン作成

まあ、これは最も高価なオプションです (1 つだけでなく 2 つのハードウェア (VGA コンバーターとビデオ キャプチャ カード) を追加購入する必要があるため)。また、主にラップトップに適用できます(画面と追加のVGA出力の両方を備えています-デスクトップの場合、追加のグラフィックカードまたはVGAクローンハードウェアにも投資する必要がある場合があります).

ただし、ターゲット PC の追加ソフトウェアをまったく必要としない (したがって、ターゲット CPU の 0% の処理能力を使用する) 唯一のオプションでもあります。 fps (個別のハードウェアによって実行されるため - ただし、個々のハードウェア ピース間に存在するクロック ドメインのミスアライメントは無視できるという前提で)。

実際、私はすでにキャプチャ カードのようなものを所有しているので、すでに VGA コンバーターに投資しています。最終的には、わずか 5 分の位置合わせポイントの検索と 1 つのコマンドで、最終的な「結合」ビデオを作成できるようになることを期待しています。ライン; しかし、このプロセスが意図したとおりに機能するかどうかはまだわかりません。また、デスクトップを非圧縮ビデオ @ 800x600、30 fps としてキャプチャできるかどうかも検討中です。

recordMyDesktop

引数なしで実行するrecordMyDesktopと、最初に (どのように見えるか) 生の画像データを次のようなフォルダーにキャプチャすることから始まります/tmp/rMD-session-7247。Ctrl-C を押して中断すると、この生の画像データが .ogv にエンコードされます。明らかに、私のテスト ソフトウェア (大量のデータも移動する) と同じハードディスクで大きな画像データを取得すると、通常はインストール クラッシュの原因になります :)

したがって、私が試みたのは、ネットワーク上でドライブを共有するようにSamba をセットアップすることでした。次に、ターゲット PC でこのドライブに接続し、recordMyDesktopこのネットワーク ドライブを ( gvfs経由で) 一時ファイルの場所として使用するように指示します。

このコマンドは一時ファイルにネットワークの場所を使用しますが (したがってrecordMyDesktop、ソフトウェアと並行して実行できるようになります)、Ctrl-C を押すとすぐにエンコードが開始capture.ogvされ、ローカル ハードに直接保存されます。ターゲットのドライブ(ただし、その時点では、私はあまり気にしません:))

最初の私の不満recordMyDesktopは、一時ファイルを保持し、最後にエンコードを避けるように指示できないことです。一時停止には Ctrl+Alt+p を使用できます-または、最初のファイルの後にすばやく Ctrl-C を押して、クラッシュさせます。これにより、一時ファイルが残ります(2回目にCtrl-Cを十分にすばやく押さないと、プログラムは「キャッシュをクリーンアップしています...」)。その後、次のように実行できます。

...生の一時データを変換するため。ただし、多くの場合、recordMyDesktopこの「レスキュー」の実行中にセグメンテーション違反が発生します。ただし、一時ファイルを保持したい理由は、ピクチャ イン ピクチャ モンタージュ用の圧縮されていないソースを用意するためです。--on-the-fly-encoding「 」は一時ファイルの使用を完全に回避することに注意してください-より多くのCPU処理能力を使用することを犠牲にして(私にとっては、これもクラッシュの原因です)。

次に、フレームレートがあります。明らかに、 ' ' オプションを使用して要求されたフレームレートを設定できます。--fps Nただし、実際にそのフレームレートが得られるという保証はありません。たとえば、次のようになります。

... テスト ソフトウェアを実行した状態でのキャプチャ。これは、実際に達成されたレートが 25*2983/6032 = 12.3632 fps に近いことを意味します!

明らかに、フレームがドロップされます。ほとんどの場合、ビデオの再生が速すぎます。ただし、要求された fps を 12 に下げると、保存された/合計レポートによると、11 fps のような値が得られます。この場合、ビデオの再生は「スピードアップ」していないように見えます。そして、私はまだそのようなキャプチャをライブビデオに合わせようとはしていません.そのため、実際に保存されたフレームに正確なタイムスタンプがあるかどうかはわかりません.

VNC キャプチャ

私にとって、VNC キャプチャは、「ターゲット」PC で VNC サーバーを実行vncrecし、「レコーダー」PC で (twibright 版) を実行することで構成されます。VNC サーバーとして、vino「システム/環境設定/リモート デスクトップ (環境設定)」を使用します。そしてどうやら、vino 構成が管理するのが最も簡単なことではないかもしれませんがvino、サーバーは「ターゲット」PC に負担をかけすぎないようです。テストソフトウェアと並行して実行したときにクラッシュしたことはありません。

一方、vncrec「レコーダ」PC でキャプチャしている場合は、「リアルタイム」で表示される「ターゲット」デスクトップを示すウィンドウも表示されます。「ターゲット」に大規模な更新がある場合 (つまり、ウィンドウ全体が移動する場合) - 「レコーダー」の更新/リフレッシュ レートに問題があることがはっきりとわかります。ただし、小さな更新 (つまり、静的な背景でカーソルが移動するだけ) の場合は問題ないようです。

これは、この投稿に関する私の主な質問の 1 つについて疑問に思います-VNC 接続でフレームレートを設定するのは何ですか?

これに対する明確な答えは見つかりませんでしたが、断片的な情報 (以下の参考文献を参照) から、次のようにまとめました。

  • VNC サーバーは、変更 (画面の変更 + クリックなど) を受信すると、可能な限り迅速に送信します。サーバーが利用できる最大ネットワーク帯域幅によって制限される
  • VNC クライアントは、ネットワーク接続によって遅延およびジッタリングされたこれらの変更イベントを受信し、デスクトップの「ビデオ」ストリームを再構築しようとします。

... つまり、安定した周期的なフレーム レート (ビデオのように) に関しては何も言えません。

クライアントに関する限り、vncrec私が取得する最終的なビデオは通常 10 fps と宣言されていますが、フレームがずれたりジッターしたりする可能性があります (その場合、ビデオ エディターでカットする必要があります)。vncrec -twibright/README に次のように記載されていることに注意してください。ただし、マンページには、「VNCREC_MOVIE_FRAMERATE - 出力ムービーのフレーム レートを指定します。-movie モードでのみ効果があります。デフォルトは 10 です。トランスコーダが 10 から嘔吐する場合は 24 を試してください。」と記載されています。ソース" " を調べると、次のことがわかります。vncrec/sockets.c

...これは、いくつかのタイムスタンプが書き込まれていることを示しています-しかし、それらのタイムスタンプが「元の」「ターゲット」PCからのものか、「レコーダー」PCからのものかはわかりません。 EDIT : @kanaka の回答のおかげで、vncrec/sockets.cを再度確認したところ、writeLogHeader関数自体が呼び出していることがわかりgettimeofdayます。したがって、書き込むタイムスタンプはローカルです。つまり、「レコーダー」PC から発信されます (したがって、これらのタイムスタンプは、フレームが「ターゲット」PC で発信された時期を正確に記述しません)。

いずれにせよ、サーバーはいつでもvncrec送信し、クライアントは受信するように思えます。そして、何らかの形式のフレームレートが設定/補間されるのは、後で生のキャプチャからビデオファイルをエンコードするプロセスのみです。

また、「ターゲット」ラップトップでは、有線ネットワーク接続が切断されていることも述べたいと思います。したがって、ルーターとローカルネットワークにアクセスするには、ワイヤレスが唯一のオプションです。ルーターが有線接続から処理できる100MB / sよりもはるかに低速です。ただし、キャプチャされたフレームのジッターが、「ターゲット」PC の負荷による誤ったタイムスタンプが原因である場合は、良好なネットワーク帯域幅があまり役立つとは思いません。

最後に、VNCに関する限り、VNCastサーバーなど、他の代替手段を試すことができます(有望ですが、ソースからビルドするには時間がかかり、「初期の実験バージョン」にあります)。またはMultiVNCただし、記録のオプションがなく、クライアント/ビューアーのように見えます)。

x11grabを使用したffmpeg

これほど遊んだことはありませんが、関連して試してみましたnetcat。これ:

... ファイルをキャプチャしますが、キャプチャしたffplayファイルを正しく読み取ることができません。その間:

.png 画像を生成しますが、圧縮アーティファクトがあります (.png に関連する圧縮の結果だyuv4mpegpipeと思います)。

したがって、私は現在ffmpeg+x11grabがあまり好きではありませんが、自分のニーズに合わせて設定する方法がわからないだけかもしれません。

*( グラフィックカード -> DMA -> ネットワーク )

確かに、私はこのようなものが存在するかどうか確信が持てません - 実際、私はそうではないことに賭けます :) そして、私はここの専門家ではありませんが、私は推測します:

グラフィックス カード (または現在のデスクトップ ビットマップを保持するそのバッファー) をソースとして、ネットワーク アダプターを宛先として DMA メモリ転送を開始できる場合、原則として、圧縮されていないデスクトップ キャプチャを正しい (そしてまともな)フレームレート。もちろん、DMA 転送を使用するポイントは、デスクトップ イメージをネットワーク インターフェイスにコピーするタスクからプロセッサを解放することです (したがって、キャプチャ ソフトウェアが「ターゲット」PC で実行されているプロセスに与える影響を減らすことができます)。 - 特に RAM やハードディスクを扱う場合)。

もちろん、このような提案は次のことを前提としています: 大量のネットワーク帯域幅があること (800x600、30 fps の場合、少なくとも 800*600*3*30 = 43200000 bps = 42 MiB/秒、ローカルの 100 MB では問題ないはずです) /s ネットワーク); 「記録」を行う他の PC 上の大量のハードディスク - 最後に、後でその生データを読み取り、それに基づいて画像シーケンスまたはビデオを生成できるソフトウェア:)

安定したフレームレートと非圧縮データの両方が保証されている限り、帯域幅とハードディスクの要求は許容できます。そのため、このようなものが既に存在するかどうかを知りたいです。

-- -- -- -- -- 

まあ、それはそれだったと思います-私が言うことができるのと同じくらい簡単です:) デスクトップキャプチャで生じる可能性のあるツールまたはプロセスに関する提案

  • 非圧縮形式 (最終的に非圧縮/可逆 PNG 画像シーケンスに変換可能)、および
  • 「正しくタイムコードされた」安定したフレームレート

...、それは最終的に「ピクチャ イン ピクチャ」オーバーレイ ビデオを生成するための「簡単な」単一コマンド ライン処理に役立ちます。

コメントをお寄せいただきありがとうございます


参考文献

  1. Linux で CryptoTE のスクリーンキャストを作成した経験 - idlebox.net
  2. VideoLAN フォーラム • トピックを表示 - VNC クライアント入力サポート (screen:// など)
  3. VNCServer が遅いクライアントのユーザー入力を調整する - Kyprianou、Mark - com.realvnc.vnc-list - MarkMail
  4. Linux FAQ - X Windows: VNC を使用してリモート デスクトップを表示および制御するにはどうすればよいですか
  5. VNC はどのくらいの帯域幅を必要としますか? RealVNC - よくある質問
  6. x11vnc: 実際の X ディスプレイ用の VNC サーバー
  7. HowtoRecordVNC (X11 セッション) - Debian Wiki
  8. Ubuntu の gtk-RecordMyDesktop の代替
  9. (ffmpeg ユーザー) ffmpeg でパイプを使用するにはどうすればよいですか
  10. (ffmpeg-devel) (PATCH) XFixes 拡張機能をサポートしていない X サーバーでカーソルを描画するときの x11grab の segfault を修正します
0 投票する
1 に答える
625 参照

frame-rate - 一人称シューティングゲームでFSMの代わりに隠れマルコフモデル

私は、FSMを使用して、ゲームのトップ2Dビューを表示し、ボット、プレーヤー、サークルを使用してFPSを実装するコースプロジェクトに取り組んでいます。ボットの動作は決定論的でした。たとえば、ボットのヘルスがしきい値を下回り、プレーヤーが表示されている場合、ボットは逃げます。それ以外の場合、ボットはヘルスパックを探します。

ただし、この場合、ボットが行う決定のほとんどは、すでに私たちが決定したルールに基づいているため、ボットはあまりインテリジェンスを示していないと感じました。

ボットに実際のインテリジェンスを実装するのに役立つ、他にどのような手法を使用できますか?私はHMMを見てきましたが、HMMはボットの不確実性を高めるのに役立つ可能性があり、ボットは事前に定義されたルールに依存するよりも自律的に意思決定を行うようになる可能性があります。

皆さんはどう思いますか?何かアドバイスをいただければ幸いです。

0 投票する
1 に答える
352 参照

c++ - 表示リストと OpenGL の状態

変ですね。

メッシュをレンダリングすると、fps は 130 程度で安定します。

表示リストに入れると、fps が 15 強に低下します。

いくつかのマテリアルとテクスチャ コマンドを実行すると、130 に戻ります。

どうしてこれなの?OpenGL の状態変更コマンドが FPS を圧迫するのはなぜですか? 私はどこかで読んだことはないと思います。

0 投票する
1 に答える
385 参照

actionscript-3 - AS3 FPS とパフォーマンスの関係は?

したがって、FPS をデフォルト (30) から約 20 に下げるとパフォーマンスが向上するかどうか疑問に思っています。30fps プログラムを実行しているコンピューターは 20fps で実行しているコンピューターよりも頻繁に更新する必要があるため、この 2 つの間にリンクはありますか? それとも、デフォルトの fps を維持することが重要ですか?

0 投票する
2 に答える
3010 参照

c++ - FPSを設定するときにSDLでタイマーを開始するのはなぜですか?

これは、lazyfoo の SDL チュートリアル セットのこのチュートリアル ページに関するものです。そこで彼はまずタイマーを開始し、各フレームが更新されるまでの時間を計算します。彼は以下を使用してこれを行います

fps.get_ticks() は常に 0 (??) を返すことがわかったので、上記は不要 (?) ではありませんが、タイマーを完全に省略して 1000/FPS だけ遅らせることはできません。

以下の両方の方法を試しましたが、どちらも同じ結果になります。ここで何が欠けていますか、なぜタイマーが必要なのですか?.