adaptiverenderer.cpp

main 91 lines · 2.3 KB Raw
Alex Alex Commit Client Upload Part 2 19/10/2026 00:06
1#include <framework/core/logger.h>
2#include <framework/core/graphicalapplication.h>
3#include <framework/stdext/format.h>
4#include <framework/util/extras.h>
5
6#include "adaptiverenderer.h"
7
8AdaptiveRenderer g_adaptiveRenderer;
9
10void AdaptiveRenderer::newFrame() {
11 auto now = stdext::millis();
12 m_frames.push_back(now);
13 while (m_frames.front() + 5000 < now) {
14 m_frames.pop_front();
15 }
16
17 if (m_forcedSpeed >= 0 && m_forcedSpeed <= 4) {
18 m_speed = m_forcedSpeed;
19 return;
20 }
21
22 if (m_update + 5000 > now)
23 return;
24
25 m_update = stdext::millis();
26
27 if (m_speed < 1)
28 m_speed = 1;
29
30 int maxFps = std::min<int>(100, std::max<int>(10, g_app.getMaxFps() < 10 ? 100 : g_app.getMaxFps()));
31 if (m_speed >= 2 && maxFps > 60) { // fix for forced vsync
32 maxFps = 60;
33 }
34
35 if (m_frames.size() < maxFps * (4.0f - m_speed * 0.3f) && m_speed != RenderSpeeds - 1) {
36 m_speed += 1;
37 }
38 if (m_frames.size() > maxFps * (4.5f - m_speed * 0.1f) && m_speed > 1) {
39 m_speed -= 1;
40 }
41}
42
43void AdaptiveRenderer::refresh() {
44 m_update = stdext::millis();
45}
46
47int AdaptiveRenderer::effetsLimit() {
48 static int limits[RenderSpeeds] = { 20, 10, 7, 4, 2 };
49 return limits[m_speed];
50}
51
52int AdaptiveRenderer::creaturesLimit() {
53 static int limits[RenderSpeeds] = { 20, 10, 7, 5, 3 };
54 return limits[m_speed];
55}
56
57int AdaptiveRenderer::itemsLimit() {
58 static int limits[RenderSpeeds] = { 20, 10, 7, 5, 3 };
59 return limits[m_speed];
60}
61
62int AdaptiveRenderer::mapRenderInterval() {
63 static int limits[RenderSpeeds] = { 0, 10, 20, 50, 100 };
64 return limits[m_speed];
65}
66
67int AdaptiveRenderer::textsLimit() {
68 static int limits[RenderSpeeds] = { 1000, 50, 30, 15, 5 };
69 return limits[m_speed];
70}
71
72int AdaptiveRenderer::creaturesRenderInterval() {
73 // not working yet
74 static int limits[RenderSpeeds] = { 0, 0, 10, 15, 20 };
75 return limits[m_speed];
76}
77
78bool AdaptiveRenderer::allowFading() {
79 return m_speed <= 2;
80}
81
82int AdaptiveRenderer::foregroundUpdateInterval() {
83 static int limits[RenderSpeeds] = { 0, 20, 40, 50, 60 };
84 return limits[m_speed];
85}
86
87std::string AdaptiveRenderer::getDebugInfo() {
88 std::stringstream ss;
89 ss << "Frames: " << m_frames.size() << "|" << m_speed << "|" << m_forcedSpeed;
90 return ss.str();
91}
Top