Cogs.Core
EditorExtension.cpp
1#include "EditorExtension.h"
2
3#include "ExtensionRegistry.h"
4#include "Context.h"
5
6#include "Editor.h"
7#include "Renderer/IRenderer.h"
8#include "Renderer/RenderStateUpdater.h"
9
10#include "Commands/SparseBuildOctreeCommand.h"
11#include "Commands/AssetPipeCommand.h"
12#include "Commands/AssetStatsCommand.h"
13#include "Resources/ResourceStore.h"
14
15#include "EditorRenderTask.h"
16
17using namespace Cogs::Core;
18using namespace Cogs::Reflection;
19
20namespace Cogs::Core
21{
23 {
24 void initialize(Context* context, IGraphicsDevice* device) override
25 {
26 editorTask.init(context->getDefaultView(), device);
27 }
28
29 void handleEvent(uint32_t eventId, const DrawContext * renderingContext) override
30 {
31 if (eventId == RenderingEvent::RenderGui) {
32
33 editorTask.apply(renderingContext->taskContext);
34 }
35 }
36
37 void generateCommands(const RenderTaskContext * /*renderingContext*/, RenderList * /*renderList*/) override
38 {
39 }
40
41 EditorRenderTask editorTask;
42 };
43
44 struct EditorExtension : public Extension
45 {
46 EditorExtension() { ExtensionRegistry::add(this, COGS_CORE_VERSION_STRING); }
47
48 bool initialize(Context * context) override
49 {
50 const std::string resourceArchive = "Cogs.Core.Extensions.Editor.zip";
51#ifdef EMSCRIPTEN
52 bool resourceArchiveAdded = false;
53 auto manifest = getResourceManifest(context);
54 for (auto& item : manifest) {
55 if (item.find(resourceArchive) != std::string::npos) {
56 context->resourceStore->addResourceArchive(item);
57 resourceArchiveAdded = true;
58 break;
59 }
60 }
61 if (!resourceArchiveAdded) {
62 context->resourceStore->addResourceArchive(resourceArchive);
63 }
64#else
65 context->resourceStore->addSearchPath("../Extensions/Editor/Data/");
66 context->resourceStore->addResourceArchive(resourceArchive);
67#endif
68
69 Editor::registerExtensionCommand("SparseBuildOctree", [](EditorState* state) { return new SparseBuildOctreeCommand(state); });
70 Editor::registerExtensionCommand("AssetPipe", [](EditorState* state) { return new AssetPipeCommand(state); });
71 Editor::registerExtensionCommand("AssetStats", [](EditorState* state) { return new AssetStatsCommand(state); });
72
73 renderExtension = new EditorRenderExtension();
74 context->renderer->registerExtension(renderExtension);
75
76 context->engine->setEditor(new Editor(context));
77 context->engine->getEditor()->initialize();
78
79 return true;
80 }
81
82 void cleanup(Context* context) override
83 {
84 context->renderer->unregisterExtension(renderExtension);
85 delete renderExtension;
86 renderExtension = nullptr;
87 }
88
89 const char * getExtensionKey() const override { return "Editor"; }
90
91 EditorRenderExtension* renderExtension = nullptr;
92
93 } const editorExtension;
94}
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
class IRenderer * renderer
Renderer.
Definition: Context.h:228
std::unique_ptr< class ResourceStore > resourceStore
ResourceStore service instance.
Definition: Context.h:210
std::unique_ptr< class Engine > engine
Engine instance.
Definition: Context.h:222
WireFrame Rendering task for Selected entity outline and extra cameras.
static void add(Extension *extension, StringView version)
Adds the given extension to the registry, ensuring the initialization methods are called at appropria...
Defines an extension to the renderer, capable of doing custom rendering.
Definition: IRenderer.h:123
virtual void registerExtension(IRendererExtension *extension)=0
Register an extension with the renderer.
virtual void unregisterExtension(IRendererExtension *extension)=0
Unregister an extension with the renderer.
Represents a graphics device used to manage graphics resources and issue drawing commands.
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....
Contains reflection support.
Definition: Component.h:11
void cleanup(Context *context) override
Cleanup context bound extension content.
bool initialize(Context *context) override
Initialize extension for the given context.
const char * getExtensionKey() const override
Get the extensions unique key, used to check for extension presence and retrieve extension specific d...
void initialize(Context *context, IGraphicsDevice *device) override
Initialize the extension using the given context and device.
void handleEvent(uint32_t eventId, const DrawContext *renderingContext) override
Called when rendering events occur.
Defines an extension to Cogs.Core and provides methods to override in order to initialize extension c...
@ RenderGui
Rendering GUI elements.
Definition: IRenderer.h:99