opengl を使用して作成しているゲームに少し問題があります。ゲームが半分の速度で実行されることもあれば、通常どおり実行されることもあります。
私のコンピューターでは文字通り14,000 fpsで実行されるため、問題の原因はopenglではないと思います。(半分の速度で走っている場合でも)
これにより、問題の原因となっているのは「ゲームタイマー」であると私は信じるようになりました。ゲーム タイマーは別のスレッドで実行され、Sleep(5) 呼び出しで「ループ」の最後で一時停止するようにプログラムされています。Sleep(5) 呼び出しを削除すると、非常に高速に実行され、画面上のスプライトがほとんど見えなくなります。(予測可能な動作)
Render() スレッドの最後に (独自のスレッドでも) Sleep(16) をスローしてみました。このアクションにより、fps が約 62 に制限されます。アプリは、意図した速度で実行されることもあれば、半分の速度で実行されることもあることに注意してください (所有している両方のコンピューターで試しましたが、持続します)。
意図した速度で実行すると、fps は 62 (良い) になり、31 程度 (悪い) になることもあります。実行中にハーフスピードとフルスピードが切り替わることはなく、再起動後も問題は解決しません。
したがって、速度低下の原因はレンダリングではなく、Sleep() 関数です。
私が言っているのは、Sleep() 関数が実際にスリープする時間と矛盾しているということだと思います。これは証明されたものですか?私が使用できるより良い Sleep() 関数はありますか?