// // Created by Sam Gondelman on 5/16/19 // Copyright 2013-2019 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "RenderScriptingInterface.h" #include "LightingModel.h" #include "AntialiasingEffect.h" std::once_flag RenderScriptingInterface::registry_flag; RenderScriptingInterface* RenderScriptingInterface::getInstance() { static RenderScriptingInterface sharedInstance; return &sharedInstance; } RenderScriptingInterface::RenderScriptingInterface() { std::call_once(registry_flag, [] { qmlRegisterType("RenderEnums", 1, 0, "RenderEnums"); }); setRenderMethod((RenderMethod)_renderMethodSettingLock.resultWithReadLock([&] { return _renderMethodSetting.get(); })); setShadowsEnabled(_shadowsEnabledSetting.get()); setAmbientOcclusionEnabled(_ambientOcclusionEnabledSetting.get()); setAntialiasingEnabled(_antialiasingEnabledSetting.get()); } RenderScriptingInterface::RenderMethod RenderScriptingInterface::getRenderMethod() { return (RenderMethod) _renderMethod; } void RenderScriptingInterface::setRenderMethod(RenderMethod renderMethod) { if (_renderMethod != (int) renderMethod) { _renderMethodSettingLock.withWriteLock([&] { _renderMethod = (int)renderMethod; _renderMethodSetting.set((int)renderMethod); auto config = dynamic_cast(qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.DeferredForwardSwitch")); if (config) { _renderMethodSetting.set((int)renderMethod); config->setBranch((int)renderMethod); } }); emit settingsChanged(); } } QStringList RenderScriptingInterface::getRenderMethodNames() const { static const QStringList refrenderMethodNames = { "DEFERRED", "FORWARD" }; return refrenderMethodNames; } bool RenderScriptingInterface::getShadowsEnabled() { return _shadowsEnabledSetting.get(); } void RenderScriptingInterface::setShadowsEnabled(bool enabled) { if (_shadowsEnabledSetting.get() == enabled) { return; } if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setShadowsEnabled", Q_ARG(bool, enabled)); return; } auto lightingModelConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.LightingModel"); if (lightingModelConfig) { Menu::getInstance()->setIsOptionChecked(MenuOption::Shadows, enabled); _shadowsEnabledSetting.set(enabled); lightingModelConfig->setShadow(enabled); emit settingsChanged(); } } bool RenderScriptingInterface::getAmbientOcclusionEnabled() { return _ambientOcclusionEnabledSetting.get(); } void RenderScriptingInterface::setAmbientOcclusionEnabled(bool enabled) { if (_ambientOcclusionEnabledSetting.get() == enabled) { return; } if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setAmbientOcclusionEnabled", Q_ARG(bool, enabled)); return; } auto lightingModelConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.LightingModel"); if (lightingModelConfig) { Menu::getInstance()->setIsOptionChecked(MenuOption::AmbientOcclusion, enabled); _ambientOcclusionEnabledSetting.set(enabled); lightingModelConfig->setAmbientOcclusion(enabled); emit settingsChanged(); } } bool RenderScriptingInterface::getAntialiasingEnabled() { return _antialiasingEnabledSetting.get(); } void RenderScriptingInterface::setAntialiasingEnabled(bool enabled) { if (_antialiasingEnabledSetting.get() == enabled) { return; } if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setAntialiasingEnabled", Q_ARG(bool, enabled)); return; } auto mainViewJitterCamConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.JitterCam"); auto mainViewAntialiasingConfig = qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.Antialiasing"); if (mainViewJitterCamConfig && mainViewAntialiasingConfig) { Menu::getInstance()->setIsOptionChecked(MenuOption::AntiAliasing, enabled); _antialiasingEnabledSetting.set(enabled); if (enabled) { mainViewJitterCamConfig->play(); mainViewAntialiasingConfig->setDebugFXAA(false); } else { mainViewJitterCamConfig->none(); mainViewAntialiasingConfig->setDebugFXAA(true); } emit settingsChanged(); } }