also consider GPU render time for LOD adjust

This commit is contained in:
Andrew Meadows 2017-12-19 16:43:49 -08:00
parent 9c4a0c8c70
commit 4fb9680f3b
3 changed files with 6 additions and 5 deletions

View file

@ -4325,7 +4325,9 @@ void Application::updateLOD(float deltaTime) const {
if (!isThrottleRendering()) {
float presentTime = getActiveDisplayPlugin()->getAveragePresentTime();
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 {
DependencyManager::get<LODManager>()->resetLODAdjust();
}

View file

@ -44,12 +44,11 @@ float LODManager::getLODIncreaseFPS() {
return getDesktopLODIncreaseFPS();
}
void LODManager::autoAdjustLOD(float presentTime, float engineRunTime, float deltaTimeSec) {
void LODManager::autoAdjustLOD(float renderTime, float deltaTimeSec) {
// compute time-weighted running average renderTime
float maxTime = glm::max(presentTime, engineRunTime);
const float LOD_ADJUST_TIMESCALE = 0.1f; // sec
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) {
// early exit
return;

View file

@ -62,7 +62,7 @@ public:
Q_INVOKABLE float getLODIncreaseFPS();
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 saveSettings();