import performance_analysis
import gamnit
-import gamnit::cameras_cache
intrude import gamnit::cameras
+intrude import gamnit::cameras_cache
import gamnit::dynamic_resolution
import gamnit::limit_fps
import gamnit::camera_control
do
texture.load
- var splash = new Sprite(texture, ui_camera.center)
+ var splash = new Sprite(texture, ui_camera.center.offset(0.0, 0.0, 0.0))
ui_sprites.add splash
var display = display
if display != null then display.close
end
- redef fun frame_core(display)
+ redef fun on_resize(display)
do
- # Prepare to draw, clear buffers
- glClear(gl_COLOR_BUFFER_BIT | gl_DEPTH_BUFFER_BIT)
+ super
+
+ world_camera.mvp_matrix_cache = null
+ ui_camera.mvp_matrix_cache = null
+ # Update all sprites in the UI
+ for sprite in ui_sprites do sprite.needs_update
+ end
+
+ redef fun frame_core(display)
+ do
# Check errors
var gl_error = glGetError
assert gl_error == gl_NO_ERROR else print_error gl_error
perf_clock_main.lapse
var dt = clock.lapse.to_f
update dt
+ frame_dt = dt
sys.perfs["gamnit flat update client"].add perf_clock_main.lapse
# Draw and flip screen
assert gl_error == gl_NO_ERROR else print_error gl_error
end
+ private var frame_dt = 0.0
+
# Draw the whole screen, all `glDraw...` calls should be executed here
protected fun frame_core_draw(display: GamnitDisplay)
do
simple_2d_program.use
simple_2d_program.mvp.uniform camera.mvp_matrix
+ sprite_set.time += frame_dt*sprite_set.time_mod
+ simple_2d_program.time.uniform sprite_set.time
+
# draw
sprite_set.draw
end
// Model view projection matrix
uniform mat4 mvp;
+ // Current world time, in seconds
+ uniform float time;
+
// Rotation matrix
attribute vec4 rotation_row0;
attribute vec4 rotation_row1;
# Sprites needing resorting in `contexts_map`
var sprites_to_remap = new Array[Sprite]
+ # Animation speed multiplier (0.0 to pause, 1.0 for normal speed, etc.)
+ var time_mod = 1.0 is writable
+
+ # Seconds elapsed since the launch of the program, in world time responding to `time_mod`
+ var time = 0.0
+
# Add a sprite to the appropriate context
fun map_sprite(sprite: Sprite)
do