diff --git a/examples/example/ui/LODManagerExample.js b/examples/example/ui/LODManagerExample.js new file mode 100644 index 0000000000..b3d2444412 --- /dev/null +++ b/examples/example/ui/LODManagerExample.js @@ -0,0 +1,16 @@ + +LODManager.LODIncreased.connect(function() { + print("LOD has been increased. You can now see " + + LODManager.getLODFeedbackText() + + ", fps:" + LODManager.getFPSAverage() + + ", fast fps:" + LODManager.getFastFPSAverage() + ); +}); + +LODManager.LODDecreased.connect(function() { + print("LOD has been decreased. You can now see " + + LODManager.getLODFeedbackText() + + ", fps:" + LODManager.getFPSAverage() + + ", fast fps:" + LODManager.getFastFPSAverage() + ); +}); \ No newline at end of file diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 184d1bf940..07bd86f8ef 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3570,6 +3570,8 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri scriptEngine->registerGlobalObject("UndoStack", &_undoStackScriptingInterface); + scriptEngine->registerGlobalObject("LODManager", DependencyManager::get().data()); + QScriptValue hmdInterface = scriptEngine->registerGlobalObject("HMD", &HMDScriptingInterface::getInstance()); scriptEngine->registerFunction(hmdInterface, "getHUDLookAtPosition2D", HMDScriptingInterface::getHUDLookAtPosition2D, 0); scriptEngine->registerFunction(hmdInterface, "getHUDLookAtPosition3D", HMDScriptingInterface::getHUDLookAtPosition3D, 0); diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index c47b6180c7..063ba13492 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -75,7 +75,9 @@ void LODManager::autoAdjustLOD(float currentFPS) { changed = true; _lastAdjust = now; qDebug() << "adjusting LOD down... average fps for last approximately 5 seconds=" << _fpsAverage.getAverage() - << "_octreeSizeScale=" << _octreeSizeScale; + << "_octreeSizeScale=" << _octreeSizeScale; + + emit LODDecreased(); } if (elapsed > ADJUST_LOD_UP_DELAY && _fpsAverage.getAverage() > ADJUST_LOD_UP_FPS @@ -87,7 +89,9 @@ void LODManager::autoAdjustLOD(float currentFPS) { changed = true; _lastAdjust = now; qDebug() << "adjusting LOD up... average fps for last approximately 5 seconds=" << _fpsAverage.getAverage() - << "_octreeSizeScale=" << _octreeSizeScale; + << "_octreeSizeScale=" << _octreeSizeScale; + + emit LODIncreased(); } if (changed) { diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 9d210a8e5b..61c24bf5af 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -41,7 +41,8 @@ const int ONE_SECOND_OF_FRAMES = 60; const int FIVE_SECONDS_OF_FRAMES = 5 * ONE_SECOND_OF_FRAMES; -class LODManager : public Dependency { +class LODManager : public QObject, public Dependency { + Q_OBJECT SINGLETON_DEPENDENCY public: @@ -55,21 +56,27 @@ public: float getAvatarLODDistanceMultiplier() const { return _avatarLODDistanceMultiplier; } // User Tweakable LOD Items - QString getLODFeedbackText(); - void setOctreeSizeScale(float sizeScale); - float getOctreeSizeScale() const { return _octreeSizeScale; } + Q_INVOKABLE QString getLODFeedbackText(); + Q_INVOKABLE void setOctreeSizeScale(float sizeScale); + Q_INVOKABLE float getOctreeSizeScale() const { return _octreeSizeScale; } - void setBoundaryLevelAdjust(int boundaryLevelAdjust); - int getBoundaryLevelAdjust() const { return _boundaryLevelAdjust; } + Q_INVOKABLE void setBoundaryLevelAdjust(int boundaryLevelAdjust); + Q_INVOKABLE int getBoundaryLevelAdjust() const { return _boundaryLevelAdjust; } void autoAdjustLOD(float currentFPS); - void resetLODAdjust(); + Q_INVOKABLE void resetLODAdjust(); + Q_INVOKABLE float getFPSAverage() const { return _fpsAverage.getAverage(); } + Q_INVOKABLE float getFastFPSAverage() const { return _fastFPSAverage.getAverage(); } bool shouldRenderMesh(float largestDimension, float distanceToCamera); void loadSettings(); void saveSettings(); +signals: + void LODIncreased(); + void LODDecreased(); + private: LODManager() {}