Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
Editor.h
Go to the documentation of this file.
1/*
2Copyright (c) 2018 DIVIDE-Studio
3Copyright (c) 2009 Ionut Cava
4
5This file is part of DIVIDE Framework.
6
7Permission is hereby granted, free of charge, to any person obtaining a copy
8of this software
9and associated documentation files (the "Software"), to deal in the Software
10without restriction,
11including without limitation the rights to use, copy, modify, merge, publish,
12distribute, sublicense,
13and/or sell copies of the Software, and to permit persons to whom the
14Software is furnished to do so,
15subject to the following conditions:
16
17The above copyright notice and this permission notice shall be included in
18all copies or substantial portions of the Software.
19
20THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21IMPLIED,
22INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
23PARTICULAR PURPOSE AND NONINFRINGEMENT.
24IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25DAMAGES OR OTHER LIABILITY,
26WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
27IN CONNECTION WITH THE SOFTWARE
28OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
30*/
31
32#pragma once
33#ifndef DVD_EDITOR_H_
34#define DVD_EDITOR_H_
35
36#include "UndoManager.h"
37
46
51
53
54struct ImDrawData;
55
56namespace Divide
57{
58
59 namespace Attorney
60 {
61 class EditorGizmo;
62 class EditorMenuBar;
63 class EditorOutputWindow;
64 class EditorOptionsWindow;
65 class EditorGeneralWidget;
66 class EditorWindowManager;
67 class EditorPropertyWindow;
68 class EditorSceneViewWindow;
69 class EditorSolutionExplorerWindow;
70 class EditorRenderPassExecutor;
71 class EditorEditorComponent;
72 }
73
74 namespace GFX
75 {
76 class CommandBuffer;
77 }
78 class Scene;
79 class Camera;
80 class Texture;
81 class LightPool;
82 class RenderPass;
83 class ECSManager;
84 class UndoManager;
85 class IMPrimitive;
86 class DockedWindow;
87 class OutputWindow;
88 class PanelManager;
89 class PostFXWindow;
90 class DisplayWindow;
91 class ShaderProgram;
92 class PropertyWindow;
93 class SceneGraphNode;
94 class SceneViewWindow;
95 class PlatformContext;
96 class ApplicationOutput;
97 class NodePreviewWindow;
98 class ContentExplorerWindow;
99 class SolutionExplorerWindow;
100 class SceneEnvironmentProbePool;
101
108
109 struct Selections;
110 struct SizeChangeParams;
111 struct TransformSettings;
112 struct PushConstantsStruct;
113
114 template<typename T>
115 struct UndoEntry;
116
117 void InitBasicImGUIState( ImGuiIO& io ) noexcept;
118
120 {
122 Handle<Texture> _texture = INVALID_HANDLE<Texture>;
123 vec4<I32> _colourData = { 1, 1, 1, 1 };
124 vec2<F32> _depthRange = { 0.002f, 1.f };
126 U32 _mip = 0u;
127 bool _isDepthTexture = false;
128 bool _flip = true;
129 bool _srgb = false;
130 };
131
133
134 ImTextureID to_TexID(Handle<Texture> handle);
135 Handle<Texture> from_TexID(ImTextureID texID);
136
137 class Editor final : public PlatformContextComponent,
138 public FrameListener,
141 {
142
154
155 public:
156 static std::array<Input::MouseButton, 5> g_oisButtons;
157 static std::array<const char*, 3> g_supportedExportPlatforms;
158
159 enum class WindowType : U8
160 {
161 PostFX = 0,
165 Output,
167 SceneView,
168 COUNT
169 };
170
171 enum class ImGuiContextType : U8
172 {
173 Gizmo = 0,
174 Editor = 1,
175 COUNT
176 };
177
179 {
180 bool _focusedScenePreview{ false };
181 bool _focusedNodePreview{ false };
182 bool _hoveredScenePreview{ false };
183 bool _hoveredNodePreview{ false };
184 ImVec2 _globalMousePos{ 0.f, 0.f };
185 ImVec2 _scaledMousePos{ 0.f, 0.f };
186 };
187
188 public:
190 ~Editor() override;
191
192 [[nodiscard]] bool init( const vec2<U16> renderResolution );
193 void close();
194 void idle() noexcept;
195 void update( U64 deltaTimeUS );
197 void drawScreenOverlay( const Camera* camera, const Rect<I32>& targetViewport, GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut ) const;
198
199 void toggle( bool state );
200 void onWindowSizeChange( const SizeChangeParams& params );
201 void onResolutionChange( const SizeChangeParams& params );
202 void selectionChangeCallback( PlayerIndex idx, const vector<SceneGraphNode*>& nodes ) const;
203 void onChangeScene( Scene* newScene );
204
205 [[nodiscard]] bool Undo() const;
206 [[nodiscard]] inline size_t UndoStackSize() const noexcept;
207
208 [[nodiscard]] bool Redo() const;
209 [[nodiscard]] inline size_t RedoStackSize() const noexcept;
210
211 [[nodiscard]] Rect<I32> scenePreviewRect( bool globalCoords ) const noexcept;
212 [[nodiscard]] bool wantsMouse() const;
213 [[nodiscard]] bool wantsKeyboard() const noexcept;
214 [[nodiscard]] bool wantsJoystick() const noexcept;
215 [[nodiscard]] bool hasFocus() const;
216 [[nodiscard]] bool isHovered() const;
217 template<typename T>
218 void registerUndoEntry( const UndoEntry<T>& entry );
219
220 [[nodiscard]] inline bool inEditMode() const noexcept;
221 [[nodiscard]] inline bool simulationPaused() const noexcept;
222 [[nodiscard]] inline U32 stepQueue() const noexcept;
223 [[nodiscard]] inline const TransformSettings& getTransformSettings() const noexcept;
224 inline void setTransformSettings( const TransformSettings& settings ) const noexcept;
225
226 void infiniteGridAxisWidth( const F32 value ) noexcept;
227 void infiniteGridScale( const F32 value ) noexcept;
228
229 void showStatusMessage( const string& message, F32 durationMS, bool error ) const;
230
231 [[nodiscard]] inline const RenderTargetHandle& getNodePreviewTarget() const noexcept;
232
233 protected: //frame listener
234 [[nodiscard]] bool framePostRender( const FrameEvent& evt ) override;
235 [[nodiscard]] bool frameEnded( const FrameEvent& evt ) noexcept override;
236
237 public: // input
239 [[nodiscard]] bool onKeyDown( const Input::KeyEvent& key ) override;
241 [[nodiscard]] bool onKeyUp( const Input::KeyEvent& key ) override;
243 [[nodiscard]] bool mouseMoved( const Input::MouseMoveEvent& arg ) override;
245 [[nodiscard]] bool mouseButtonPressed( const Input::MouseButtonEvent& arg ) override;
247 [[nodiscard]] bool mouseButtonReleased( const Input::MouseButtonEvent& arg ) override;
248
249 [[nodiscard]] bool joystickButtonPressed( const Input::JoystickEvent& arg ) noexcept override;
250 [[nodiscard]] bool joystickButtonReleased( const Input::JoystickEvent& arg ) noexcept override;
251 [[nodiscard]] bool joystickAxisMoved( const Input::JoystickEvent& arg ) noexcept override;
252 [[nodiscard]] bool joystickPovMoved( const Input::JoystickEvent& arg ) noexcept override;
253 [[nodiscard]] bool joystickBallMoved( const Input::JoystickEvent& arg ) noexcept override;
254 [[nodiscard]] bool joystickAddRemove( const Input::JoystickEvent& arg ) noexcept override;
255 [[nodiscard]] bool joystickRemap( const Input::JoystickEvent& arg ) noexcept override;
256 [[nodiscard]] bool onTextEvent( const Input::TextEvent& arg ) override;
257
258 [[nodiscard]] bool saveToXML() const;
259 [[nodiscard]] bool loadFromXML();
260
261 protected:
262 [[nodiscard]] inline bool isInit() const noexcept;
263 [[nodiscard]] bool render( );
264
265 BoundingSphere teleportToNode( Camera* camera, const SceneGraphNode* sgn ) const;
266 void saveNode( const SceneGraphNode* sgn ) const;
267 void loadNode( SceneGraphNode* sgn ) const;
268 void queueRemoveNode( I64 nodeGUID );
269 void updateEditorFocus();
270 void updateFocusState( ImVec2 mousePos );
272 void createFontTexture( F32 DPIScaleFactor );
273 [[nodiscard]] static ImGuiViewport* FindViewportByPlatformHandle( ImGuiContext* context, const DisplayWindow* window );
274
275 [[nodiscard]] U32 saveItemCount() const noexcept;
276
277 [[nodiscard]] bool isDefaultScene() const noexcept;
278
279 void postRender( RenderStage stage, const CameraSnapshot& cameraSnapshot, RenderTargetID target, GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut );
280 void getCommandBuffer( GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut );
281
283
284 PROPERTY_R_IW( I64, previewNodeGUID, -1 );
285 PROPERTY_R_IW( bool, running, false );
286 PROPERTY_R_IW( bool, unsavedSceneChanges, false );
287 PROPERTY_R_IW( FocusedWindowState, windowFocusState );
288 POINTER_R_IW( Camera, selectedCamera, nullptr );
289 POINTER_R_IW( Camera, editorCamera, nullptr );
290 POINTER_R_IW( Camera, nodePreviewCamera, nullptr );
291 PROPERTY_R_IW( bool, nodePreviewWindowVisible, false);
292 PROPERTY_RW( bool, infiniteGridEnabledScene, true );
293 PROPERTY_RW( bool, infiniteGridEnabledNode, true );
296 PROPERTY_R_IW( FColour3, nodePreviewBGColour );
297 PROPERTY_INTERNAL( bool, lockSolutionExplorer, false );
298 PROPERTY_INTERNAL( bool, sceneGizmoEnabled, false );
299
300 protected:
301 void renderDrawList( ImDrawData* pDrawData, I64 bufferGUID, const Rect<I32>& targetViewport, bool editorPass, GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut );
302
304 [[nodiscard]] bool saveSceneChanges( const DELEGATE<void, std::string_view>& msgCallback, const DELEGATE<void, bool>& finishCallback ) const;
305 [[nodiscard]] bool switchScene( const SceneEntry& scene, bool createIfNotExists = false );
306 [[nodiscard]] bool openProject( const ProjectID& projectID );
308 [[nodiscard]] bool modalTextureView( std::string_view modalName, Handle<Texture> tex, vec2<F32> dimensions, bool preserveAspect, bool useModal ) const;
310 [[nodiscard]] bool modalModelSpawn( Handle<Mesh> mesh, bool quick, const vec3<F32>& scale = VECTOR3_UNIT, const vec3<F32>& position = VECTOR3_ZERO );
312 [[nodiscard]] bool spawnGeometry( Handle<Mesh> mesh, const vec3<F32>& scale, const vec3<F32>& position, const vec3<Angle::DEGREES<F32>>& rotation, std::string_view name ) const;
314 [[nodiscard]] bool isNodeInView( const SceneGraphNode& node ) const noexcept;
315
316 void onRemoveComponent( const EditorComponent& comp ) const;
317
318 [[nodiscard]] const ProjectIDs& getProjectList() const noexcept;
319 [[nodiscard]] const SceneEntries& getSceneList() const noexcept;
320 [[nodiscard]] LightPool& getActiveLightPool() const;
321 [[nodiscard]] SceneEnvironmentProbePool* getActiveEnvProbePool() const noexcept;
322
323 inline void toggleMemoryEditor( bool state ) noexcept;
324
325 void copyPlayerCamToEditorCam() noexcept;
326 void setEditorCamLookAt( const vec3<F32>& eye, const vec3<F32>& fwd, const vec3<F32>& up );
327 void setEditorCameraSpeed( const vec3<F32>& speed ) noexcept;
328
329 [[nodiscard]] bool addComponent( SceneGraphNode* selection, ComponentType newComponentType ) const;
330 [[nodiscard]] bool addComponent( const Selections& selections, ComponentType newComponentType ) const;
331 [[nodiscard]] bool removeComponent( SceneGraphNode* selection, ComponentType newComponentType ) const;
332 [[nodiscard]] bool removeComponent( const Selections& selections, ComponentType newComponentType ) const;
333
334 GenericVertexData* getOrCreateIMGUIBuffer( I64 bufferGUID, U32 maxVertices, GFX::MemoryBarrierCommand& memCmdInOut );
335
336 protected:
338
339 private:
342
343 MenuBar_uptr _menuBar;
344 StatusBar_uptr _statusBar;
345 EditorOptionsWindow_uptr _optionsWindow;
346 UndoManager_uptr _undoManager;
347 Gizmo_uptr _gizmo ;
348
350 Handle<Texture> _fontTexture = INVALID_HANDLE<Texture>;
351 Handle<ShaderProgram> _imguiProgram = INVALID_HANDLE<ShaderProgram>;
352 Handle<ShaderProgram> _infiniteGridProgram = INVALID_HANDLE<ShaderProgram>;
353
359
360 eastl::fixed_vector<std::pair<I64, GenericVertexData_ptr>, 5, true> _imguiBuffers;
361
362 std::pair<bufferPtr, size_t> _memoryEditorData = { nullptr, 0 };
363 std::array<ImGuiContext*, to_base( ImGuiContextType::COUNT )> _imguiContexts = {};
364 std::array<std::unique_ptr<DockedWindow>, to_base( WindowType::COUNT )> _dockedWindows = {};
365
367
369
370 string _lastOpenSceneName{ "" };
373 bool _simulationPaused = true;
375 bool _showSampleWindow = false;
376 bool _showOptionsWindow = false;
377 bool _showMemoryEditor = false;
378 bool _isScenePaused = false;
384 {
385 Handle<Mesh> _mesh{ INVALID_HANDLE<Mesh> };
389 }; //Editor
390
391 namespace Attorney
392 {
394 {
395 static void renderDrawList( Editor& editor, ImDrawData* pDrawData, const I64 windowGUID, const Rect<I32>& targetViewport, GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut )
396 {
397 editor.renderDrawList( pDrawData, windowGUID, targetViewport, false, bufferInOut, memCmdInOut );
398 }
399
400 friend class Divide::Gizmo;
401 };
402
404 {
405 [[nodiscard]] static bool editorEnabledGizmo( const Editor& editor ) noexcept
406 {
407 return editor._gizmo->enabled();
408 }
409
410 static void editorEnableGizmo( const Editor& editor, const bool state ) noexcept
411 {
412 editor._gizmo->enable( state );
413 }
414
415 static void copyPlayerCamToEditorCam( Editor& editor ) noexcept
416 {
417 editor.copyPlayerCamToEditorCam();
418 }
419
420 static void setEditorCamLookAt( Editor& editor, const vec3<F32>& eye, const vec3<F32>& fwd, const vec3<F32>& up ) noexcept
421 {
422 editor.setEditorCamLookAt( eye, fwd, up );
423 }
424
425 static void setEditorCameraSpeed( Editor& editor, const vec3<F32>& speed ) noexcept
426 {
427 editor.setEditorCameraSpeed( speed );
428 }
429
430 static void editorStepQueue( Editor& editor, const U32 steps ) noexcept
431 {
432 editor._stepQueue = steps;
433 }
434
435 static void simulationPaused( Editor& editor, const bool state ) noexcept
436 {
437 editor._simulationPaused = state;
438 }
439
440 static FColour3& nodePreviewBGColour( Editor& editor ) noexcept
441 {
442 return editor._nodePreviewBGColour;
443 }
444
447 };
448
450 {
451 static void setSelectedCamera( Editor& editor, Camera* camera ) noexcept
452 {
453 editor.selectedCamera( camera );
454 }
455
456 [[nodiscard]] static const Camera* getSelectedCamera( const Editor& editor ) noexcept
457 {
458 return editor.selectedCamera();
459 }
460
461 [[nodiscard]] static bool editorEnableGizmo( const Editor& editor ) noexcept
462 {
463 return editor._gizmo->enabled();
464 }
465
466 static void editorEnableGizmo( const Editor& editor, const bool state ) noexcept
467 {
468 editor._gizmo->enable( state );
469 }
470
471 static BoundingSphere teleportToNode( const Editor& editor, Camera* camera, const SceneGraphNode* targetNode )
472 {
473 return editor.teleportToNode( camera, targetNode );
474 }
475
476 static void saveNode( const Editor& editor, const SceneGraphNode* targetNode )
477 {
478 editor.saveNode( targetNode );
479 }
480
481 static void loadNode( const Editor& editor, SceneGraphNode* targetNode )
482 {
483 editor.loadNode( targetNode );
484 }
485
486 static void queueRemoveNode( Editor& editor, const I64 nodeGUID )
487 {
488 editor.queueRemoveNode( nodeGUID );
489 }
490
491 [[nodiscard]] static bool lockSolutionExplorer( const Editor& editor )
492 {
493 return editor.lockSolutionExplorer();
494 }
495
496 [[nodiscard]] static bool isNodeInView( const Editor& editor, const SceneGraphNode& node )
497 {
498 return editor.isNodeInView( node );
499 }
501 };
502
504 {
505 static void setSelectedCamera( Editor& editor, Camera* camera ) noexcept
506 {
507 editor.selectedCamera( camera );
508 }
509
510 [[nodiscard]] static Camera* getSelectedCamera( const Editor& editor ) noexcept
511 {
512 return editor.selectedCamera();
513 }
514
515 static void lockSolutionExplorer( Editor& editor, const bool state ) noexcept
516 {
517 editor.lockSolutionExplorer( state );
518 }
519
520 static void saveNode( const Editor& editor, const SceneGraphNode* targetNode )
521 {
522 editor.saveNode( targetNode );
523 }
524
526 };
527
528
530 {
531 [[nodiscard]] static ImGuiStyleEnum getTheme( const Editor& editor ) noexcept
532 {
533 return editor._currentTheme;
534 }
535
536 static void setTheme( Editor& editor, const ImGuiStyleEnum newTheme ) noexcept
537 {
538 editor._currentTheme = newTheme;
539 }
540
541 [[nodiscard]] static const ResourcePath& externalTextEditorPath( const Editor& editor ) noexcept
542 {
543 return editor._externalTextEditorPath;
544 }
545
546 static void externalTextEditorPath( Editor& editor, const ResourcePath& path )
547 {
548 editor._externalTextEditorPath = path;
549 }
550
552 };
553
555 {
556 static void toggleMemoryEditor( Editor& editor, const bool state ) noexcept
557 {
558 editor.toggleMemoryEditor( state );
559 }
560
561 [[nodiscard]] static bool memoryEditorEnabled( const Editor& editor ) noexcept
562 {
563 return editor._showMemoryEditor;
564 }
565
566 [[nodiscard]] static bool& sampleWindowEnabled( Editor& editor ) noexcept
567 {
568 return editor._showSampleWindow;
569 }
570
571 [[nodiscard]] static bool& optionWindowEnabled( Editor& editor ) noexcept
572 {
573 return editor._showOptionsWindow;
574 }
575
576 [[nodiscard]] static const CircularBuffer<SceneEntry, 10>& getRecentSceneList( const Editor& editor ) noexcept
577 {
578 return editor._recentSceneList;
579 }
580
581 [[nodiscard]] static const SceneEntries& getSceneList( const Editor& editor ) noexcept
582 {
583 return editor.getSceneList();
584 }
585
586 [[nodiscard]] static const ProjectIDs& getProjectList( Editor& editor ) noexcept
587 {
588 return editor.getProjectList();
589 }
590
591 [[nodiscard]] static bool openProject( Editor& editor, const ProjectID& projectID ) noexcept
592 {
593 return editor.openProject( projectID );
594 }
595
596 friend class Divide::MenuBar;
597 };
598
600 {
601 static void setTransformSettings( const Editor& editor, const TransformSettings& settings ) noexcept
602 {
603 editor.setTransformSettings( settings );
604 }
605
606 [[nodiscard]] static const TransformSettings& getTransformSettings( const Editor& editor ) noexcept
607 {
608 return editor.getTransformSettings();
609 }
610
611 [[nodiscard]] static LightPool& getActiveLightPool( const Editor& editor )
612 {
613 return editor.getActiveLightPool();
614 }
615
616 [[nodiscard]] static SceneEnvironmentProbePool* getActiveEnvProbePool( const Editor& editor )
617 {
618 return editor.getActiveEnvProbePool();
619 }
620
621 static void enableGizmo( const Editor& editor, const bool state ) noexcept
622 {
623 return editor._gizmo->enable( state );
624 }
625
626 [[nodiscard]] static bool enableGizmo( const Editor& editor ) noexcept
627 {
628 return editor._gizmo->enabled();
629 }
630
631 static void setSceneGizmoEnabled( Editor& editor, const bool state ) noexcept
632 {
633 return editor.sceneGizmoEnabled( state );
634 }
635
636 [[nodiscard]] static bool getSceneGizmoEnabled( const Editor& editor ) noexcept
637 {
638 return editor.sceneGizmoEnabled();
639 }
640
641 [[nodiscard]] static U32 saveItemCount( const Editor& editor ) noexcept
642 {
643 return editor.saveItemCount();
644 }
645
646 [[nodiscard]] static bool hasUnsavedSceneChanges( const Editor& editor ) noexcept
647 {
648 return editor.unsavedSceneChanges();
649 }
650
651 [[nodiscard]] static bool isDefaultScene( const Editor& editor ) noexcept
652 {
653 return editor.isDefaultScene();
654 }
655
656 static void registerUnsavedSceneChanges( Editor& editor ) noexcept
657 {
658 editor.unsavedSceneChanges( true );
659 }
660
661 [[nodiscard]] static bool saveSceneChanges( const Editor& editor, const DELEGATE<void, std::string_view>& msgCallback, const DELEGATE<void, bool>& finishCallback )
662 {
663 return editor.saveSceneChanges( msgCallback, finishCallback );
664 }
665
666 static bool switchScene( Editor& editor, const SceneEntry& scene, bool createIfNotExists )
667 {
668 return editor.switchScene( scene, createIfNotExists );
669 }
670
671 static void inspectMemory( Editor& editor, const std::pair<bufferPtr, size_t> data ) noexcept
672 {
673 editor._memoryEditorData = data;
674 }
675
676 [[nodiscard]] static bool modalTextureView( const Editor& editor, const std::string_view modalName, Handle<Texture> tex, const vec2<F32> dimensions, const bool preserveAspect, const bool useModal )
677 {
678 return editor.modalTextureView( modalName, tex, dimensions, preserveAspect, useModal );
679 }
680
681 [[nodiscard]] static bool modalModelSpawn( Editor& editor, Handle<Mesh> mesh, bool quick, const vec3<F32>& scale = VECTOR3_UNIT, const vec3<F32>& position = VECTOR3_ZERO )
682 {
683 return editor.modalModelSpawn( mesh, quick, scale, position );
684 }
685
686 [[nodiscard]] static ImGuiContext& getImGuiContext( Editor& editor, const Editor::ImGuiContextType type ) noexcept
687 {
688 return *editor._imguiContexts[to_base( type )];
689 }
690
691 [[nodiscard]] static ImGuiContext& imguizmoContext( Editor& editor, const Editor::ImGuiContextType type ) noexcept
692 {
693 return *editor._imguiContexts[to_base( type )];
694 }
695
696 [[nodiscard]] static bool addComponent( const Editor& editor, const Selections& selections, const ComponentType newComponentType )
697 {
698 return editor.addComponent( selections, newComponentType );
699 }
700
701 [[nodiscard]] static bool removeComponent( const Editor& editor, SceneGraphNode* selection, const ComponentType newComponentType )
702 {
703 return editor.removeComponent( selection, newComponentType );
704 }
705
706 [[nodiscard]] static bool removeComponent( const Editor& editor, const Selections& selections, const ComponentType newComponentType )
707 {
708 return editor.removeComponent( selections, newComponentType );
709 }
710
711 static void showStatusMessage( const Editor& editor, const string& message, const F32 durationMS, const bool error )
712 {
713 editor.showStatusMessage( message, durationMS, error );
714 }
715
716 [[nodiscard]] static const ResourcePath& externalTextEditorPath( const Editor& editor ) noexcept
717 {
718 return editor._externalTextEditorPath;
719 }
720
721 static void setPreviewNode( Editor& editor, SceneGraphNode* previewNode ) noexcept
722 {
723 editor._previewNode = previewNode;
724 }
725
726 friend class Divide::Gizmo;
727 friend class Divide::MenuBar;
734 };
735
737 {
738 static void getCommandBuffer( Editor& editor, GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut )
739 {
740 editor.getCommandBuffer( bufferInOut, memCmdInOut );
741 }
742
743 static void postRender( Editor& editor, const RenderStage stage, const CameraSnapshot& cameraSnapshot, const RenderTargetID target, GFX::CommandBuffer& bufferInOut, GFX::MemoryBarrierCommand& memCmdInOut )
744 {
745 editor.postRender( stage, cameraSnapshot, target, bufferInOut, memCmdInOut );
746 }
747
748 friend class Divide::RenderPass;
751 };
752
754 {
755
756 static void onRemoveComponent( const Editor& editor, const EditorComponent& comp )
757 {
758 editor.onRemoveComponent( comp );
759 }
760
762 };
763 } //namespace Attorney
764
765 void PushReadOnly( bool fade = true );
766 void PopReadOnly();
767
769 {
770 ScopedReadOnly( bool fade = false )
771 {
772 PushReadOnly( fade );
773 }
775 {
776 PopReadOnly();
777 }
778 };
779} //namespace Divide
780
781#endif //DVD_EDITOR_H_
782
783#include "Editor.inl"
#define PROPERTY_RW(...)
Convenience method to add a class member with public read access and write access.
#define PROPERTY_R(...)
Convenience method to add a class member with public read access but protected write access.
#define PROPERTY_R_IW(...)
Convenience method to add a class member with public read access but protected write access including...
#define POINTER_R_IW(...)
Convenience method to add a class member with public read access but protected write access including...
#define PROPERTY_INTERNAL(...)
This will only set properties internal to the actual class.
#define FWD_DECLARE_MANAGED_CLASS(T)
static void onRemoveComponent(const Editor &editor, const EditorComponent &comp)
Definition: Editor.h:756
static bool modalTextureView(const Editor &editor, const std::string_view modalName, Handle< Texture > tex, const vec2< F32 > dimensions, const bool preserveAspect, const bool useModal)
Definition: Editor.h:676
static const ResourcePath & externalTextEditorPath(const Editor &editor) noexcept
Definition: Editor.h:716
static void setPreviewNode(Editor &editor, SceneGraphNode *previewNode) noexcept
Definition: Editor.h:721
static const TransformSettings & getTransformSettings(const Editor &editor) noexcept
Definition: Editor.h:606
static void enableGizmo(const Editor &editor, const bool state) noexcept
Definition: Editor.h:621
static void showStatusMessage(const Editor &editor, const string &message, const F32 durationMS, const bool error)
Definition: Editor.h:711
static void inspectMemory(Editor &editor, const std::pair< bufferPtr, size_t > data) noexcept
Definition: Editor.h:671
static void setSceneGizmoEnabled(Editor &editor, const bool state) noexcept
Definition: Editor.h:631
static LightPool & getActiveLightPool(const Editor &editor)
Definition: Editor.h:611
static bool isDefaultScene(const Editor &editor) noexcept
Definition: Editor.h:651
static bool addComponent(const Editor &editor, const Selections &selections, const ComponentType newComponentType)
Definition: Editor.h:696
static U32 saveItemCount(const Editor &editor) noexcept
Definition: Editor.h:641
static bool switchScene(Editor &editor, const SceneEntry &scene, bool createIfNotExists)
Definition: Editor.h:666
static SceneEnvironmentProbePool * getActiveEnvProbePool(const Editor &editor)
Definition: Editor.h:616
static bool enableGizmo(const Editor &editor) noexcept
Definition: Editor.h:626
static bool saveSceneChanges(const Editor &editor, const DELEGATE< void, std::string_view > &msgCallback, const DELEGATE< void, bool > &finishCallback)
Definition: Editor.h:661
static bool removeComponent(const Editor &editor, SceneGraphNode *selection, const ComponentType newComponentType)
Definition: Editor.h:701
static bool modalModelSpawn(Editor &editor, Handle< Mesh > mesh, bool quick, const vec3< F32 > &scale=VECTOR3_UNIT, const vec3< F32 > &position=VECTOR3_ZERO)
Definition: Editor.h:681
static bool getSceneGizmoEnabled(const Editor &editor) noexcept
Definition: Editor.h:636
static ImGuiContext & imguizmoContext(Editor &editor, const Editor::ImGuiContextType type) noexcept
Definition: Editor.h:691
static bool removeComponent(const Editor &editor, const Selections &selections, const ComponentType newComponentType)
Definition: Editor.h:706
static ImGuiContext & getImGuiContext(Editor &editor, const Editor::ImGuiContextType type) noexcept
Definition: Editor.h:686
static void registerUnsavedSceneChanges(Editor &editor) noexcept
Definition: Editor.h:656
static void setTransformSettings(const Editor &editor, const TransformSettings &settings) noexcept
Definition: Editor.h:601
static bool hasUnsavedSceneChanges(const Editor &editor) noexcept
Definition: Editor.h:646
static void renderDrawList(Editor &editor, ImDrawData *pDrawData, const I64 windowGUID, const Rect< I32 > &targetViewport, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
Definition: Editor.h:395
static bool & optionWindowEnabled(Editor &editor) noexcept
Definition: Editor.h:571
static bool openProject(Editor &editor, const ProjectID &projectID) noexcept
Definition: Editor.h:591
static const ProjectIDs & getProjectList(Editor &editor) noexcept
Definition: Editor.h:586
static bool & sampleWindowEnabled(Editor &editor) noexcept
Definition: Editor.h:566
static const SceneEntries & getSceneList(const Editor &editor) noexcept
Definition: Editor.h:581
static bool memoryEditorEnabled(const Editor &editor) noexcept
Definition: Editor.h:561
static void toggleMemoryEditor(Editor &editor, const bool state) noexcept
Definition: Editor.h:556
static const CircularBuffer< SceneEntry, 10 > & getRecentSceneList(const Editor &editor) noexcept
Definition: Editor.h:576
static ImGuiStyleEnum getTheme(const Editor &editor) noexcept
Definition: Editor.h:531
static void setTheme(Editor &editor, const ImGuiStyleEnum newTheme) noexcept
Definition: Editor.h:536
static void externalTextEditorPath(Editor &editor, const ResourcePath &path)
Definition: Editor.h:546
static const ResourcePath & externalTextEditorPath(const Editor &editor) noexcept
Definition: Editor.h:541
static void setSelectedCamera(Editor &editor, Camera *camera) noexcept
Definition: Editor.h:505
static void saveNode(const Editor &editor, const SceneGraphNode *targetNode)
Definition: Editor.h:520
static Camera * getSelectedCamera(const Editor &editor) noexcept
Definition: Editor.h:510
static void lockSolutionExplorer(Editor &editor, const bool state) noexcept
Definition: Editor.h:515
static void getCommandBuffer(Editor &editor, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
Definition: Editor.h:738
static void postRender(Editor &editor, const RenderStage stage, const CameraSnapshot &cameraSnapshot, const RenderTargetID target, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
Definition: Editor.h:743
static void editorEnableGizmo(const Editor &editor, const bool state) noexcept
Definition: Editor.h:410
static void copyPlayerCamToEditorCam(Editor &editor) noexcept
Definition: Editor.h:415
static void setEditorCameraSpeed(Editor &editor, const vec3< F32 > &speed) noexcept
Definition: Editor.h:425
static FColour3 & nodePreviewBGColour(Editor &editor) noexcept
Definition: Editor.h:440
static bool editorEnabledGizmo(const Editor &editor) noexcept
Definition: Editor.h:405
static void simulationPaused(Editor &editor, const bool state) noexcept
Definition: Editor.h:435
static void editorStepQueue(Editor &editor, const U32 steps) noexcept
Definition: Editor.h:430
static void setEditorCamLookAt(Editor &editor, const vec3< F32 > &eye, const vec3< F32 > &fwd, const vec3< F32 > &up) noexcept
Definition: Editor.h:420
static void queueRemoveNode(Editor &editor, const I64 nodeGUID)
Definition: Editor.h:486
static BoundingSphere teleportToNode(const Editor &editor, Camera *camera, const SceneGraphNode *targetNode)
Definition: Editor.h:471
static void saveNode(const Editor &editor, const SceneGraphNode *targetNode)
Definition: Editor.h:476
static void setSelectedCamera(Editor &editor, Camera *camera) noexcept
Definition: Editor.h:451
static bool lockSolutionExplorer(const Editor &editor)
Definition: Editor.h:491
static bool isNodeInView(const Editor &editor, const SceneGraphNode &node)
Definition: Editor.h:496
static void loadNode(const Editor &editor, SceneGraphNode *targetNode)
Definition: Editor.h:481
static void editorEnableGizmo(const Editor &editor, const bool state) noexcept
Definition: Editor.h:466
static const Camera * getSelectedCamera(const Editor &editor) noexcept
Definition: Editor.h:456
static bool editorEnableGizmo(const Editor &editor) noexcept
Definition: Editor.h:461
void selectionChangeCallback(PlayerIndex idx, const vector< SceneGraphNode * > &nodes) const
Definition: Editor.cpp:1643
bool joystickAxisMoved(const Input::JoystickEvent &arg) noexcept override
Definition: Editor.cpp:2050
Handle< ShaderProgram > _infiniteGridProgram
Definition: Editor.h:352
void createFontTexture(F32 DPIScaleFactor)
Destroys the old font, if any, before loading the new one.
Definition: Editor.cpp:215
PipelineDescriptor _axisGizmoPipelineDesc
Definition: Editor.h:356
bool inEditMode() const noexcept
Definition: Editor.inl:41
size_t UndoStackSize() const noexcept
Definition: Editor.inl:66
DisplayWindow * _mainWindow
Definition: Editor.h:349
void showStatusMessage(const string &message, F32 durationMS, bool error) const
Definition: Editor.cpp:2659
void registerUndoEntry(const UndoEntry< T > &entry)
Definition: Editor.inl:62
void updateFocusState(ImVec2 mousePos)
Definition: Editor.cpp:1813
bool mouseButtonReleased(const Input::MouseButtonEvent &arg) override
Mouse button released: return true if input was consumed.
Definition: Editor.cpp:1999
const RenderTargetHandle & getNodePreviewTarget() const noexcept
Definition: Editor.inl:78
EditorOptionsWindow_uptr _optionsWindow
Definition: Editor.h:345
UndoManager_uptr _undoManager
Definition: Editor.h:346
static ImGuiViewport * FindViewportByPlatformHandle(ImGuiContext *context, const DisplayWindow *window)
Definition: Editor.cpp:1795
SceneGraphNode * _previewNode
Definition: Editor.h:337
bool mouseMoved(const Input::MouseMoveEvent &arg) override
Mouse moved: return true if input was consumed.
Definition: Editor.cpp:1861
bool onKeyDown(const Input::KeyEvent &key) override
Key pressed: return true if input was consumed.
Definition: Editor.cpp:1701
IMPrimitive * _axisGizmo
Definition: Editor.h:357
bool wantsKeyboard() const noexcept
Definition: Editor.cpp:2106
std::pair< bufferPtr, size_t > _memoryEditorData
Definition: Editor.h:362
eastl::fixed_vector< std::pair< I64, GenericVertexData_ptr >, 5, true > _imguiBuffers
Definition: Editor.h:360
RenderTargetHandle _nodePreviewRTHandle
Definition: Editor.h:382
bool addComponent(SceneGraphNode *selection, ComponentType newComponentType) const
Definition: Editor.cpp:2773
bool joystickButtonPressed(const Input::JoystickEvent &arg) noexcept override
Joystick or Gamepad: return true if input was consumed.
Definition: Editor.cpp:2040
bool joystickRemap(const Input::JoystickEvent &arg) noexcept override
Definition: Editor.cpp:2070
friend class Attorney::EditorOutputWindow
Definition: Editor.h:145
void onChangeScene(Scene *newScene)
Definition: Editor.cpp:2268
bool modalModelSpawn(Handle< Mesh > mesh, bool quick, const vec3< F32 > &scale=VECTOR3_UNIT, const vec3< F32 > &position=VECTOR3_ZERO)
Returns true if the model was queued.
Definition: Editor.cpp:2537
U32 stepQueue() const noexcept
Definition: Editor.inl:53
void onWindowSizeChange(const SizeChangeParams &params)
Definition: Editor.cpp:2151
bool isHovered() const
Definition: Editor.cpp:2127
bool init(const vec2< U16 > renderResolution)
Definition: Editor.cpp:274
bool modalTextureView(std::string_view modalName, Handle< Texture > tex, vec2< F32 > dimensions, bool preserveAspect, bool useModal) const
Returns true if the window was closed.
Definition: Editor.cpp:2289
std::array< ImGuiContext *, to_base(ImGuiContextType::COUNT)> _imguiContexts
Definition: Editor.h:363
void drawScreenOverlay(const Camera *camera, const Rect< I32 > &targetViewport, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut) const
Render any editor specific element that needs to be part of the scene (e.g. Control Gizmo)
Definition: Editor.cpp:1289
bool Redo() const
Definition: Editor.cpp:1685
bool saveToXML() const
Definition: Editor.cpp:2833
Gizmo_uptr _gizmo
Definition: Editor.h:347
void close()
Definition: Editor.cpp:817
bool mouseButtonPressed(const Input::MouseButtonEvent &arg) override
Mouse button pressed: return true if input was consumed.
Definition: Editor.cpp:1959
void renderModelSpawnModal()
Definition: Editor.cpp:2574
U32 _stepQueue
Definition: Editor.h:371
void renderDrawList(ImDrawData *pDrawData, I64 bufferGUID, const Rect< I32 > &targetViewport, bool editorPass, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
Definition: Editor.cpp:1433
LightPool & getActiveLightPool() const
Definition: Editor.cpp:2704
bool Undo() const
Definition: Editor.cpp:1670
bool joystickAddRemove(const Input::JoystickEvent &arg) noexcept override
Definition: Editor.cpp:2065
Time::ProfileTimer & _editorUpdateTimer
Definition: Editor.h:340
U32 saveItemCount() const noexcept
Definition: Editor.cpp:2273
StatusBar_uptr _statusBar
Definition: Editor.h:344
void postRender(RenderStage stage, const CameraSnapshot &cameraSnapshot, RenderTargetID target, GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
Definition: Editor.cpp:1236
bool spawnGeometry(Handle< Mesh > mesh, const vec3< F32 > &scale, const vec3< F32 > &position, const vec3< Angle::DEGREES< F32 > > &rotation, std::string_view name) const
Return true if the model was spawned as a scene node.
Definition: Editor.cpp:2666
bool isInit() const noexcept
Definition: Editor.inl:37
Pipeline * _editorPipeline
Definition: Editor.h:358
bool _simulationPaused
Definition: Editor.h:373
const ProjectIDs & getProjectList() const noexcept
Definition: Editor.cpp:2694
void infiniteGridScale(const F32 value) noexcept
Definition: Editor.cpp:1211
bool joystickBallMoved(const Input::JoystickEvent &arg) noexcept override
Definition: Editor.cpp:2060
void copyPlayerCamToEditorCam() noexcept
Definition: Editor.cpp:1653
ImGuiStyleEnum _currentTheme
Definition: Editor.h:374
void update(U64 deltaTimeUS)
Definition: Editor.cpp:991
bool _showMemoryEditor
Definition: Editor.h:377
void setTransformSettings(const TransformSettings &settings) const noexcept
Definition: Editor.inl:45
std::array< std::unique_ptr< DockedWindow >, to_base(WindowType::COUNT)> _dockedWindows
Definition: Editor.h:364
struct Divide::Editor::QueueModelSpawn _queuedModelSpawn
const TransformSettings & getTransformSettings() const noexcept
Definition: Editor.inl:49
IMPrimitive * _infiniteGridPrimitive
Definition: Editor.h:354
void toggle(bool state)
Definition: Editor.cpp:883
static std::array< Input::MouseButton, 5 > g_oisButtons
Definition: Editor.h:156
bool render()
Definition: Editor.cpp:1138
SamplerDescriptor _editorSampler
Definition: Editor.h:368
bool removeComponent(SceneGraphNode *selection, ComponentType newComponentType) const
Definition: Editor.cpp:2803
bool isNodeInView(const SceneGraphNode &node) const noexcept
Return true if the specified node passed frustum culling during the main render pass.
Definition: Editor.cpp:1217
CircularBuffer< SceneEntry, 10 > _recentSceneList
Definition: Editor.h:380
static std::array< const char *, 3 > g_supportedExportPlatforms
Definition: Editor.h:157
MenuBar_uptr _menuBar
Definition: Editor.h:343
void loadNode(SceneGraphNode *sgn) const
Definition: Editor.cpp:2755
size_t RedoStackSize() const noexcept
Definition: Editor.inl:70
void onRemoveComponent(const EditorComponent &comp) const
Definition: Editor.cpp:2720
bool onTextEvent(const Input::TextEvent &arg) override
Definition: Editor.cpp:2132
void updateEditorFocus()
Definition: Editor.cpp:865
bool wantsMouse() const
Definition: Editor.cpp:2085
bool wantsJoystick() const noexcept
Definition: Editor.cpp:2075
BoundingSphere teleportToNode(Camera *camera, const SceneGraphNode *sgn) const
Definition: Editor.cpp:2715
bool onKeyUp(const Input::KeyEvent &key) override
Key released: return true if input was consumed.
Definition: Editor.cpp:1739
void setEditorCamLookAt(const vec3< F32 > &eye, const vec3< F32 > &fwd, const vec3< F32 > &up)
Definition: Editor.cpp:1658
bool hasFocus() const
Definition: Editor.cpp:2122
bool _isScenePaused
Definition: Editor.h:378
void saveNode(const SceneGraphNode *sgn) const
Definition: Editor.cpp:2728
bool switchScene(const SceneEntry &scene, bool createIfNotExists=false)
Definition: Editor.cpp:2219
void toggleMemoryEditor(bool state) noexcept
Definition: Editor.inl:74
bool frameEnded(const FrameEvent &evt) noexcept override
frameEnded is called after the buffers have been swapped
Definition: Editor.cpp:1372
bool framePostRender(const FrameEvent &evt) override
Definition: Editor.cpp:1295
const SceneEntries & getSceneList() const noexcept
Definition: Editor.cpp:2699
ResourcePath _externalTextEditorPath
Definition: Editor.h:366
GenericVertexData * getOrCreateIMGUIBuffer(I64 bufferGUID, U32 maxVertices, GFX::MemoryBarrierCommand &memCmdInOut)
Definition: Editor.cpp:1394
bool _showSampleWindow
Definition: Editor.h:375
bool simulationPaused() const noexcept
Definition: Editor.inl:57
void getCommandBuffer(GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
Definition: Editor.cpp:1300
SceneEnvironmentProbePool * getActiveEnvProbePool() const noexcept
Definition: Editor.cpp:2710
bool joystickButtonReleased(const Input::JoystickEvent &arg) noexcept override
Definition: Editor.cpp:2045
void setEditorCameraSpeed(const vec3< F32 > &speed) noexcept
Definition: Editor.cpp:1665
bool _showOptionsWindow
Definition: Editor.h:376
bool saveSceneChanges(const DELEGATE< void, std::string_view > &msgCallback, const DELEGATE< void, bool > &finishCallback) const
Saves all new changes to the current scene and uses the provided callbacks to return progress message...
Definition: Editor.cpp:2200
void onResolutionChange(const SizeChangeParams &params)
Definition: Editor.cpp:2180
Handle< Texture > _fontTexture
Definition: Editor.h:350
bool joystickPovMoved(const Input::JoystickEvent &arg) noexcept override
Definition: Editor.cpp:2055
~Editor() override
Definition: Editor.cpp:204
Time::ProfileTimer & _editorRenderTimer
Definition: Editor.h:341
void queueRemoveNode(I64 nodeGUID)
Definition: Editor.cpp:2766
CameraSnapshot _render2DSnapshot
Definition: Editor.h:381
bool isDefaultScene() const noexcept
Definition: Editor.cpp:2283
bool openProject(const ProjectID &projectID)
Definition: Editor.cpp:2214
bool loadFromXML()
Definition: Editor.cpp:2881
void infiniteGridAxisWidth(const F32 value) noexcept
Definition: Editor.cpp:1205
string _lastOpenSceneName
Definition: Editor.h:370
PipelineDescriptor _infiniteGridPipelineDesc
Definition: Editor.h:355
Handle< ShaderProgram > _imguiProgram
Definition: Editor.h:351
F32 _queuedDPIValue
Definition: Editor.h:372
bool _gridSettingsDirty
Definition: Editor.h:379
friend class Attorney::EditorWindowManager
Definition: Editor.h:148
void idle() noexcept
Definition: Editor.cpp:210
Rect< I32 > scenePreviewRect(bool globalCoords) const noexcept
Definition: Editor.cpp:1382
IMPrimitive replaces immediate mode calls to VB based rendering.
Definition: IMPrimitive.h:58
PlatformContext & context() noexcept
Definition: PostFX.h:47
Definition: PostFXWindow.h:43
An API-independent representation of a texture.
Definition: Texture.h:83
ImGuiStyleEnum
@ ImGuiStyle_Count
@ ImGuiStyle_DarkCodz01
constexpr Optick::Category::Type Scene
Definition: Profiler.h:66
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
ImTextureID to_TexID(Handle< Texture > handle)
Definition: Editor.cpp:116
void InitBasicImGUIState(ImGuiIO &io) noexcept
Definition: Editor.cpp:128
DELEGATE_STD< Ret, Args... > DELEGATE
vector< SceneEntry > SceneEntries
Definition: Scene.h:116
PushConstantsStruct IMGUICallbackToPushConstants(const IMGUICallbackData &data, const bool isArrayTexture)
Definition: Editor.cpp:166
void PushReadOnly(const bool fade)
Definition: Editor.cpp:2961
int32_t I32
vector< ProjectID > ProjectIDs
uint8_t U8
eastl::vector< Type > vector
Definition: Vector.h:42
void PopReadOnly()
Definition: Editor.cpp:2971
static const vec3< F32 > VECTOR3_UNIT
Definition: MathVectors.h:1437
Handle< Texture > from_TexID(ImTextureID texID)
Definition: Editor.cpp:122
static const vec3< F32 > VECTOR3_ZERO
Definition: MathVectors.h:1434
U32 RenderTargetID
int64_t I64
uint32_t U32
Project const SceneEntry & entry
Definition: DefaultScene.h:41
uint64_t U64
constexpr auto to_base(const Type value) -> Type
vec2< F32 > _depthRange
Definition: Editor.h:124
Handle< Texture > _texture
Definition: Editor.h:122
GFX::CommandBuffer * _cmdBuffer
Definition: Editor.h:121
vec4< I32 > _colourData
Definition: Editor.h:123
Definition: Scene.h:112
ScopedReadOnly(bool fade=false)
Definition: Editor.h:770
Definition: UndoManager.h:51