@@ -83,42 +83,44 @@ void Viewport::init() {
8383 m_rhiWindow->installEventFilter (this );
8484 layout ()->addWidget (QWidget::createWindowContainer (m_rhiWindow));
8585
86- PipelineContext *pipelineContext = m_renderSystem->pipelineContext ();
87- m_guiLayer = pipelineContext->renderTasks ().back ();
86+ PipelineContext *ctx = m_renderSystem->pipelineContext ();
87+ if (!ctx->renderTasks ().empty ()) {
88+ m_guiLayer = ctx->renderTasks ().back ();
8889
89- m_color = pipelineContext ->resultTexture ();
90- m_color->setFlags (m_color->flags () | Texture::Feedback);
90+ m_color = ctx ->resultTexture ();
91+ m_color->setFlags (m_color->flags () | Texture::Feedback);
9192
92- m_debugRender = new DebugRender;
93+ m_debugRender = new DebugRender;
9394
94- if (!m_gameView) {
95- m_gridRender = new GridRender;
96- m_gridRender->setController (m_controller);
97- m_gridRender->setInput (0 , m_guiLayer->output (0 ));
98- m_gridRender->setInput (1 , pipelineContext ->textureBuffer (" depthMap" ));
95+ if (!m_gameView) {
96+ m_gridRender = new GridRender;
97+ m_gridRender->setController (m_controller);
98+ m_gridRender->setInput (0 , m_guiLayer->output (0 ));
99+ m_gridRender->setInput (1 , ctx ->textureBuffer (" depthMap" ));
99100
100- m_outlinePass = new Outline;
101- m_outlinePass->setController (m_controller);
102- m_outlinePass->setInput (0 , m_guiLayer->output (0 ));
101+ m_outlinePass = new Outline;
102+ m_outlinePass->setController (m_controller);
103+ m_outlinePass->setInput (0 , m_guiLayer->output (0 ));
103104
104- m_gizmoRender = new GizmoRender;
105- m_gizmoRender->setController (m_controller);
106- m_gizmoRender->setInput (0 , m_guiLayer->output (0 ));
107- m_gizmoRender->setInput (1 , pipelineContext ->textureBuffer (" depthMap" ));
105+ m_gizmoRender = new GizmoRender;
106+ m_gizmoRender->setController (m_controller);
107+ m_gizmoRender->setInput (0 , m_guiLayer->output (0 ));
108+ m_gizmoRender->setInput (1 , ctx ->textureBuffer (" depthMap" ));
108109
109- if (m_controller) {
110- m_controller->init (this );
111- }
110+ if (m_controller) {
111+ m_controller->init (this );
112+ }
112113
113- pipelineContext ->insertRenderTask (m_gridRender, m_guiLayer);
114- pipelineContext ->insertRenderTask (m_outlinePass, m_guiLayer);
115- pipelineContext ->insertRenderTask (m_gizmoRender);
114+ ctx ->insertRenderTask (m_gridRender, m_guiLayer);
115+ ctx ->insertRenderTask (m_outlinePass, m_guiLayer);
116+ ctx ->insertRenderTask (m_gizmoRender);
116117
117- Handles::init ();
118- }
118+ Handles::init ();
119+ }
119120
120- pipelineContext->insertRenderTask (m_debugRender, m_guiLayer);
121- pipelineContext->subscribePost (Viewport::readPixels, this );
121+ ctx->insertRenderTask (m_debugRender, m_guiLayer);
122+ ctx->subscribePost (Viewport::readPixels, this );
123+ }
122124 }
123125}
124126
@@ -279,33 +281,45 @@ void Viewport::setGameView(bool enabled) {
279281}
280282
281283void Viewport::setGridEnabled (bool enabled) {
282- m_gridRender->setEnabled (enabled);
284+ if (m_gridRender) {
285+ m_gridRender->setEnabled (enabled);
286+ }
283287}
284288void Viewport::setGizmoEnabled (bool enabled) {
285- m_gizmoRender->setEnabled (enabled);
289+ if (m_gizmoRender) {
290+ m_gizmoRender->setEnabled (enabled);
291+ }
286292}
287293void Viewport::setOutlineEnabled (bool enabled) {
288- m_outlinePass->setEnabled (enabled);
294+ if (m_outlinePass) {
295+ m_outlinePass->setEnabled (enabled);
296+ }
289297}
290298void Viewport::setGuiEnabled (bool enabled) {
291- m_guiLayer->setEnabled (enabled);
299+ if (m_guiLayer) {
300+ m_guiLayer->setEnabled (enabled);
301+ }
292302}
293303
294304void Viewport::showCube (bool enabled) {
295- m_gizmoRender->showCube (enabled);
305+ if (m_gizmoRender) {
306+ m_gizmoRender->showCube (enabled);
307+ }
296308}
297309
298310void Viewport::showGizmos (bool enabled) {
299- m_gizmoRender->showGizmos (enabled);
311+ if (m_gizmoRender) {
312+ m_gizmoRender->showGizmos (enabled);
313+ }
300314}
301315
302316void Viewport::onInProgressFlag (bool flag) {
303317 m_frameInProgress = flag;
304318}
305319
306320void Viewport::addRenderTask (PipelineTask *task) {
307- PipelineContext *pipelineContext = m_renderSystem->pipelineContext ();
308- pipelineContext ->insertRenderTask (task, pipelineContext ->renderTasks ().front ());
321+ PipelineContext *ctx = m_renderSystem->pipelineContext ();
322+ ctx ->insertRenderTask (task, ctx-> renderTasks (). empty () ? nullptr : ctx ->renderTasks ().front ());
309323}
310324
311325void Viewport::readPixels (void *object) {
0 commit comments