<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><div class="">I’m trying to make a offscreen renderer for a quick scene and then display it’s output in the main and visible QQuickWindow scene.</div><div class=""><br class=""></div><div class="">The reason I’m trying to achieve this is because I need to intercept the frames to be able to send them to other programs or encode as a video file.</div><div class=""><br class=""></div><div class="">I’ve based myself on the rendercontrol example and I have a working offscreen renderer. Now, what I’m trying to do is to paint the result of the offscreen renderer into the main QQuickWindow.</div><div class=""><br class=""></div><div class="">What I’m doing is creating a new QQuickItem that paints a texture. When I declare this item in qml, I register it on the render control. Render control has it’s own render timing. Whenever render control paints, I tell the registered quick item to paint with the fbo texture.</div><div class=""><br class=""></div><div class="">The problem is that the only thing that is painted is black. I’m pretty sure the quick item is paint texture correctly because it works with images:</div><div class=""><br class=""></div><div class="">// render method</div><div class=""><br class=""></div><div class="">…</div><div class=""><br class=""></div><div class="">
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><!--StartFragment--><span style="color: rgb(188, 188, 0);" class="">if</span><span style="color: rgb(79, 79, 79);" class=""> </span>(_renderView)</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class="">{</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="color: rgb(79, 79, 79);" class="">    </span>_renderView->setImage(_fbo->toImage()); // this works</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class=""><span style="color: rgb(79, 79, 79);" class="">    </span>_renderView->setTexture(<span style=" font-style:italic;" class="">_quickWindow->createTextureFromId(_fbo->texture(),</span><span style="color: rgb(79, 79, 79);" class=""> </span><span style=" font-style:italic;" class="">_size)</span>); // this doesn’t work - only black is painted</pre>
<pre style="margin-top: 0px; margin-bottom: 0px;" class="">}</pre><div class=""><br class=""></div></div><div class="">… </div><div class=""><br class=""></div><div class="">I wonder if I’m stumbling on synchronisation issues. Maybe when its time for the main window to paint again, that texture is not valid anymore. </div><div class=""><br class=""></div><div class="">Performance is a key factor in this architecture. I need the fastest solution possible and it doesn’t seem that creating a QImage from a texture and then convert it to QSGTexture is the most performant solution possible.</div><div class=""><br class=""></div><div class="">Has anyone been here before? </div><div class=""><br class=""></div><div class="">Any advise on how to overcome this problem?</div><div class=""><br class=""></div><div class="">Thanks!</div><div class=""><br class=""></div><div class="">Best regards,</div><div class=""><br class=""></div><div class="">Nuno</div></body></html>