From 1b1365fd403bb661e39606df0d2d5930611b7127 Mon Sep 17 00:00:00 2001 From: samcake Date: Wed, 16 Dec 2015 16:32:53 -0800 Subject: [PATCH] Exposing the tone curve in the js api --- interface/src/Application.cpp | 1 + .../render-utils/src/RenderDeferredTask.cpp | 18 ++++++++++++- .../render-utils/src/RenderDeferredTask.h | 3 +++ libraries/render/src/render/Engine.h | 1 + .../src/SceneScriptingInterface.cpp | 27 +++++++++++++++++++ .../src/SceneScriptingInterface.h | 7 ++++- 6 files changed, 55 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9a8373282b..aa0c0fa8c6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3703,6 +3703,7 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se renderContext._fxaaStatus = Menu::getInstance()->isOptionChecked(MenuOption::Antialiasing); renderContext._toneMappingExposure = sceneInterface->getEngineToneMappingExposure(); + renderContext._toneMappingToneCurve = sceneInterface->getEngineToneMappingToneCurveValue(); renderArgs->_shouldRender = LODManager::shouldRender; diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index ef95876f11..5423d928a7 100755 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -166,6 +166,7 @@ void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const Rend setAntialiasingStatus(renderContext->_fxaaStatus); setToneMappingExposure(renderContext->_toneMappingExposure); + setToneMappingToneCurve(renderContext->_toneMappingToneCurve); renderContext->args->_context->syncCache(); @@ -403,8 +404,23 @@ void RenderDeferredTask::setToneMappingExposure(float exposure) { float RenderDeferredTask::getToneMappingExposure() const { if (_toneMappingJobIndex >= 0) { - _jobs[_toneMappingJobIndex].get()._toneMappingEffect.getExposure(); + return _jobs[_toneMappingJobIndex].get()._toneMappingEffect.getExposure(); } else { return 0.0f; } } + +void RenderDeferredTask::setToneMappingToneCurve(int toneCurve) { + if (_toneMappingJobIndex >= 0) { + _jobs[_toneMappingJobIndex].edit()._toneMappingEffect.setToneCurve((ToneMappingEffect::ToneCurve)toneCurve); + } +} + +int RenderDeferredTask::getToneMappingToneCurve() const { + if (_toneMappingJobIndex >= 0) { + return _jobs[_toneMappingJobIndex].get()._toneMappingEffect.getToneCurve(); + } else { + return 0.0f; + } +} + diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index ea99c9f12e..b84db31a26 100755 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -134,6 +134,9 @@ public: void setToneMappingExposure(float exposure); float getToneMappingExposure() const; + void setToneMappingToneCurve(int toneCurve); + int getToneMappingToneCurve() const; + virtual void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); diff --git a/libraries/render/src/render/Engine.h b/libraries/render/src/render/Engine.h index c219b87f40..abfef03039 100644 --- a/libraries/render/src/render/Engine.h +++ b/libraries/render/src/render/Engine.h @@ -62,6 +62,7 @@ public: bool _fxaaStatus = false; float _toneMappingExposure = 0.0; + int _toneMappingToneCurve = 3; RenderContext() {} }; diff --git a/libraries/script-engine/src/SceneScriptingInterface.cpp b/libraries/script-engine/src/SceneScriptingInterface.cpp index 59d2765659..3e22a9e929 100644 --- a/libraries/script-engine/src/SceneScriptingInterface.cpp +++ b/libraries/script-engine/src/SceneScriptingInterface.cpp @@ -167,3 +167,30 @@ void SceneScriptingInterface::clearEngineCounters() { _numFeedOverlay3DItems = 0; _numDrawnOverlay3DItems = 0; } + + +void SceneScriptingInterface::setEngineToneMappingToneCurve(const QString& toneCurve) { + if (toneCurve == QString("None")) { + _engineToneMappingToneCurve = 0; + } else if (toneCurve == QString("Gamma22")) { + _engineToneMappingToneCurve = 1; + } else if (toneCurve == QString("Reinhard")) { + _engineToneMappingToneCurve = 2; + } else if (toneCurve == QString("Filmic")) { + _engineToneMappingToneCurve = 3; + } +} +QString SceneScriptingInterface::getEngineToneMappingToneCurve() const { + switch (_engineToneMappingToneCurve) { + case 0: + return QString("None"); + case 1: + return QString("Gamma22"); + case 2: + return QString("Reinhard"); + case 3: + return QString("Filmic"); + default: + return QString("Filmic"); + }; +} \ No newline at end of file diff --git a/libraries/script-engine/src/SceneScriptingInterface.h b/libraries/script-engine/src/SceneScriptingInterface.h index 875a2a1b8f..246f624b08 100644 --- a/libraries/script-engine/src/SceneScriptingInterface.h +++ b/libraries/script-engine/src/SceneScriptingInterface.h @@ -119,7 +119,11 @@ public: Q_INVOKABLE bool doEngineDisplayHitEffect() { return _drawHitEffect; } Q_INVOKABLE void setEngineToneMappingExposure(float exposure) { _engineToneMappingExposure = exposure; } - Q_INVOKABLE float getEngineToneMappingExposure() { return _engineToneMappingExposure; } + Q_INVOKABLE float getEngineToneMappingExposure() const { return _engineToneMappingExposure; } + + Q_INVOKABLE void setEngineToneMappingToneCurve(const QString& curve); + Q_INVOKABLE QString getEngineToneMappingToneCurve() const; + int getEngineToneMappingToneCurveValue() const { return _engineToneMappingToneCurve; } signals: void shouldRenderAvatarsChanged(bool shouldRenderAvatars); @@ -158,6 +162,7 @@ protected: bool _drawHitEffect = false; float _engineToneMappingExposure = 0.0f; + int _engineToneMappingToneCurve = 3; }; #endif // hifi_SceneScriptingInterface_h