mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 22:10:25 +02:00
also consider GPU render time for LOD adjust
This commit is contained in:
parent
9c4a0c8c70
commit
4fb9680f3b
3 changed files with 6 additions and 5 deletions
|
@ -4325,7 +4325,9 @@ void Application::updateLOD(float deltaTime) const {
|
||||||
if (!isThrottleRendering()) {
|
if (!isThrottleRendering()) {
|
||||||
float presentTime = getActiveDisplayPlugin()->getAveragePresentTime();
|
float presentTime = getActiveDisplayPlugin()->getAveragePresentTime();
|
||||||
float engineRunTime = (float)(_renderEngine->getConfiguration().get()->getCPURunTime());
|
float engineRunTime = (float)(_renderEngine->getConfiguration().get()->getCPURunTime());
|
||||||
DependencyManager::get<LODManager>()->autoAdjustLOD(presentTime, engineRunTime, deltaTime);
|
float gpuTime = getGPUContext()->getFrameTimerGPUAverage();
|
||||||
|
float maxRenderTime = glm::max(gpuTime, glm::max(presentTime, engineRunTime));
|
||||||
|
DependencyManager::get<LODManager>()->autoAdjustLOD(maxRenderTime, deltaTime);
|
||||||
} else {
|
} else {
|
||||||
DependencyManager::get<LODManager>()->resetLODAdjust();
|
DependencyManager::get<LODManager>()->resetLODAdjust();
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,12 +44,11 @@ float LODManager::getLODIncreaseFPS() {
|
||||||
return getDesktopLODIncreaseFPS();
|
return getDesktopLODIncreaseFPS();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LODManager::autoAdjustLOD(float presentTime, float engineRunTime, float deltaTimeSec) {
|
void LODManager::autoAdjustLOD(float renderTime, float deltaTimeSec) {
|
||||||
// compute time-weighted running average renderTime
|
// compute time-weighted running average renderTime
|
||||||
float maxTime = glm::max(presentTime, engineRunTime);
|
|
||||||
const float LOD_ADJUST_TIMESCALE = 0.1f; // sec
|
const float LOD_ADJUST_TIMESCALE = 0.1f; // sec
|
||||||
float blend = (deltaTimeSec < LOD_ADJUST_TIMESCALE) ? deltaTimeSec / LOD_ADJUST_TIMESCALE : 1.0f;
|
float blend = (deltaTimeSec < LOD_ADJUST_TIMESCALE) ? deltaTimeSec / LOD_ADJUST_TIMESCALE : 1.0f;
|
||||||
_avgRenderTime = (1.0f - blend) * _avgRenderTime + blend * maxTime; // msec
|
_avgRenderTime = (1.0f - blend) * _avgRenderTime + blend * renderTime; // msec
|
||||||
if (!_automaticLODAdjust) {
|
if (!_automaticLODAdjust) {
|
||||||
// early exit
|
// early exit
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -62,7 +62,7 @@ public:
|
||||||
Q_INVOKABLE float getLODIncreaseFPS();
|
Q_INVOKABLE float getLODIncreaseFPS();
|
||||||
|
|
||||||
static bool shouldRender(const RenderArgs* args, const AABox& bounds);
|
static bool shouldRender(const RenderArgs* args, const AABox& bounds);
|
||||||
void autoAdjustLOD(float presentTime, float engineRunTime, float deltaTimeSec);
|
void autoAdjustLOD(float renderTime, float deltaTimeSec);
|
||||||
|
|
||||||
void loadSettings();
|
void loadSettings();
|
||||||
void saveSettings();
|
void saveSettings();
|
||||||
|
|
Loading…
Reference in a new issue