[Interest] Porting Qt5 OpenGL app to Qt6 - QQuickRenderTarget and OpenGL frame buffer object

Laszlo Agocs laszlo.agocs at qt.io
Wed May 15 16:46:26 CEST 2024


Hi Nuno,

You can always create an FBO on the fly for the purposes of the readback.

For example, something along the lines of:

glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
glReadPixels(...);
glBindFramebuffer(GL_FRAMEBUFFER, context->defaultFramebufferObject());
glDeleteFramebuffers(1, &fbo);

Best regards,
Laszlo

________________________________
From: Nuno Santos <nuno.santos at imaginando.pt>
Sent: Wednesday, May 15, 2024 4:29 PM
To: Laszlo Agocs <laszlo.agocs at qt.io>
Cc: interestqt-project. org <interest at qt-project.org>
Subject: Re: [Interest] Porting Qt5 OpenGL app to Qt6 - QQuickRenderTarget and OpenGL frame buffer object

Laszlo,

I have a new problem regarding this question.

I have a QQuickRenderControl in order to do a side render and be able to extract the render output. I was reading from the FBO using the glReadPixels function.

But now the render target is a OpenGL Texture but apparently the function that reads from a GLTexture is glGetTexImage but that function is not on the qopenglfunctions.

How can I read the texture now?

Thanks!

Best regards,

Nuno

On 8 May 2024, at 16:41, Laszlo Agocs <laszlo.agocs at qt.io> wrote:

Hi,

Passing 0 as a renderbuffer object name is not going to work. Try using https://doc.qt.io/qt-6/qquickrendertarget.html#fromOpenGLTexture with the texture that is used as the color attachment of your OpenGL framebuffer object. (actually that FBO is not useful in Qt 6 as one will be created internally as needed)

Best regards,
Laszlo

________________________________
From: Interest <interest-bounces at qt-project.org> on behalf of Nuno Santos via Interest <interest at qt-project.org>
Sent: Tuesday, April 16, 2024 4:21 PM
To: interestqt-project. org <interest at qt-project.org>
Subject: [Interest] Porting Qt5 OpenGL app to Qt6 - QQuickRenderTarget and OpenGL frame buffer object

Hi,

I have an application that was heavily written on top of OpenGL. Right now I want to port it to Qt 6 with the minimum effort trying to stick to the OpenGL backend until I get the grip on the new things of Qt 6 Graphics API abstraction.

I used to do this in order to assign a target FBO to a QuickWindow:

_quickWindow->setRenderTarget(_fboRender);

This is no longer possible and it requires a QQuickRenderTarget to be created and I seem to have three options:

(since 6.2) QQuickRenderTarget  fromOpenGLRenderBuffer(uint renderbufferId, const QSize &pixelSize, int sampleCount = 1)
(since 6.4) QQuickRenderTarget  fromOpenGLTexture(uint textureId, uint format, const QSize &pixelSize, int sampleCount = 1)
QQuickRenderTarget      fromOpenGLTexture(uint textureId, const QSize &pixelSize, int sampleCount = 1)

I’m trying this:

_renderTarget = QQuickRenderTarget::fromOpenGLRenderBuffer(0, QSize(_renderResolution.width(), _renderResolution.height()));
_quickWindow->setRenderTarget(_renderTarget);

But nothing appears on the screen and I get a warning:

QQuickWindow: No render target (neither swapchain nor custom target was provided)

Can anyone tell me what am I failing here?

Any ideas suggestions are very welcome.

With my best regards,

Nuno
_______________________________________________
Interest mailing list
Interest at qt-project.org<mailto:Interest at qt-project.org>
https://lists.qt-project.org/listinfo/interest

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20240515/de5557ad/attachment.htm>


More information about the Interest mailing list