fix
This commit is contained in:
56
core.cm
56
core.cm
@@ -13,6 +13,7 @@
|
||||
var video = use('sdl3/video')
|
||||
var events = use('sdl3/input')
|
||||
var time_mod = use('time')
|
||||
var debug_imgui = use('debug_imgui')
|
||||
|
||||
var core = {}
|
||||
|
||||
@@ -48,7 +49,7 @@ core.start = function(config) {
|
||||
|
||||
_window = _backend.get_window()
|
||||
|
||||
if (config.imgui && imgui.init) {
|
||||
if ((config.imgui || config.editor) && imgui.init) {
|
||||
imgui.init(_window, _backend.get_device())
|
||||
}
|
||||
|
||||
@@ -75,12 +76,19 @@ core.window_size = function() {
|
||||
core.backend = function() {
|
||||
return _backend
|
||||
}
|
||||
// FPS tracking
|
||||
var _fps_samples = []
|
||||
var _fps_sample_count = 60
|
||||
var _current_fps = 0
|
||||
var _frame_time_ms = 0
|
||||
|
||||
// Main loop
|
||||
function _main_loop() {
|
||||
var frame_start = time_mod.number()
|
||||
|
||||
if (!_running) return
|
||||
|
||||
var now = time_mod.number()
|
||||
var now = frame_start
|
||||
var dt = now - _last_time
|
||||
_last_time = now
|
||||
|
||||
@@ -90,7 +98,7 @@ function _main_loop() {
|
||||
var win_size = _backend.get_window_size()
|
||||
|
||||
for (var ev of evts) {
|
||||
if (_config.imgui) {
|
||||
if (_config.imgui || _config.editor) {
|
||||
imgui.process_event(ev)
|
||||
}
|
||||
|
||||
@@ -117,9 +125,12 @@ function _main_loop() {
|
||||
_config.update(dt)
|
||||
}
|
||||
|
||||
var imgui_mod = use('imgui')
|
||||
var debug_imgui = use('debug_imgui')
|
||||
|
||||
// ImGui Frame
|
||||
if (_config.imgui) {
|
||||
imgui.newframe()
|
||||
if (_config.imgui || _config.editor) {
|
||||
imgui_mod.newframe()
|
||||
}
|
||||
|
||||
// Render
|
||||
@@ -133,12 +144,24 @@ function _main_loop() {
|
||||
}
|
||||
var dbg = _config.debug == 'cmd'
|
||||
|
||||
// Build stats for debug_imgui
|
||||
var stats = {
|
||||
fps: _current_fps,
|
||||
frame_time_ms: _frame_time_ms
|
||||
}
|
||||
|
||||
// Handle both compositor result ({commands: [...]}) and fx_graph (graph object)
|
||||
if (render_result.commands) {
|
||||
if (_config.imgui) {
|
||||
if (_config.imgui || _config.editor) {
|
||||
render_result.commands.push({
|
||||
cmd: 'imgui',
|
||||
draw: _config.imgui,
|
||||
draw: function(ui) {
|
||||
if (_config.imgui) _config.imgui(ui)
|
||||
if (_config.editor) {
|
||||
debug_imgui.render(ui, null, render_result.plan, stats)
|
||||
_config.editor(ui)
|
||||
}
|
||||
},
|
||||
target: 'screen'
|
||||
})
|
||||
}
|
||||
@@ -156,9 +179,26 @@ 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 (_fps_samples.length > _fps_sample_count) {
|
||||
_fps_samples.shift()
|
||||
}
|
||||
var avg_frame_time = 0
|
||||
for (var i = 0; i < _fps_samples.length; i++) {
|
||||
avg_frame_time += _fps_samples[i]
|
||||
}
|
||||
avg_frame_time = avg_frame_time / _fps_samples.length
|
||||
_current_fps = avg_frame_time > 0 ? 1 / avg_frame_time : 0
|
||||
|
||||
// Schedule next frame
|
||||
var frame_time = 1 / _framerate
|
||||
var elapsed = time_mod.number() - now
|
||||
var elapsed = frame_end - frame_start
|
||||
var delay = frame_time - elapsed
|
||||
if (delay < 0) delay = 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user