From 5528f3d1c8eb6106706366e4c5c0ad73090ce805 Mon Sep 17 00:00:00 2001 From: skyjake Date: Mon, 18 Nov 2013 17:50:25 +0200 Subject: [PATCH] Refactor|RenderSystem: Moved the shader bank to RenderSystem, added renderer.pack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Shaders, appearance profiles, and other rendering-related files will now be collected into “renderer.pack”. The GLShaderBank instance owned by the app was moved to a more suitable location in RenderSystem. --- doomsday/build/scripts/packres.py | 6 +++ doomsday/client/data/renderer.pack/images.dei | 8 ++++ .../profiles/renderer/amplified.dei | 0 .../profiles/renderer/defaults.dei | 0 .../profiles/renderer/vanilla.dei | 0 .../data/{ => renderer.pack}/shaders.dei | 0 .../data/{ => renderer.pack}/shaders/blur.vsh | 0 .../shaders/lensflares.fsh | 0 .../shaders/lensflares.vsh | 0 .../shaders/oculusrift-barrel.fsh | 0 doomsday/client/include/clientapp.h | 1 - doomsday/client/include/render/rendersystem.h | 5 +++ doomsday/client/src/clientapp.cpp | 21 ++------- doomsday/client/src/render/consoleeffect.cpp | 2 +- doomsday/client/src/render/rendersystem.cpp | 43 +++++++++++++++++++ .../client/src/ui/framework/guirootwidget.cpp | 2 +- doomsday/client/src/ui/style.cpp | 2 - 17 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 doomsday/client/data/renderer.pack/images.dei rename doomsday/client/data/{ => renderer.pack}/profiles/renderer/amplified.dei (100%) rename doomsday/client/data/{ => renderer.pack}/profiles/renderer/defaults.dei (100%) rename doomsday/client/data/{ => renderer.pack}/profiles/renderer/vanilla.dei (100%) rename doomsday/client/data/{ => renderer.pack}/shaders.dei (100%) rename doomsday/client/data/{ => renderer.pack}/shaders/blur.vsh (100%) rename doomsday/client/data/{ => renderer.pack}/shaders/lensflares.fsh (100%) rename doomsday/client/data/{ => renderer.pack}/shaders/lensflares.vsh (100%) rename doomsday/client/data/{ => renderer.pack}/shaders/oculusrift-barrel.fsh (100%) diff --git a/doomsday/build/scripts/packres.py b/doomsday/build/scripts/packres.py index b7489eec95..cc9c7e25b2 100755 --- a/doomsday/build/scripts/packres.py +++ b/doomsday/build/scripts/packres.py @@ -78,6 +78,12 @@ def process_dir(path, dest_path): [ ('client/data/defaultstyle.pack', '') ] ) p.create('defaultstyle.pack') +# renderer.pack +p = Pack() +p.add_files( + [ ('client/data/renderer.pack', '') ] ) +p.create('renderer.pack') + # libdoom.pk3 p = Pack() p.add_files( diff --git a/doomsday/client/data/renderer.pack/images.dei b/doomsday/client/data/renderer.pack/images.dei new file mode 100644 index 0000000000..08e9d8f860 --- /dev/null +++ b/doomsday/client/data/renderer.pack/images.dei @@ -0,0 +1,8 @@ +# Images for the Renderer +# +# These images are used as key assets in 2D and 3D rendering. + +group fx.lensflares { + # Lens flare images. + +} diff --git a/doomsday/client/data/profiles/renderer/amplified.dei b/doomsday/client/data/renderer.pack/profiles/renderer/amplified.dei similarity index 100% rename from doomsday/client/data/profiles/renderer/amplified.dei rename to doomsday/client/data/renderer.pack/profiles/renderer/amplified.dei diff --git a/doomsday/client/data/profiles/renderer/defaults.dei b/doomsday/client/data/renderer.pack/profiles/renderer/defaults.dei similarity index 100% rename from doomsday/client/data/profiles/renderer/defaults.dei rename to doomsday/client/data/renderer.pack/profiles/renderer/defaults.dei diff --git a/doomsday/client/data/profiles/renderer/vanilla.dei b/doomsday/client/data/renderer.pack/profiles/renderer/vanilla.dei similarity index 100% rename from doomsday/client/data/profiles/renderer/vanilla.dei rename to doomsday/client/data/renderer.pack/profiles/renderer/vanilla.dei diff --git a/doomsday/client/data/shaders.dei b/doomsday/client/data/renderer.pack/shaders.dei similarity index 100% rename from doomsday/client/data/shaders.dei rename to doomsday/client/data/renderer.pack/shaders.dei diff --git a/doomsday/client/data/shaders/blur.vsh b/doomsday/client/data/renderer.pack/shaders/blur.vsh similarity index 100% rename from doomsday/client/data/shaders/blur.vsh rename to doomsday/client/data/renderer.pack/shaders/blur.vsh diff --git a/doomsday/client/data/shaders/lensflares.fsh b/doomsday/client/data/renderer.pack/shaders/lensflares.fsh similarity index 100% rename from doomsday/client/data/shaders/lensflares.fsh rename to doomsday/client/data/renderer.pack/shaders/lensflares.fsh diff --git a/doomsday/client/data/shaders/lensflares.vsh b/doomsday/client/data/renderer.pack/shaders/lensflares.vsh similarity index 100% rename from doomsday/client/data/shaders/lensflares.vsh rename to doomsday/client/data/renderer.pack/shaders/lensflares.vsh diff --git a/doomsday/client/data/shaders/oculusrift-barrel.fsh b/doomsday/client/data/renderer.pack/shaders/oculusrift-barrel.fsh similarity index 100% rename from doomsday/client/data/shaders/oculusrift-barrel.fsh rename to doomsday/client/data/renderer.pack/shaders/oculusrift-barrel.fsh diff --git a/doomsday/client/include/clientapp.h b/doomsday/client/include/clientapp.h index dceacd5e98..e130c9fcc8 100644 --- a/doomsday/client/include/clientapp.h +++ b/doomsday/client/include/clientapp.h @@ -62,7 +62,6 @@ class ClientApp : public de::GuiApp static WindowSystem &windowSystem(); static RenderSystem &renderSystem(); static WidgetActions &widgetActions(); - static de::GLShaderBank &glShaderBank(); static de::Games &games(); static de::World &world(); diff --git a/doomsday/client/include/render/rendersystem.h b/doomsday/client/include/render/rendersystem.h index 4bbf9041c8..0acdefc7b3 100644 --- a/doomsday/client/include/render/rendersystem.h +++ b/doomsday/client/include/render/rendersystem.h @@ -21,6 +21,8 @@ #include #include +#include +#include #include "DrawLists" #include "settingsregister.h" @@ -64,6 +66,9 @@ class RenderSystem : public de::System public: RenderSystem(); + de::GLShaderBank &shaders(); + de::ImageBank &images(); + SettingsRegister &settings(); SettingsRegister &appearanceSettings(); diff --git a/doomsday/client/src/clientapp.cpp b/doomsday/client/src/clientapp.cpp index a76af64258..b8a49e5b5a 100644 --- a/doomsday/client/src/clientapp.cpp +++ b/doomsday/client/src/clientapp.cpp @@ -129,7 +129,6 @@ DENG2_PIMPL(ClientApp) WindowSystem *winSys; RenderSystem *renderSys; ServerLink *svLink; - GLShaderBank shaderBank; Games games; World world; @@ -263,14 +262,9 @@ void ClientApp::initialize() } #endif - // Load all the shader program definitions. - FS::FoundFiles found; - fileSystem().findAll("shaders.dei", found); - DENG2_FOR_EACH(FS::FoundFiles, i, found) - { - LOG_MSG("Loading shader definitions from %s") << (*i)->description(); - d->shaderBank.addFromInfo(**i); - } + // Create the render system. + d->renderSys = new RenderSystem; + addSystem(*d->renderSys); // Create the window system. d->winSys = new WindowSystem; @@ -292,10 +286,6 @@ void ClientApp::initialize() addSystem(*d->inputSys); d->widgetActions.reset(new WidgetActions); - // Create the render system. - d->renderSys = new RenderSystem; - addSystem(*d->renderSys); - // Finally, run the bootstrap script. scriptSystem().importModule("bootstrap"); @@ -384,11 +374,6 @@ WidgetActions &ClientApp::widgetActions() return *app().d->widgetActions; } -GLShaderBank &ClientApp::glShaderBank() -{ - return app().d->shaderBank; -} - Games &ClientApp::games() { return app().d->games; diff --git a/doomsday/client/src/render/consoleeffect.cpp b/doomsday/client/src/render/consoleeffect.cpp index 40d1a16aa1..db7a3b1787 100644 --- a/doomsday/client/src/render/consoleeffect.cpp +++ b/doomsday/client/src/render/consoleeffect.cpp @@ -60,7 +60,7 @@ bool ConsoleEffect::isInited() const GLShaderBank &ConsoleEffect::shaders() const { - return ClientApp::glShaderBank(); + return ClientApp::renderSystem().shaders(); } void ConsoleEffect::glInit() diff --git a/doomsday/client/src/render/rendersystem.cpp b/doomsday/client/src/render/rendersystem.cpp index 9e7de4d165..301bbe7b05 100644 --- a/doomsday/client/src/render/rendersystem.cpp +++ b/doomsday/client/src/render/rendersystem.cpp @@ -85,11 +85,18 @@ DENG2_PIMPL(RenderSystem) { SettingsRegister settings; SettingsRegister appearanceSettings; + GLShaderBank shaderBank; + ImageBank images; Store buffer; DrawLists drawLists; Instance(Public *i) : Base(i) { + LOG_AS("RenderSystem"); + + loadAllShaders(); + loadImages(); + typedef SettingsRegister SReg; // Initialize settings. @@ -190,11 +197,47 @@ DENG2_PIMPL(RenderSystem) .define(SReg::FloatCVar, "rend-sky-distance", 1600); } + + /** + * Reads all shader definitions and sets up a Bank where the actual + * compiled shaders are stored once they're needed. + */ + void loadAllShaders() + { + // Load all the shader program definitions. + FS::FoundFiles found; + App::fileSystem().findAll("shaders.dei", found); + DENG2_FOR_EACH(FS::FoundFiles, i, found) + { + LOG_MSG("Loading shader definitions from %s") << (*i)->description(); + shaderBank.addFromInfo(**i); + } + } + + /** + * Reads the renderer's image definitions and sets up a Bank for caching them + * when they're needed. + */ + void loadImages() + { + Folder const &renderPack = App::fileSystem().find("renderer.pack"); + images.addFromInfo(renderPack.locate("images.dei")); + } }; RenderSystem::RenderSystem() : d(new Instance(this)) {} +GLShaderBank &RenderSystem::shaders() +{ + return d->shaderBank; +} + +ImageBank &RenderSystem::images() +{ + return d->images; +} + void RenderSystem::timeChanged(Clock const &) { // Nothing to do. diff --git a/doomsday/client/src/ui/framework/guirootwidget.cpp b/doomsday/client/src/ui/framework/guirootwidget.cpp index df8a0837f7..81a1e3076d 100644 --- a/doomsday/client/src/ui/framework/guirootwidget.cpp +++ b/doomsday/client/src/ui/framework/guirootwidget.cpp @@ -252,7 +252,7 @@ Id GuiRootWidget::tinyDot() const GLShaderBank &GuiRootWidget::shaders() { - return ClientApp::glShaderBank(); + return ClientApp::renderSystem().shaders(); } Matrix4f GuiRootWidget::projMatrix2D() const diff --git a/doomsday/client/src/ui/style.cpp b/doomsday/client/src/ui/style.cpp index 31da2fb896..876f8588c6 100644 --- a/doomsday/client/src/ui/style.cpp +++ b/doomsday/client/src/ui/style.cpp @@ -28,7 +28,6 @@ using namespace de; DENG2_PIMPL(Style) { - String packPath; Record module; RuleBank rules; FontBank fonts; @@ -53,7 +52,6 @@ DENG2_PIMPL(Style) void load(String const &path) { - packPath = path; Folder const &pack = App::rootFolder().locate(path); rules.addFromInfo(pack.locate("rules.dei"));