我已通过以下方式覆盖,以在此处调用的派生类updatePaintNode
上绘制 OpenGL 纹理。QQuickItem
MyQQuickItem
QSGNode *MyQQuickItem::updatePaintNode(QSGNode * oldNode, QQuickItem::UpdatePaintNodeData * /*updatePaintNodeData*/)
{
QSGSimpleTextureNode * textureNode = static_cast<QSGSimpleTextureNode *>(oldNode);
if (!textureNode) {
textureNode = new QSGSimpleTextureNode();
}
QSize size(800, 800);
// myTextureId is a GLuint here
textureNode.reset(window()->createTextureFromId(myTextureId, size));
textureNode->setTexture(my_texture);
textureNode->markDirty(QSGBasicGeometryNode::DirtyMaterial);
QSizeF myiewport = boundingRect().size();
qreal xOffset = 0;
qreal yOffset = 10;
textureNode->setRect(xOffset, yOffset, myViewport.width(), myViewport.height());
return textureNode;
}
这可以很好地呈现纹理内容,但涵盖了我的整个MyQQuickItem
UI。
如何减少纹理的底部边距以适应 80% 的高度MyQQuickItem
。我想将纹理渲染到一部分 MyQQuickItem
并将其余部分留空或黑色?内有可能吗updatePaintNode
。
注意这里的纹理大小不是UI窗口大小。我的纹理大小是800 x 800。而 UI 窗口大小不同,取决于屏幕。