This commit is contained in:
2026-01-21 09:05:02 -06:00
parent 18ca9e14ba
commit f7be9c3344
30 changed files with 237 additions and 246 deletions

40
core.cm
View File

@@ -78,7 +78,29 @@ core.backend = function() {
}
// FPS tracking
var _fps_samples = []
var _fps_sample_count = 60
var _fps_sample_count = 120
var _fps_sample_sum = 0
var _fps_sample_pos = 0
function fps_add_sample(sample) {
var n = length(_fps_samples)
if (n < _fps_sample_count) {
push(_fps_samples, sample)
_fps_sample_sum += sample
} else {
var old = _fps_samples[_fps_sample_pos]
_fps_samples[_fps_sample_pos] = sample
_fps_sample_sum += sample - old
_fps_sample_pos++
if (_fps_sample_pos >= _fps_sample_count) _fps_sample_pos = 0
}
}
function fps_get_avg() {
var n = length(_fps_samples)
return n ? _fps_sample_sum / n : 0
}
var _current_fps = 0
var _frame_time_ms = 0
@@ -162,7 +184,7 @@ function _main_loop() {
// Handle both compositor result ({commands: [...]}) and fx_graph (graph object)
if (render_result.commands) {
if (_config.imgui || _config.editor) {
render_result.commands.push({
push(render_result.commands, {
cmd: 'imgui',
draw: function(ui) {
if (_config.imgui) _config.imgui(ui)
@@ -188,19 +210,15 @@ function _main_loop() {
}
}
// Measure actual frame work time (excluding delay)
var frame_end = time_mod.number()
var actual_frame_time = frame_end - frame_start
// Track FPS based on actual work time
_frame_time_ms = actual_frame_time * 1000
_fps_samples.push(actual_frame_time)
if (length(_fps_samples) > _fps_sample_count) {
_fps_samples.shift()
}
var avg_frame_time = reduce(_fps_samples, function(a,b) { return a+b }) / length(_fps_samples)
fps_add_sample(actual_frame_time)
var avg_frame_time = fps_get_avg()
_current_fps = avg_frame_time > 0 ? 1 / avg_frame_time : 0
// Schedule next frame
var frame_time = 1 / _framerate
var elapsed = frame_end - frame_start