The frame pacer repaints the client's 3D windows at the user's frame rate (HKCU\Software\T5DE\Graphics\FrameRate: 30, the default, adds nothing; 60, 120, 240, 360; 0 uncapped), so the client draws frames between its 30-per-second steps. Only when affordable: a window is asked once its last frame is drawn, and only if its frames take under three quarters of the interval; uncapped, the client is left idle a third of a frame between frames. The engine's stats now log frames per second. The extra frames show the same scene for now. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
8055099920
commit
05a7be5d41
7 files changed
+233
-18
No files matched your search
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
// Extra frames between the client's 30-per-second ticks. The client draws a 3D window's frame when the window gets
|
||||
// WM_PAINT, and steps its scene on its own timer (SceneWindow.dll's runApp: a step, then the window is invalidated);
|
||||
// its message loop also wakes for WM_PAINT between steps. So asking the windows to repaint more often makes the client
|
||||
// draw more frames, without stepping the scene. The rate is the user's (T5DE's settings, Graphics: HKCU\Software\T5DE\
|
||||
// Graphics, FrameRate): 30, the client's own and the default, adds nothing; 60, 120, 240 or 360 add frames between
|
||||
// ticks; 0 is uncapped.
|
||||
//
|
||||
// Drawing runs on the client's main thread, with its input and interface: extra frames are only asked for when they're
|
||||
// affordable. A window gets one only once its last frame is drawn, and only if its frames take less than three
|
||||
// quarters of the interval; uncapped, the client is left idle a third of a frame's time between frames.
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
namespace t5de::frame_pacer {
|
||||
|
||||
// A 3D window an engine draws into: repainted at the user's frame rate while added.
|
||||
void add(HWND window);
|
||||
void remove(HWND window);
|
||||
|
||||
// A frame drawn into window, taking the client this long (beginRendering to endRendering).
|
||||
void frameDrawn(HWND window, double seconds);
|
||||
|
||||
} // namespace t5de::frame_pacer
|
||||
Reference in new issue
Block a user