【发布时间】:2020-06-18 13:55:41
【问题描述】:
我正在尝试使用此问题中给出的方法捕获 qml 绘图缓冲区:Capture QML drawing buffer, without displaying
想法是在渲染之前使用连接到 beforeRendering() QQuickWindow 信号的以下插槽更改渲染目标:
void GrabWindow::beforeRendering()
{
如果(!fbo_)
{
fbo_.reset(new QOpenGLFramebufferObject(size(), QOpenGLFramebufferObject::NoAttachment));
setRenderTarget(fbo_.data());
}
}
渲染完成到一个帧缓冲对象中,这个对象用于获取图像
问题
在运行此解决方案时,有时我的原始 QQuickView 和我的 QOpenGLFramebufferObject 之间会出现不同的渲染。
例如,我有以下 main.qml :
import QtQuick 2.12
Item {
id:root
visible: true
width: 640
height: 480
Rectangle {
width: parent.width
height: parent.height
color: "gray"
}
Text {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
text: "Test Text"
font.underline: true
font.pixelSize: 24
}
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
width: 200
height: 200
border.width: 5
color: "transparent"
border.color: "black"
}
}
当我将此 qml main 直接渲染到 QQuickView 中时,我得到了以下预期结果:
当我将此 qml main 渲染到自定义 QOpenGLFramebufferObject 中时,我得到以下结果:
黑色矩形消失,文本不再有下划线。
如果我将根矩形颜色设置为透明,问题似乎就解决了。 看起来根矩形隐藏了一些对象。
这两种渲染方式之间有什么区别可以解释这个问题吗?
【问题讨论】: