本文整理汇总了C++中QSGGeometryNode类的典型用法代码示例。如果您正苦于以下问题:C++ QSGGeometryNode类的具体用法?C++ QSGGeometryNode怎么用?C++ QSGGeometryNode使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了QSGGeometryNode类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Q_ASSERT_X
void QSGNode::insertChildNodeBefore(QSGNode *node, QSGNode *before)
{
//Q_ASSERT_X(!m_children.contains(node), "QSGNode::insertChildNodeBefore", "QSGNode is already a child!");
Q_ASSERT_X(!node->m_parent, "QSGNode::insertChildNodeBefore", "QSGNode already has a parent");
Q_ASSERT_X(before && before->m_parent == this, "QSGNode::insertChildNodeBefore", "The parent of \'before\' is wrong");
#ifndef QT_NO_DEBUG
if (node->type() == QSGNode::GeometryNodeType) {
QSGGeometryNode *g = static_cast<QSGGeometryNode *>(node);
Q_ASSERT_X(g->material(), "QSGNode::insertChildNodeBefore", "QSGGeometryNode is missing material");
Q_ASSERT_X(g->geometry(), "QSGNode::insertChildNodeBefore", "QSGGeometryNode is missing geometry");
}
#endif
QSGNode *previous = before->m_previousSibling;
if (previous)
previous->m_nextSibling = node;
else
m_firstChild = node;
node->m_previousSibling = previous;
node->m_nextSibling = before;
before->m_previousSibling = node;
node->m_parent = this;
node->markDirty(DirtyNodeAdded);
}
示例2: QSGGeometryNode
QSGNode* TriangleElement::updatePaintNode(QSGNode* n, UpdatePaintNodeData*) {
if (n == NULL) {
n = new QSGNode;
}
QSGGeometryNode* geomnode = new QSGGeometryNode();
QSGGeometry::Point2D* v = m_Geometry.vertexDataAsPoint2D();
const QRectF rect = boundingRect();
if (m_IsFlipped) {
v[0].x = rect.left();
v[0].y = rect.top();
v[1].x = rect.left() + rect.width()/2;
v[1].y = rect.bottom();
v[2].x = rect.right();
v[2].y = rect.top();
} else {
v[0].x = rect.left();
v[0].y = rect.bottom();
v[1].x = rect.left() + rect.width()/2;
v[1].y = rect.top();
v[2].x = rect.right();
v[2].y = rect.bottom();
}
geomnode->setGeometry(&m_Geometry);
geomnode->setMaterial(&m_Material);
n->appendChildNode(geomnode);
return n;
}
示例3: compareSelectionNode
void compareSelectionNode(QSGNode *node, const QRectF &rect, int selectionId)
{
QSGGeometryNode *geometryNode = static_cast<QSGGeometryNode *>(node);
QSGGeometry *geometry = geometryNode->geometry();
QCOMPARE(geometry->vertexCount(), 4);
QCOMPARE(geometry->drawingMode(), (GLenum)GL_TRIANGLE_STRIP);
OpaqueColoredPoint2DWithSize *data =
static_cast<OpaqueColoredPoint2DWithSize *>(geometry->vertexData());
float *lowerLeft = reinterpret_cast<float *>(data);
float *lowerRight = reinterpret_cast<float *>(++data);
float *upperLeft = reinterpret_cast<float *>(++data);
float *upperRight = reinterpret_cast<float *>(++data);
QCOMPARE(QRectF(QPointF(upperLeft[0], upperLeft[1]), QPointF(lowerRight[0], lowerRight[1])),
rect);
QCOMPARE(lowerRight[0], upperRight[0]);
QCOMPARE(lowerRight[1], lowerLeft[1]);
QCOMPARE(upperLeft[0], lowerLeft[0]);
QCOMPARE(upperLeft[1], upperRight[1]);
QCOMPARE(int(lowerLeft[4]), selectionId);
QCOMPARE(int(lowerRight[4]), selectionId);
QCOMPARE(int(upperLeft[4]), selectionId);
QCOMPARE(int(upperRight[4]), selectionId);
TimelineItemsMaterial *material = static_cast<TimelineItemsMaterial *>(
geometryNode->material());
QVERIFY(!(material->flags() & QSGMaterial::Blending));
}
示例4:
QSGGeometryNode *TimelineNotesRenderPassState::createNode()
{
QSGGeometryNode *node = new QSGGeometryNode;
node->setGeometry(&m_nullGeometry);
node->setMaterial(&m_material);
node->setFlag(QSGNode::OwnedByParent, false);
return node;
}
示例5: QSGGeometry
void BindlingLoopsGeometry::allocate(QSGMaterial *material)
{
QSGGeometry *geometry = new QSGGeometry(BindlingLoopsGeometry::point2DWithOffset(),
usedVertices);
geometry->setIndexDataPattern(QSGGeometry::StaticPattern);
geometry->setVertexDataPattern(QSGGeometry::StaticPattern);
node = new QSGGeometryNode;
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry, true);
node->setMaterial(material);
allocatedVertices = usedVertices;
usedVertices = 0;
}
示例6: Q_UNUSED
QSGNode * QQuickLineItem::updatePaintNode(QSGNode *prev_node,
UpdatePaintNodeData *upd_data)
{
Q_UNUSED(upd_data);
QSGGeometryNode * node = static_cast<QSGGeometryNode*>(prev_node);
QSGGeometry * geometry = NULL;
QSGFlatColorMaterial * material = NULL;
if(!node) {
// http://qt-project.org/doc/qt-5/qsggeometrynode.html
node = new QSGGeometryNode;
geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(),4);
geometry->setDrawingMode(GL_TRIANGLE_STRIP);
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
material = new QSGFlatColorMaterial;
material->setColor(m_color);
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
}
else {
geometry = node->geometry();
geometry->allocate(4); // we have to call allocate to invalidate
// the older vertex buffer
material = static_cast<QSGFlatColorMaterial*>(node->material());
}
// geometry
std::vector<QPointF> list_vx;
if(!calcTriStrip(list_vx)) {
list_vx.clear();
list_vx.push_back(QPointF(0,0));
list_vx.push_back(QPointF(0,0));
list_vx.push_back(QPointF(0,0));
list_vx.push_back(QPointF(0,0));
}
QSGGeometry::Point2D * vertices =
geometry->vertexDataAsPoint2D();
for(size_t i=0; i < list_vx.size(); i++) {
vertices[i].set(list_vx[i].x(),
list_vx[i].y());
}
node->markDirty(QSGNode::DirtyGeometry);
// material
material->setColor(m_color);
node->markDirty(QSGNode::DirtyMaterial);
return node;
}
示例7: QSGGeometry
QSGNode *PhosphorRender::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
if (!m_ybuffer) {
return 0;
}
QSGGeometryNode *node = 0;
QSGGeometry *geometry = 0;
Material *material = 0;
unsigned n_points;
if (m_xbuffer) {
n_points = std::min(m_xbuffer->size(), m_ybuffer->size());
} else {
n_points = m_ybuffer->countPointsBetween(m_xmin, m_xmax);
}
n_points = std::min(n_points,(unsigned) 65767);
if (!oldNode) {
node = new QSGGeometryNode;
geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), n_points);
geometry->setDrawingMode(GL_POINTS);
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
material = new Material;
material->setFlag(QSGMaterial::Blending);
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
} else {
node = static_cast<QSGGeometryNode *>(oldNode);
geometry = node->geometry();
geometry->allocate(n_points);
geometry->setLineWidth(m_pointSize);
material = static_cast<Material*>(node->material());
}
QRectF bounds = boundingRect();
material->transformation.setToIdentity();
material->transformation.scale(bounds.width()/(m_xmax - m_xmin), bounds.height()/(m_ymin - m_ymax));
material->transformation.translate(-m_xmin, -m_ymax);
material->pointSize = m_pointSize;
material->color = m_color;
auto verticies = geometry->vertexDataAsPoint2D();
if (m_xbuffer) {
for (unsigned i=0; i<n_points; i++) {
verticies[i].set(m_xbuffer->get(i), m_ybuffer->get(i));
}
} else {
m_ybuffer->toVertexData(m_xmin, m_xmax, verticies, n_points);
}
node->markDirty(QSGNode::DirtyGeometry | QSGNode::DirtyMaterial);
return node;
}
示例8: boundingRect
QSGNode *Canvas::updatePaintNode(QSGNode *n, UpdatePaintNodeData *d)
{
QSGGeometryNode *node = static_cast<QSGGeometryNode*>(n);
if (!node) node = new QSGGeometryNode();
QSGGeometry::Point2D *v = m_Geometry.vertexDataAsPoint2D();
const QRectF rect = boundingRect();
v[0].x = rect.left();
v[0].y = rect.bottom();
v[1].x = rect.right();
v[1].y = rect.bottom();
v[2].x = rect.left();
v[2].y = rect.top();
v[3].x = rect.right();
v[3].y = rect.top();
node->setGeometry(&m_Geometry);
node->setMaterial(&m_Material);
return node;
}
示例9: QSGGeometry
void SceneGraphDeviceContext::DrawPolygon(int n, vrv::Point points[], int xoffset, int yoffset, int)
{
// Note: No support for vertex antialiasing. Use a top-level QQuickView with multisample antialiasing.
// TODO: Add vertex antialiasing, refer to
// 1) Qt sources for "void QSGBasicInternalRectangleNode::updateGeometry()" in
// qtdeclarative/src/quick/scenegraph/qsgbasicinternalrectanglenode.cpp
// 2) https://stackoverflow.com/questions/28125425/smooth-painting-in-custom-qml-element
// TODO: This function only works for convex polygons. At the moment verovio calls this function only with n = 4.
// Maybe this function should be renamed to DrawConvexPolygon
vrv::Pen currentPen = m_penStack.top();
QSGGeometry *geometry;
geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), n);
geometry->setDrawingMode(QSGGeometry::DrawTriangleStrip);
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(static_cast<QRgb>(currentPen.GetColour()));
// Reorder points so that they can be drawn with DrawTriangleStrip.
int counter1 = 0;
int counter2 = n - 1;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
geometry->vertexDataAsPoint2D()[i].set(
translateX(points[counter1].x + xoffset), translateY(points[counter1].y + yoffset));
counter1++;
}
else {
geometry->vertexDataAsPoint2D()[i].set(
translateX(points[counter2].x + xoffset), translateY(points[counter2].y + yoffset));
counter2--;
}
}
QSGGeometryNode *node = new QSGGeometryNode;
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
AddGeometryNode(node);
}
示例10: QSGNODE_TRAVERSE
void Renderer::updateOpacities(QSGNode *node, qreal inheritedOpacity)
{
if (node->isSubtreeBlocked())
return;
if (node->type() == QSGNode::OpacityNodeType) {
QSGOpacityNode *on = static_cast<QSGOpacityNode *>(node);
qreal combined = inheritedOpacity * on->opacity();
on->setCombinedOpacity(combined);
QSGNODE_TRAVERSE(node)
updateOpacities(child, combined);
} else {
if (node->type() == QSGNode::GeometryNodeType) {
QSGGeometryNode *gn = static_cast<QSGGeometryNode *>(node);
gn->setInheritedOpacity(inheritedOpacity);
}
QSGNODE_TRAVERSE(node)
updateOpacities(child, inheritedOpacity);
}
}
示例11: QSGGeometry
/*------------------------------------------------------------------------------
| OMX_CameraSurfaceElement::updatePaintNode
+-----------------------------------------------------------------------------*/
QSGNode* OMX_CameraSurfaceElement::updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData*)
{
QSGGeometryNode* node = 0;
QSGGeometry* geometry = 0;
if (!oldNode) {
// Create the node.
node = new QSGGeometryNode;
geometry = new QSGGeometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4);
geometry->setDrawingMode(GL_TRIANGLE_STRIP);
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
// TODO: Who is freeing this?
// TODO: I cannot know the texture size here.
QSGOpaqueTextureMaterial* material = new QSGOpaqueTextureMaterial;
m_sgtexture = new OMX_SGTexture(0, QSize(640, 480));
material->setTexture(m_sgtexture);
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
QtConcurrent::run(this, &OMX_CameraSurfaceElement::videoAcquire);
}
else {
node = static_cast<QSGGeometryNode*>(oldNode);
geometry = node->geometry();
geometry->allocate(4);
// Update texture in the node if needed.
QSGOpaqueTextureMaterial* material = (QSGOpaqueTextureMaterial*)node->material();
QElapsedTimer timer;
timer.start();
QSGTexture* texture = window()->createTextureFromImage(m_frame);
LOG_VERBOSE(LOG_TAG, "Timer tex: %lld.", timer.elapsed());
material->setTexture(texture);
m_semAcquire.release();
#if 0
if (m_texture != (GLuint)material->texture()->textureId()) {
// TODO: Does setTextureId frees the prev texture?
// TODO: I should the given the texture size.
LOG_ERROR(LOG_TAG, "Updating texture to %u!", m_texture);
material = new QSGOpaqueTextureMaterial;
m_sgtexture->setTexture(m_texture, QSize(1920, 1080));
}
#endif
}
// Create the vertices and map to texture.
QRectF bounds = boundingRect();
QSGGeometry::TexturedPoint2D* vertices = geometry->vertexDataAsTexturedPoint2D();
vertices[0].set(bounds.x(), bounds.y() + bounds.height(), 0.0f, 0.0f);
vertices[1].set(bounds.x() + bounds.width(), bounds.y() + bounds.height(), 1.0f, 0.0f);
vertices[2].set(bounds.x(), bounds.y(), 0.0f, 1.0f);
vertices[3].set(bounds.x() + bounds.width(), bounds.y(), 1.0f, 1.0f);
return node;
}
示例12: QSGGeometryNode
void PEQGraph::_drawHumpOutline(QSGNode * parentNode, int n, QColor color) {
//Solid Outline
QSGGeometryNode * lineNode = new QSGGeometryNode();
QSGGeometry * lineGeom = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), (HorizontalDivisions));
QSGFlatColorMaterial *material2 = new QSGFlatColorMaterial;
material2->setColor(color);
material2->setFlag(QSGMaterial::Blending);
lineNode->setMaterial(material2);
lineNode->setFlag(QSGNode::OwnsGeometry);
lineNode->setFlag(QSGNode::OwnedByParent);
lineNode->setFlag(QSGNode::OwnsMaterial);
lineGeom->setDrawingMode(GL_LINE_STRIP);
glLineWidth(2.0f);
QSGGeometry::Point2D* point2 = lineGeom->vertexDataAsPoint2D();
float left = graphToNodeX(xAxis.min);
float width = graphToNodeX(xAxis.max) - graphToNodeX(xAxis.min);
float stride = width / HorizontalDivisions;
for (int i = 0; i < HorizontalDivisions; i++) {
float x1 = left + (i)*stride;
float y1 = graphToNodeY(computedData[i][n]);
point2->set(x1, y1);
point2++;
}
lineNode->setGeometry(lineGeom);
parentNode->appendChildNode(lineNode);
}
示例13: QSGGeometry
QSGNode *QPScrollingCurve::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *)
{
QSGGeometryNode *node = 0;
QSGGeometry *geometry = 0;
QSGFlatColorMaterial *material = 0;
if (!oldNode) {
node = new QSGGeometryNode;
geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), m_data.size());
geometry->setLineWidth(2);
geometry->setDrawingMode(GL_LINE_STRIP);
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
material = new QSGFlatColorMaterial;
material->setColor(m_color);
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
node->markDirty(QSGNode::DirtyMaterial);
} else {
node = static_cast<QSGGeometryNode *>(oldNode);
geometry = node->geometry();
geometry->allocate(m_data.size());
material = static_cast<QSGFlatColorMaterial*>(node->material());
if (material->color() != m_color) {
material->setColor(m_color);
node->markDirty(QSGNode::DirtyMaterial);
}
}
QSGGeometry::Point2D *vertices = geometry->vertexDataAsPoint2D();
for (uint i = 0; i < m_data.size(); ++i) {
QPointF p(i, m_data[i]);
vertices[i].set(p.x(), p.y());
}
node->markDirty(QSGNode::DirtyGeometry);
return node;
}
示例14: boundingRect
QSGNode *Circle::updatePaintNode(QSGNode *n, UpdatePaintNodeData *d)
{
QSGGeometryNode *node = static_cast<QSGGeometryNode*>(n);
if (!node) node = new QSGGeometryNode();
QSGGeometry::Point2D *v = m_Geometry.vertexDataAsPoint2D();
const QRectF rect = boundingRect();
QPointF center = rect.center();
float radius = rect.width()/2.f;
int numPoints = m_Geometry.vertexCount();
v[0].x = center.x();
v[0].y = center.y();
for ( int i=1; i < numPoints; ++i )
{
float theta = i*2*M_PI/( numPoints - 2 );
v[i].x = center.x() + radius*cos(theta);
v[i].y = center.y() - radius*sin(theta);
}
node->setGeometry(&m_Geometry);
node->setMaterial(&m_Material);
return node;
}
示例15: QSGGeometry
//! [4]
QSGNode *BezierCurve::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
QSGGeometryNode *node = 0;
QSGGeometry *geometry = 0;
if (!oldNode) {
node = new QSGGeometryNode;
//! [4] //! [5]
geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), m_segmentCount);
geometry->setLineWidth(2);
geometry->setDrawingMode(GL_LINE_STRIP);
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
//! [5] //! [6]
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(QColor(255, 0, 0));
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
//! [6] //! [7]
} else {
node = static_cast<QSGGeometryNode *>(oldNode);
geometry = node->geometry();
geometry->allocate(m_segmentCount);
}
//! [7]
//! [8]
QRectF bounds = boundingRect();
QSGGeometry::Point2D *vertices = geometry->vertexDataAsPoint2D();
for (int i = 0; i < m_segmentCount; ++i) {
qreal t = i / qreal(m_segmentCount - 1);
qreal invt = 1 - t;
QPointF pos = invt * invt * invt * m_p1
+ 3 * invt * invt * t * m_p2
+ 3 * invt * t * t * m_p3
+ t * t * t * m_p4;
float x = bounds.x() + pos.x() * bounds.width();
float y = bounds.y() + pos.y() * bounds.height();
vertices[i].set(x, y);
}
node->markDirty(QSGNode::DirtyGeometry);
//! [8]
//! [9]
return node;
}