133 lines · 4.7 KB · C++
RawDownload
////  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<RenderScriptingInterface>("RenderEnums", 1, 0, "RenderEnums");    });     setRenderMethod((RenderMethod)_renderMethodSettingLock.resultWithReadLock<int>([&] {        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<task::SwitchConfig*>(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<MakeLightingModel>("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<MakeLightingModel>("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<JitterSample>("RenderMainView.JitterCam");    auto mainViewAntialiasingConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<Antialiasing>("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();    }}