Skip to content

Commit

Permalink
Refactor|Client: RenderSystem has ownership of renderer/renderer-appe…
Browse files Browse the repository at this point in the history
…arance settings
  • Loading branch information
danij-deng committed Nov 6, 2013
1 parent 695300f commit 0c9e939
Show file tree
Hide file tree
Showing 6 changed files with 123 additions and 117 deletions.
2 changes: 0 additions & 2 deletions doomsday/client/include/clientapp.h
Expand Up @@ -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();
Expand Down
4 changes: 4 additions & 0 deletions doomsday/client/include/render/rendersystem.h
Expand Up @@ -22,6 +22,7 @@
#include <de/System>
#include <de/Vector>
#include "DrawLists"
#include "settingsregister.h"

/**
* Geometry backing store (arrays).
Expand Down Expand Up @@ -63,6 +64,9 @@ class RenderSystem : public de::System
public:
RenderSystem();

SettingsRegister &settings();
SettingsRegister &appearanceSettings();

/**
* Provides access to the central map geometry buffer.
*/
Expand Down
110 changes: 0 additions & 110 deletions doomsday/client/src/clientapp.cpp
Expand Up @@ -122,8 +122,6 @@ Value *Binding_App_LoadFont(Context &, Function::ArgumentValues const &args)
DENG2_PIMPL(ClientApp)
{
QScopedPointer<Updater> updater;
SettingsRegister rendererSettings;
SettingsRegister rendererAppearanceSettings;
SettingsRegister audioSettings;
QMenuBar *menuBar;
InputSystem *inputSys;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand Down
118 changes: 116 additions & 2 deletions doomsday/client/src/render/rendersystem.cpp
Expand Up @@ -20,6 +20,7 @@
#include "clientapp.h"
#include "render/rendersystem.h"

#include "gl/gl_texmanager.h"
#include <de/memory.h>

using namespace de;
Expand Down Expand Up @@ -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))
Expand All @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions doomsday/client/src/ui/dialogs/renderersettingsdialog.cpp
Expand Up @@ -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);

Expand Down Expand Up @@ -178,7 +178,7 @@ RendererSettingsDialog::RendererSettingsDialog(String const &name)

void RendererSettingsDialog::resetToDefaults()
{
ClientApp::rendererSettings().resetToDefaults();
ClientApp::renderSystem().settings().resetToDefaults();

d->fetch();
}
Expand Down
Expand Up @@ -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.
Expand Down

0 comments on commit 0c9e939

Please sign in to comment.