Я переопределил 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
пользовательский интерфейс.
Как уменьшить нижнее поле текстуры, чтобы оно соответствовало 80 % высоты MyQQuickItem
. Я хочу рендерить текстуру для части MyQQuickItem
, а остальные оставить пустыми или черными? Возможно ли это в пределах updatePaintNode
.
Обратите внимание, что здесь размер текстуры не является размером окна пользовательского интерфейса. Размер моей текстуры 800 на 800. Принимая во внимание, что размер окна пользовательского интерфейса отличается и зависит от экрана.
QSGSimpleTextureNode
, приветствуются. - person TheWaterProgrammer   schedule 05.09.2017