diff --git a/src/quick/scenegraph/qsgcontext.cpp b/src/quick/scenegraph/qsgcontext.cpp
index 829d33a0d78c5bd80ab9072c3c260f59fb03fbb8..f9bc615f5c42b638647fa954c66bb32ee1a2b316 100644
--- a/src/quick/scenegraph/qsgcontext.cpp
+++ b/src/quick/scenegraph/qsgcontext.cpp
@@ -174,6 +174,11 @@ QSGContext::~QSGContext()
 {
 }
 
+QSGRenderContext *QSGContext::createRenderContext()
+{
+    return new QSGRenderContext(this);
+}
+
 /*!
  * This function is used by the Qt WebEngine to set up context sharing
  * across multiple windows. Do not use it for any other purpose.
diff --git a/src/quick/scenegraph/qsgcontext_p.h b/src/quick/scenegraph/qsgcontext_p.h
index c1bf78a01891ba5438e07ef4e0030891212a876e..8378fe99b638ff0e6d26a288fbc2475dc233e7fc 100644
--- a/src/quick/scenegraph/qsgcontext_p.h
+++ b/src/quick/scenegraph/qsgcontext_p.h
@@ -155,6 +155,7 @@ public:
 
     virtual void renderContextInitialized(QSGRenderContext *renderContext);
     virtual void renderContextInvalidated(QSGRenderContext *renderContext);
+    virtual QSGRenderContext *createRenderContext();
 
     virtual QSGRectangleNode *createRectangleNode();
     virtual QSGImageNode *createImageNode();
diff --git a/src/quick/scenegraph/qsgrenderloop.cpp b/src/quick/scenegraph/qsgrenderloop.cpp
index 219f877bec92b39f72c9e53bf9a05e2cbaefc5c3..f0ac725f22681c9500ee5469b6133fe54298ad10 100644
--- a/src/quick/scenegraph/qsgrenderloop.cpp
+++ b/src/quick/scenegraph/qsgrenderloop.cpp
@@ -213,7 +213,7 @@ QSGGuiThreadRenderLoop::QSGGuiThreadRenderLoop()
     , eventPending(false)
 {
     sg = QSGContext::createDefaultContext();
-    rc = new QSGRenderContext(sg);
+    rc = sg->createRenderContext();
 }
 
 QSGGuiThreadRenderLoop::~QSGGuiThreadRenderLoop()
diff --git a/src/quick/scenegraph/qsgthreadedrenderloop.cpp b/src/quick/scenegraph/qsgthreadedrenderloop.cpp
index d8fe9471222ff8f56a8d5941f802a818561ea1f5..207a4915e1532928c820b654a881aab5a9c90d3f 100644
--- a/src/quick/scenegraph/qsgthreadedrenderloop.cpp
+++ b/src/quick/scenegraph/qsgthreadedrenderloop.cpp
@@ -709,7 +709,7 @@ QSGThreadedRenderLoop::QSGThreadedRenderLoop()
 
 QSGRenderContext *QSGThreadedRenderLoop::createRenderContext(QSGContext *sg) const
 {
-    return new QSGRenderContext(sg);
+    return sg->createRenderContext();
 }
 
 void QSGThreadedRenderLoop::maybePostPolishRequest(Window *w)
diff --git a/src/quick/scenegraph/qsgwindowsrenderloop.cpp b/src/quick/scenegraph/qsgwindowsrenderloop.cpp
index 5d9583cafbc8c7259f3b4da1e15fcc211f3c8f5c..6a6a6ab5704baa5371ebaab7bbd25ae5df429491 100644
--- a/src/quick/scenegraph/qsgwindowsrenderloop.cpp
+++ b/src/quick/scenegraph/qsgwindowsrenderloop.cpp
@@ -85,7 +85,7 @@ QSGWindowsRenderLoop::QSGWindowsRenderLoop()
     qsg_debug_timer.start();
 #endif
 
-    m_rc = new QSGRenderContext(m_sg);
+    m_rc = m_sg->createRenderContext();
 
     m_animationDriver = m_sg->createAnimationDriver(m_sg);
     m_animationDriver->install();