diff --git a/src/imports/qtcanvas3d/canvas3d.cpp b/src/imports/qtcanvas3d/canvas3d.cpp
index f1f62138e59d1e8645108cc80abb37de4cdc8d32..bd1ff562e98fc6f44f50f031e1960026afa52131 100644
--- a/src/imports/qtcanvas3d/canvas3d.cpp
+++ b/src/imports/qtcanvas3d/canvas3d.cpp
@@ -345,6 +345,14 @@ QJSValue Canvas::getContext(const QString &type, const QVariantMap &options)
 
         // Set the size and create FBOs
         setPixelSize(m_initializedSize);
+        m_displayFbo->bind();
+        glViewport(0, 0,
+                   m_fboSize.width(),
+                   m_fboSize.height());
+        m_renderFbo->bind();
+        glViewport(0, 0,
+                   m_fboSize.width(),
+                   m_fboSize.height());
 
         // Create the Context3D
         m_context3D = new CanvasContext(m_glContext, m_offscreenSurface,
@@ -459,16 +467,11 @@ void Canvas::createFBOs()
                                                 m_fboFormat);
 
     // Clear the FBOs to prevent random junk appearing on the screen
+    // Note: Viewport may not be changed automatically
     glClearColor(0,0,0,0);
     m_displayFbo->bind();
-    glViewport(0, 0,
-               m_fboSize.width(),
-               m_fboSize.height());
     glClear(GL_COLOR_BUFFER_BIT);
     m_renderFbo->bind();
-    glViewport(0, 0,
-               m_fboSize.width(),
-               m_fboSize.height());
     glClear(GL_COLOR_BUFFER_BIT);
 
     qCDebug(canvas3drendering).nospace() << "Canvas3D::" << __FUNCTION__