本文整理汇总了C++中QSGGeometry::setDrawingMode方法的典型用法代码示例。如果您正苦于以下问题:C++ QSGGeometry::setDrawingMode方法的具体用法?C++ QSGGeometry::setDrawingMode怎么用?C++ QSGGeometry::setDrawingMode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QSGGeometry
的用法示例。
在下文中一共展示了QSGGeometry::setDrawingMode方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _drawHumpSolid
void PEQGraph::_drawHumpSolid(QSGNode * parentNode, int n, QColor color) {
//Transparent shaded part//
QSGGeometryNode * solidNode = new QSGGeometryNode();
QSGGeometry * solidGeom = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 2 * (HorizontalDivisions + 1));
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(color);
material->setFlag(QSGMaterial::Blending);
solidNode->setMaterial(material);
solidNode->setFlag(QSGNode::OwnsGeometry);
solidNode->setFlag(QSGNode::OwnedByParent);
solidNode->setFlag(QSGNode::OwnsMaterial);
solidGeom->setDrawingMode(GL_TRIANGLE_STRIP);
QSGGeometry::Point2D* point = solidGeom->vertexDataAsPoint2D();
float left = graphToNodeX(xAxis.min);
float mid = graphToNodeY(0);
float width = graphToNodeX(xAxis.max) - graphToNodeX(xAxis.min);
float stride = width / HorizontalDivisions;
for (int i = 0; i < HorizontalDivisions + 1; i++) {
point->set(left + i*stride, mid);
point++;
point->set(left + i*stride, graphToNodeY(computedData[i][n]));
point++;
}
solidNode->setGeometry(solidGeom);
parentNode->appendChildNode(solidNode);
}
示例2: _drawHumpOutline
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);
}
示例3: QSGOpacityNode
QcLocationCircleNode::QcLocationCircleNode(const QcViewport * viewport)
: QSGOpacityNode(),
m_viewport(viewport),
m_geometry_node(new QSGGeometryNode())
{
setOpacity(.25); // 1. black
QSGGeometry * geometry = new QSGGeometry(LocationCirclePoint2D_AttributeSet, 0); // Fixme:
geometry->setDrawingMode(GL_TRIANGLE_STRIP);
m_geometry_node->setGeometry(geometry);
m_geometry_node->setFlag(QSGNode::OwnsGeometry);
QSGSimpleMaterial<QcLocationCircleMaterialShaderState> * material = QcLocationCircleMaterialShader::createMaterial();
material->state()->cone_r = 0; // Fixme: QColor
material->state()->cone_g = 0;
material->state()->cone_b = 1;
material->state()->cone_a = 1.;
material->state()->accuracy_r = 1;
material->state()->accuracy_g = 0;
material->state()->accuracy_b = 0;
material->state()->accuracy_a = 1.;
// QSGFlatColorMaterial * material = new QSGFlatColorMaterial();
// material->setColor(QColor("black"));
material->setFlag(QSGMaterial::Blending);
m_geometry_node->setMaterial(material);
m_geometry_node->setFlag(QSGNode::OwnsMaterial);
appendChildNode(m_geometry_node);
}
示例4: 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;
}
示例5: updatePaintNode
/*------------------------------------------------------------------------------
| 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;
}
示例6: QSGGeometry
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: DrawComplexBezierPath
void SceneGraphDeviceContext::DrawComplexBezierPath(vrv::Point bezier1[4], vrv::Point bezier2[4])
{
// 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
vrv::Pen currentPen = m_penStack.top();
int segmentCount = 16;
QSGGeometryNode *node = new QSGGeometryNode;
QSGGeometry *geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 2 * segmentCount);
geometry->setDrawingMode(QSGGeometry::DrawTriangleStrip);
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(static_cast<QRgb>(currentPen.GetColour()));
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
auto calculateCubicBezierPoint = [](vrv::Point p[4], float t) -> std::tuple<float, float> {
auto invt = 1 - t;
auto x = invt * invt * invt * p[0].x + 3 * invt * invt * t * p[1].x + 3 * invt * t * t * p[2].x
+ t * t * t * p[3].x;
auto y = invt * invt * invt * p[0].y + 3 * invt * invt * t * p[1].y + 3 * invt * t * t * p[2].y
+ t * t * t * p[3].y;
return std::make_tuple(x, y);
};
// This loop calculates the bezier points for the inner and the outer line and add them as vertices. The list of
// vertices is built so that points from the inner and outer line are alternating. This allows to draw a filled area
// with DrawTriangleStrip.
QSGGeometry::Point2D *vertices = geometry->vertexDataAsPoint2D();
for (int i = 0; i < segmentCount; ++i) {
float bezierPointX = 0;
float bezierPointY = 0;
float currentSegment = i / static_cast<float>(segmentCount - 1);
// Calculate bezier point on bezier1
std::tie(bezierPointX, bezierPointY) = calculateCubicBezierPoint(bezier1, currentSegment);
vertices[i * 2].set(translateX(bezierPointX), translateY(bezierPointY));
// Calculate bezier point on bezier2
std::tie(bezierPointX, bezierPointY) = calculateCubicBezierPoint(bezier2, currentSegment);
vertices[i * 2 + 1].set(translateX(bezierPointX), translateY(bezierPointY));
}
node->markDirty(QSGNode::DirtyGeometry);
AddGeometryNode(node);
}
示例8: 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;
}
示例9: drawGateCompressor
void DynamicController::drawGateCompressor(QSGNode * rootNode) {
if (knobs.count() == 0) {
return;
}
//Update knobs
if (!this->simple()) {
QObject * gateKnob = knobs[0];
QObject * compThreshKnob = knobs[1];
QObject * compRatioKnob = knobs[2];
gateKnob->setProperty("x", graphToNodeX(_tempModel["gatex"]));
gateKnob->setProperty("y", graphToNodeY(_tempModel["gatey"]));
compThreshKnob->setProperty("x", graphToNodeX(_tempModel["compx"]));
compThreshKnob->setProperty("y", graphToNodeY(_tempModel["compy"]));
compRatioKnob->setProperty("x", graphToNodeX(xAxis.max));
compRatioKnob->setProperty("y", graphToNodeY(_tempModel["compy"]) * (1 - _tempModel["ratio"]));
}
QSGGeometryNode * lineNode = new QSGGeometryNode();
QSGGeometry * lineGeom = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), (4));
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(this->curveColor());
material->setFlag(QSGMaterial::Blending);
lineNode->setMaterial(material);
lineNode->setFlag(QSGNode::OwnsGeometry);
lineNode->setFlag(QSGNode::OwnedByParent);
lineNode->setFlag(QSGNode::OwnsMaterial);
lineGeom->setDrawingMode(GL_LINE_STRIP);
glLineWidth(2.0f);
QSGGeometry::Point2D* points = lineGeom->vertexDataAsPoint2D();
QRectF bounds = boundingRect();
points->set(graphToNodeX(_tempModel["gatex"]), bounds.bottom()); points++;
points->set(graphToNodeX(_tempModel["gatex"]), graphToNodeY(_tempModel["gatey"])); points++;
points->set(graphToNodeX(_tempModel["compx"]), graphToNodeY(_tempModel["compy"])); points++;
points->set(graphToNodeX(xAxis.max), graphToNodeY(_tempModel["compy"]) * (1 - _tempModel["ratio"])); points++;
lineNode->setGeometry(lineGeom);
rootNode->appendChildNode(lineNode);
}
示例10: QSGGeometry
QSGGeometryNode *createSelectionNode(QSGMaterial *material)
{
QSGGeometryNode *selectionNode = new QSGGeometryNode;
selectionNode->setMaterial(material);
selectionNode->setFlag(QSGNode::OwnsMaterial, false);
QSGGeometry *geometry = new QSGGeometry(OpaqueColoredPoint2DWithSize::attributes(), 4);
geometry->setDrawingMode(GL_TRIANGLE_STRIP);
OpaqueColoredPoint2DWithSize *v = OpaqueColoredPoint2DWithSize::fromVertexData(geometry);
for (int i = 0; i < 4; ++i)
v[i].set(0, 0, 0, 0, 0, 0, 0, 0);
selectionNode->setGeometry(geometry);
selectionNode->setFlag(QSGNode::OwnsGeometry, true);
selectionNode->setFlag(QSGNode::OwnedByParent, false);
return selectionNode;
}
示例11: DrawPolygon
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);
}
示例12: drawCompressor
void DynamicController::drawCompressor(QSGNode * rootNode) {
//Update knobs
if (!this->simple()) {
QObject * threshKnob = knobs[0];
QObject * ratKnob = knobs[1];
threshKnob->setProperty("x", graphToNodeX(_tempModel["compx"]));
threshKnob->setProperty("y", graphToNodeY(_tempModel["compy"]));
ratKnob->setProperty("x", graphToNodeX(yAxis.max));
ratKnob->setProperty("y", graphToNodeY(_tempModel["compy"]) * (1 - _tempModel["ratio"]));
}
QSGGeometryNode * lineNode = new QSGGeometryNode();
QSGGeometry * lineGeom = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), (3));
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(this->curveColor());
material->setFlag(QSGMaterial::Blending);
lineNode->setMaterial(material);
lineNode->setFlag(QSGNode::OwnsGeometry);
lineNode->setFlag(QSGNode::OwnedByParent);
lineNode->setFlag(QSGNode::OwnsMaterial);
lineGeom->setDrawingMode(GL_LINE_STRIP);
glLineWidth(2.0f);
QSGGeometry::Point2D* points = lineGeom->vertexDataAsPoint2D();
QRectF bounds = boundingRect();
points->set(bounds.left(), bounds.bottom()); points++;
for (int i = 0; i < 2; i++) {
QQuickItem * q = qobject_cast<QQuickItem*>(knobs[i]);
points->set(q->x(), q->y());
points++;
}
lineNode->setGeometry(lineGeom);
rootNode->appendChildNode(lineNode);
}
示例13: DrawLine
void SceneGraphDeviceContext::DrawLine(int x1, int y1, int x2, int y2)
{
vrv::Pen currentPen = m_penStack.top();
QSGGeometry *geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 2);
geometry->setDrawingMode(GL_LINES);
geometry->setLineWidth(translate(currentPen.GetWidth()));
geometry->vertexDataAsPoint2D()[0].set(translateX(x1), translateY(y1));
geometry->vertexDataAsPoint2D()[1].set(translateX(x2), translateY(y2));
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(static_cast<QRgb>(currentPen.GetColour()));
QSGGeometryNode *node = new QSGGeometryNode;
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
AddGeometryNode(node);
}
示例14: drawRect
QSGNode* drawRect(const QRect& rect, QSGNode* oldNode)
{
QSGGeometryNode* node;
if (oldNode == nullptr)
{
node = new QSGGeometryNode;
QSGGeometry* geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 8);
geometry->setDrawingMode(GL_LINES);
geometry->setLineWidth(1);
QSGFlatColorMaterial* material = new QSGFlatColorMaterial;
material->setColor(QGuiApplication::palette().color(QPalette::Normal, QPalette::WindowText));
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
}
else
{
node = static_cast<QSGGeometryNode*>(oldNode);
}
QSGGeometry* geometry = node->geometry();
// FIXME: check if these really have to be updated
geometry->vertexDataAsPoint2D()[0].set(rect.topLeft().x(), rect.topLeft().y());
geometry->vertexDataAsPoint2D()[1].set(rect.topRight().x(), rect.topRight().y());
geometry->vertexDataAsPoint2D()[2].set(rect.topRight().x(), rect.topRight().y());
geometry->vertexDataAsPoint2D()[3].set(rect.bottomRight().x(), rect.bottomRight().y());
geometry->vertexDataAsPoint2D()[4].set(rect.bottomRight().x(), rect.bottomRight().y());
geometry->vertexDataAsPoint2D()[5].set(rect.bottomLeft().x(), rect.bottomLeft().y());
geometry->vertexDataAsPoint2D()[6].set(rect.bottomLeft().x(), rect.bottomLeft().y());
geometry->vertexDataAsPoint2D()[7].set(rect.topLeft().x(), rect.topLeft().y());
node->markDirty(QSGNode::DirtyGeometry);
return node;
}
示例15: p
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;
}