Saya telah mengganti updatePaintNode
dengan cara berikut untuk menggambar tekstur OpenGL pada kelas turunan QQuickItem
yang disebut MyQQuickItem
di sini.
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;
}
Ini merender konten tekstur dengan baik tetapi mencakup keseluruhan MyQQuickItem
UI saya.
Bagaimana cara mengurangi margin bawah tekstur hingga sesuai 80% dari tinggi dari MyQQuickItem
. Saya ingin merender tekstur ke sebagian MyQQuickItem
& membiarkan sisanya kosong atau hitam? Apakah itu mungkin dalam updatePaintNode
.
Perhatikan bahwa ukuran tekstur bukanlah ukuran jendela UI di sini. Ukuran tekstur saya adalah 800 kali 800. Sedangkan ukuran jendela UI berbeda-beda dan bergantung pada layar.
QSGSimpleTextureNode
ini, dipersilakan. - person TheWaterProgrammer   schedule 05.09.2017