From 0c9e93983c7ea48ac92f839ec81b4340abc0edb9 Mon Sep 17 00:00:00 2001 From: danij Date: Wed, 6 Nov 2013 16:44:26 +0000 Subject: [PATCH] Refactor|Client: RenderSystem has ownership of renderer/renderer-appearance settings --- doomsday/client/include/clientapp.h | 2 - doomsday/client/include/render/rendersystem.h | 4 + doomsday/client/src/clientapp.cpp | 110 ---------------- doomsday/client/src/render/rendersystem.cpp | 118 +++++++++++++++++- .../src/ui/dialogs/renderersettingsdialog.cpp | 4 +- .../ui/editors/rendererappearanceeditor.cpp | 2 +- 6 files changed, 123 insertions(+), 117 deletions(-) diff --git a/doomsday/client/include/clientapp.h b/doomsday/client/include/clientapp.h index 168b2846f9..dceacd5e98 100644 --- a/doomsday/client/include/clientapp.h +++ b/doomsday/client/include/clientapp.h @@ -56,8 +56,6 @@ class ClientApp : public de::GuiApp static bool haveApp(); static ClientApp &app(); static Updater &updater(); - static SettingsRegister &rendererSettings(); ///< @todo Belongs in a subsystem. - static SettingsRegister &rendererAppearanceSettings(); ///< @todo Belongs in a subsystem. static SettingsRegister &audioSettings(); ///< @todo Belongs in AudioSystem. static ServerLink &serverLink(); static InputSystem &inputSystem(); diff --git a/doomsday/client/include/render/rendersystem.h b/doomsday/client/include/render/rendersystem.h index 045d33c2a0..4bbf9041c8 100644 --- a/doomsday/client/include/render/rendersystem.h +++ b/doomsday/client/include/render/rendersystem.h @@ -22,6 +22,7 @@ #include #include #include "DrawLists" +#include "settingsregister.h" /** * Geometry backing store (arrays). @@ -63,6 +64,9 @@ class RenderSystem : public de::System public: RenderSystem(); + SettingsRegister &settings(); + SettingsRegister &appearanceSettings(); + /** * Provides access to the central map geometry buffer. */ diff --git a/doomsday/client/src/clientapp.cpp b/doomsday/client/src/clientapp.cpp index 6f2df0e458..a76af64258 100644 --- a/doomsday/client/src/clientapp.cpp +++ b/doomsday/client/src/clientapp.cpp @@ -122,8 +122,6 @@ Value *Binding_App_LoadFont(Context &, Function::ArgumentValues const &args) DENG2_PIMPL(ClientApp) { QScopedPointer updater; - SettingsRegister rendererSettings; - SettingsRegister rendererAppearanceSettings; SettingsRegister audioSettings; QMenuBar *menuBar; InputSystem *inputSys; @@ -197,104 +195,6 @@ DENG2_PIMPL(ClientApp) /// @todo These belong in their respective subsystems. - rendererSettings - .define(SReg::FloatCVar, "rend-camera-fov", 95.f) - .define(SReg::IntCVar, "rend-model-mirror-hud", 0) - .define(SReg::IntCVar, "rend-model-precache", 1) - .define(SReg::IntCVar, "rend-sprite-precache", 1) - .define(SReg::IntCVar, "rend-light-multitex", 1) - .define(SReg::IntCVar, "rend-model-shiny-multitex", 1) - .define(SReg::IntCVar, "rend-tex-detail-multitex", 1) - .define(SReg::IntCVar, "rend-tex", 1) - .define(SReg::IntCVar, "rend-dev-wireframe", 0) - .define(SReg::IntCVar, "rend-dev-thinker-ids", 0) - .define(SReg::IntCVar, "rend-dev-mobj-bbox", 0) - .define(SReg::IntCVar, "rend-dev-polyobj-bbox", 0) - .define(SReg::IntCVar, "rend-dev-sector-show-indices", 0) - .define(SReg::IntCVar, "rend-dev-vertex-show-indices", 0) - .define(SReg::IntCVar, "rend-dev-generator-show-indices", 0); - - rendererAppearanceSettings.setPersistentName("renderer"); - rendererAppearanceSettings - .define(SReg::IntCVar, "rend-light", 1) - .define(SReg::IntCVar, "rend-light-decor", 1) - .define(SReg::IntCVar, "rend-light-blend", 0) - .define(SReg::IntCVar, "rend-light-num", 0) - .define(SReg::FloatCVar, "rend-light-bright", .5f) - .define(SReg::FloatCVar, "rend-light-fog-bright", .15f) - .define(SReg::FloatCVar, "rend-light-radius-scale", 4.24f) - .define(SReg::IntCVar, "rend-light-radius-max", 256) - .define(SReg::IntCVar, "rend-light-ambient", 0) - .define(SReg::FloatCVar, "rend-light-compression", 0) - .define(SReg::IntCVar, "rend-light-attenuation", 924) - .define(SReg::IntCVar, "rend-light-sky-auto", 1) - .define(SReg::FloatCVar, "rend-light-sky", .273f) - .define(SReg::IntCVar, "rend-light-wall-angle-smooth", 1) - .define(SReg::FloatCVar, "rend-light-wall-angle", 1.2f) - - .define(SReg::IntCVar, "rend-vignette", 1) - .define(SReg::FloatCVar, "rend-vignette-darkness", 1) - .define(SReg::FloatCVar, "rend-vignette-width", 1) - - .define(SReg::IntCVar, "rend-halo-realistic", 1) - .define(SReg::IntCVar, "rend-halo", 5) - .define(SReg::IntCVar, "rend-halo-bright", 45) - .define(SReg::IntCVar, "rend-halo-size", 80) - .define(SReg::IntCVar, "rend-halo-occlusion", 48) - .define(SReg::FloatCVar, "rend-halo-radius-min", 20) - .define(SReg::FloatCVar, "rend-halo-secondary-limit", 1) - .define(SReg::FloatCVar, "rend-halo-dim-near", 10) - .define(SReg::FloatCVar, "rend-halo-dim-far", 100) - .define(SReg::FloatCVar, "rend-halo-zmag-div", 62) - - .define(SReg::FloatCVar, "rend-glow", .8f) - .define(SReg::IntCVar, "rend-glow-height", 100) - .define(SReg::FloatCVar, "rend-glow-scale", 3) - .define(SReg::IntCVar, "rend-glow-wall", 1) - - .define(SReg::IntCVar, "rend-fakeradio", 1) - .define(SReg::FloatCVar, "rend-fakeradio-darkness", 1.2f) - .define(SReg::IntCVar, "rend-shadow", 1) - .define(SReg::FloatCVar, "rend-shadow-darkness", 1.2f) - .define(SReg::IntCVar, "rend-shadow-far", 1000) - .define(SReg::IntCVar, "rend-shadow-radius-max", 80) - - .define(SReg::IntCVar, "rend-tex-shiny", 1) - .define(SReg::IntCVar, "rend-tex-mipmap", 5) - .define(SReg::IntCVar, "rend-tex-quality", TEXQ_BEST) - .define(SReg::IntCVar, "rend-tex-anim-smooth", 1) - .define(SReg::IntCVar, "rend-tex-filter-smart", 0) - .define(SReg::IntCVar, "rend-tex-filter-sprite", 1) - .define(SReg::IntCVar, "rend-tex-filter-mag", 1) - .define(SReg::IntCVar, "rend-tex-filter-ui", 1) - .define(SReg::IntCVar, "rend-tex-filter-anisotropic", -1) - .define(SReg::IntCVar, "rend-tex-detail", 1) - .define(SReg::FloatCVar, "rend-tex-detail-scale", 4) - .define(SReg::FloatCVar, "rend-tex-detail-strength", .5f) - - .define(SReg::IntCVar, "rend-mobj-smooth-move", 2) - .define(SReg::IntCVar, "rend-mobj-smooth-turn", 1) - - .define(SReg::IntCVar, "rend-model", 1) - .define(SReg::IntCVar, "rend-model-inter", 1) - .define(SReg::IntCVar, "rend-model-distance", 1500) - .define(SReg::FloatCVar, "rend-model-lod", 256) - .define(SReg::FloatCVar, "rend-model-lights", 4) - - .define(SReg::IntCVar, "rend-sprite-mode", 0) - .define(SReg::IntCVar, "rend-sprite-blend", 1) - .define(SReg::IntCVar, "rend-sprite-lights", 4) - .define(SReg::IntCVar, "rend-sprite-align", 0) - .define(SReg::IntCVar, "rend-sprite-noz", 0) - - .define(SReg::IntCVar, "rend-particle", 1) - .define(SReg::IntCVar, "rend-particle-max", 0) - .define(SReg::FloatCVar, "rend-particle-rate", 1) - .define(SReg::FloatCVar, "rend-particle-diffuse", 4) - .define(SReg::IntCVar, "rend-particle-visible-near", 0) - - .define(SReg::FloatCVar, "rend-sky-distance", 1600); - audioSettings .define(SReg::IntCVar, "sound-volume", 255) .define(SReg::IntCVar, "music-volume", 255) @@ -446,16 +346,6 @@ Updater &ClientApp::updater() return *app().d->updater; } -SettingsRegister &ClientApp::rendererSettings() -{ - return app().d->rendererSettings; -} - -SettingsRegister &ClientApp::rendererAppearanceSettings() -{ - return app().d->rendererAppearanceSettings; -} - SettingsRegister &ClientApp::audioSettings() { return app().d->audioSettings; diff --git a/doomsday/client/src/render/rendersystem.cpp b/doomsday/client/src/render/rendersystem.cpp index be9136aaf5..9e7de4d165 100644 --- a/doomsday/client/src/render/rendersystem.cpp +++ b/doomsday/client/src/render/rendersystem.cpp @@ -20,6 +20,7 @@ #include "clientapp.h" #include "render/rendersystem.h" +#include "gl/gl_texmanager.h" #include using namespace de; @@ -82,10 +83,113 @@ uint Store::allocateVertices(uint count) DENG2_PIMPL(RenderSystem) { - Store buffer; ///< Primary map geometry buffer. + SettingsRegister settings; + SettingsRegister appearanceSettings; + Store buffer; DrawLists drawLists; - Instance(Public *i) : Base(i) {} + Instance(Public *i) : Base(i) + { + typedef SettingsRegister SReg; + + // Initialize settings. + settings.define(SReg::FloatCVar, "rend-camera-fov", 95.f) + .define(SReg::IntCVar, "rend-model-mirror-hud", 0) + .define(SReg::IntCVar, "rend-model-precache", 1) + .define(SReg::IntCVar, "rend-sprite-precache", 1) + .define(SReg::IntCVar, "rend-light-multitex", 1) + .define(SReg::IntCVar, "rend-model-shiny-multitex", 1) + .define(SReg::IntCVar, "rend-tex-detail-multitex", 1) + .define(SReg::IntCVar, "rend-tex", 1) + .define(SReg::IntCVar, "rend-dev-wireframe", 0) + .define(SReg::IntCVar, "rend-dev-thinker-ids", 0) + .define(SReg::IntCVar, "rend-dev-mobj-bbox", 0) + .define(SReg::IntCVar, "rend-dev-polyobj-bbox", 0) + .define(SReg::IntCVar, "rend-dev-sector-show-indices", 0) + .define(SReg::IntCVar, "rend-dev-vertex-show-indices", 0) + .define(SReg::IntCVar, "rend-dev-generator-show-indices", 0); + + appearanceSettings.setPersistentName("renderer"); + appearanceSettings + .define(SReg::IntCVar, "rend-light", 1) + .define(SReg::IntCVar, "rend-light-decor", 1) + .define(SReg::IntCVar, "rend-light-blend", 0) + .define(SReg::IntCVar, "rend-light-num", 0) + .define(SReg::FloatCVar, "rend-light-bright", .5f) + .define(SReg::FloatCVar, "rend-light-fog-bright", .15f) + .define(SReg::FloatCVar, "rend-light-radius-scale", 4.24f) + .define(SReg::IntCVar, "rend-light-radius-max", 256) + .define(SReg::IntCVar, "rend-light-ambient", 0) + .define(SReg::FloatCVar, "rend-light-compression", 0) + .define(SReg::IntCVar, "rend-light-attenuation", 924) + .define(SReg::IntCVar, "rend-light-sky-auto", 1) + .define(SReg::FloatCVar, "rend-light-sky", .273f) + .define(SReg::IntCVar, "rend-light-wall-angle-smooth", 1) + .define(SReg::FloatCVar, "rend-light-wall-angle", 1.2f) + + .define(SReg::IntCVar, "rend-vignette", 1) + .define(SReg::FloatCVar, "rend-vignette-darkness", 1) + .define(SReg::FloatCVar, "rend-vignette-width", 1) + + .define(SReg::IntCVar, "rend-halo-realistic", 1) + .define(SReg::IntCVar, "rend-halo", 5) + .define(SReg::IntCVar, "rend-halo-bright", 45) + .define(SReg::IntCVar, "rend-halo-size", 80) + .define(SReg::IntCVar, "rend-halo-occlusion", 48) + .define(SReg::FloatCVar, "rend-halo-radius-min", 20) + .define(SReg::FloatCVar, "rend-halo-secondary-limit", 1) + .define(SReg::FloatCVar, "rend-halo-dim-near", 10) + .define(SReg::FloatCVar, "rend-halo-dim-far", 100) + .define(SReg::FloatCVar, "rend-halo-zmag-div", 62) + + .define(SReg::FloatCVar, "rend-glow", .8f) + .define(SReg::IntCVar, "rend-glow-height", 100) + .define(SReg::FloatCVar, "rend-glow-scale", 3) + .define(SReg::IntCVar, "rend-glow-wall", 1) + + .define(SReg::IntCVar, "rend-fakeradio", 1) + .define(SReg::FloatCVar, "rend-fakeradio-darkness", 1.2f) + .define(SReg::IntCVar, "rend-shadow", 1) + .define(SReg::FloatCVar, "rend-shadow-darkness", 1.2f) + .define(SReg::IntCVar, "rend-shadow-far", 1000) + .define(SReg::IntCVar, "rend-shadow-radius-max", 80) + + .define(SReg::IntCVar, "rend-tex-shiny", 1) + .define(SReg::IntCVar, "rend-tex-mipmap", 5) + .define(SReg::IntCVar, "rend-tex-quality", TEXQ_BEST) + .define(SReg::IntCVar, "rend-tex-anim-smooth", 1) + .define(SReg::IntCVar, "rend-tex-filter-smart", 0) + .define(SReg::IntCVar, "rend-tex-filter-sprite", 1) + .define(SReg::IntCVar, "rend-tex-filter-mag", 1) + .define(SReg::IntCVar, "rend-tex-filter-ui", 1) + .define(SReg::IntCVar, "rend-tex-filter-anisotropic", -1) + .define(SReg::IntCVar, "rend-tex-detail", 1) + .define(SReg::FloatCVar, "rend-tex-detail-scale", 4) + .define(SReg::FloatCVar, "rend-tex-detail-strength", .5f) + + .define(SReg::IntCVar, "rend-mobj-smooth-move", 2) + .define(SReg::IntCVar, "rend-mobj-smooth-turn", 1) + + .define(SReg::IntCVar, "rend-model", 1) + .define(SReg::IntCVar, "rend-model-inter", 1) + .define(SReg::IntCVar, "rend-model-distance", 1500) + .define(SReg::FloatCVar, "rend-model-lod", 256) + .define(SReg::FloatCVar, "rend-model-lights", 4) + + .define(SReg::IntCVar, "rend-sprite-mode", 0) + .define(SReg::IntCVar, "rend-sprite-blend", 1) + .define(SReg::IntCVar, "rend-sprite-lights", 4) + .define(SReg::IntCVar, "rend-sprite-align", 0) + .define(SReg::IntCVar, "rend-sprite-noz", 0) + + .define(SReg::IntCVar, "rend-particle", 1) + .define(SReg::IntCVar, "rend-particle-max", 0) + .define(SReg::FloatCVar, "rend-particle-rate", 1) + .define(SReg::FloatCVar, "rend-particle-diffuse", 4) + .define(SReg::IntCVar, "rend-particle-visible-near", 0) + + .define(SReg::FloatCVar, "rend-sky-distance", 1600); + } }; RenderSystem::RenderSystem() : d(new Instance(this)) @@ -96,6 +200,16 @@ void RenderSystem::timeChanged(Clock const &) // Nothing to do. } +SettingsRegister &RenderSystem::settings() +{ + return d->settings; +} + +SettingsRegister &RenderSystem::appearanceSettings() +{ + return d->appearanceSettings; +} + Store &RenderSystem::buffer() { return d->buffer; diff --git a/doomsday/client/src/ui/dialogs/renderersettingsdialog.cpp b/doomsday/client/src/ui/dialogs/renderersettingsdialog.cpp index b04f19a3f3..8b10028d3b 100644 --- a/doomsday/client/src/ui/dialogs/renderersettingsdialog.cpp +++ b/doomsday/client/src/ui/dialogs/renderersettingsdialog.cpp @@ -51,7 +51,7 @@ DENG_GUI_PIMPL(RendererSettingsDialog) { ScrollAreaWidget &area = self.area(); - area.add(appear = new ProfilePickerWidget(ClientApp::rendererAppearanceSettings(), + area.add(appear = new ProfilePickerWidget(ClientApp::renderSystem().appearanceSettings(), tr("appearance"))); appear->setOpeningDirection(ui::Down); @@ -178,7 +178,7 @@ RendererSettingsDialog::RendererSettingsDialog(String const &name) void RendererSettingsDialog::resetToDefaults() { - ClientApp::rendererSettings().resetToDefaults(); + ClientApp::renderSystem().settings().resetToDefaults(); d->fetch(); } diff --git a/doomsday/client/src/ui/editors/rendererappearanceeditor.cpp b/doomsday/client/src/ui/editors/rendererappearanceeditor.cpp index 04fc8be3a5..61717456be 100644 --- a/doomsday/client/src/ui/editors/rendererappearanceeditor.cpp +++ b/doomsday/client/src/ui/editors/rendererappearanceeditor.cpp @@ -265,7 +265,7 @@ DENG2_OBSERVES(App, GameChange) Instance(Public *i) : Base(i), - settings(ClientApp::rendererAppearanceSettings()), + settings(ClientApp::renderSystem().appearanceSettings()), firstColumnWidth(new IndirectRule) { // The editor will close automatically when going to Ring Zero.