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 && editorTask.checkReady(renderingContext->taskContext) == Cogs::ResourceStatus::Ready) {
32 editorTask.apply(renderingContext->taskContext);
33 }
34 }
35
36 void generateCommands(const RenderTaskContext * /*renderingContext*/, RenderList * /*renderList*/) override
37 {
38 }
39
40 EditorRenderTask editorTask;
41 };
42
43 struct EditorExtension : public Extension
44 {
45 EditorExtension() { ExtensionRegistry::add(this, COGS_CORE_VERSION_STRING); }
46
47 bool initialize(Context * context) override
48 {
49 const std::string resourceArchive = "Cogs.Core.Extensions.Editor.zip";
50#ifdef __EMSCRIPTEN__
51 bool resourceArchiveAdded = false;
52 auto manifest = getResourceManifest(context);
53 for (auto& item : manifest) {
54 if (item.find(resourceArchive) != std::string::npos) {
55 context->resourceStore->addResourceArchive(item);
56 resourceArchiveAdded = true;
57 break;
58 }
59 }
60 if (!resourceArchiveAdded) {
61 context->resourceStore->addResourceArchive(resourceArchive);
62 }
63#else
64 context->resourceStore->addSearchPath("../Extensions/Editor/Data/");
65 context->resourceStore->addResourceArchive(resourceArchive);
66#endif
67
68 Editor::registerExtensionCommand("SparseBuildOctree", [](EditorState* state) { return new SparseBuildOctreeCommand(state); });
69 Editor::registerExtensionCommand("AssetPipe", [](EditorState* state) { return new AssetPipeCommand(state); });
70 Editor::registerExtensionCommand("AssetStats", [](EditorState* state) { return new AssetStatsCommand(state); });
71
72 renderExtension = new EditorRenderExtension();
73 context->renderer->registerExtension(renderExtension);
74
75 context->engine->setEditor(new Editor(context));
76 context->engine->getEditor()->initialize();
77
78 return true;
79 }
80
81 void cleanup(Context* context) override
82 {
83 context->renderer->unregisterExtension(renderExtension);
84 delete renderExtension;
85 renderExtension = nullptr;
86 }
87
88 const char * getExtensionKey() const override { return "Editor"; }
89
90 EditorRenderExtension* renderExtension = nullptr;
91
92 } const editorExtension;
93}
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.
Cogs::ResourceStatus checkReady(RenderTaskContext *context) override
Check if the task is ready to be applied, e.g.
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
@ Ready
The resource has loaded successfully and is ready for use.
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