armory/Sources/armory/renderpath/DynamicResolutionScale.hx
2019-12-19 23:54:08 +01:00

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;
}
}
}