52 lines
1.4 KiB
Haxe
52 lines
1.4 KiB
Haxe
package armory.renderpath;
|
|
|
|
import iron.RenderPath;
|
|
|
|
class DynamicResolutionScale {
|
|
|
|
public static var dynamicScale = 1.0;
|
|
|
|
static var firstFrame = true;
|
|
static inline var startScaleMs = 30;
|
|
static inline var scaleRangeMs = 10;
|
|
static inline var maxScale = 0.6;
|
|
|
|
public static function run(path: RenderPath) {
|
|
if (firstFrame) {
|
|
iron.App.notifyOnRender(render);
|
|
firstFrame = false;
|
|
return;
|
|
}
|
|
|
|
// TODO: execute once per frame max
|
|
if (frameTimeAvg > startScaleMs && frameTimeAvg < 100) {
|
|
var overTime = Math.min(scaleRangeMs, frameTimeAvg - startScaleMs);
|
|
var scale = 1.0 - (overTime / scaleRangeMs) * (1.0 - maxScale);
|
|
var w = Std.int(iron.App.w() * scale);
|
|
var h = Std.int(iron.App.h() * scale);
|
|
path.setCurrentViewport(w, h);
|
|
path.setCurrentScissor(w, h);
|
|
dynamicScale = scale;
|
|
}
|
|
else dynamicScale = 1.0;
|
|
}
|
|
|
|
static var frameTime: Float;
|
|
static var lastTime: Float = 0;
|
|
static var totalTime: Float = 0;
|
|
static var frames = 0;
|
|
static var frameTimeAvg = 0.0;
|
|
|
|
public static function render(g: kha.graphics4.Graphics) {
|
|
frameTime = kha.Scheduler.realTime() - lastTime;
|
|
lastTime = kha.Scheduler.realTime();
|
|
totalTime += frameTime;
|
|
frames++;
|
|
if (totalTime >= 1) {
|
|
frameTimeAvg = Std.int(totalTime / frames * 10000) / 10;
|
|
totalTime = 0;
|
|
frames = 0;
|
|
}
|
|
}
|
|
}
|