2013-12-18 3 views
4

아래 코드에서 geometry->setLineWidth(3);이 다른 QML 요소로 확장되어 그 다른 QML 요소가 "일반"QML 요소 (QQuickItem 하위 클래스가없는 경우에도)를 왜곡 할 수 있음을 발견했습니다. 그들). 당신이 다른 요소에 영향을 미칠 수 있다는 것이 이상하게 보입니다. 버그인지 궁금합니다. 설명서에 따르면이 함수는 현재 요소에만 영향을 주지만 내 경험은 아닙니다. 누구든지 왜 geometry->setLineWidth(3); 같은 거친 힘을 가지고 무게를 달 수 있습니까?updatePaintNode를 구현하면 다른 QML 요소도 올바르게 그려지지 않습니다.

QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data){ 
    QSGGeometry *geometry = 
       new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 2); 
    geometry->setDrawingMode(GL_LINES); 
    geometry->setLineWidth(3); 
    geometry->vertexDataAsPoint2D()[0].set(0, 0); 
    geometry->vertexDataAsPoint2D()[1].set(width(), height()); 

    QSGFlatColorMaterial *material = new QSGFlatColorMaterial; 
    material->setColor(QColor(255, 0, 0)); 

    QSGGeometryNode *node = new QSGGeometryNode; 
    node->setGeometry(geometry); 
    node->setFlag(QSGNode::OwnsGeometry); 
    node->setMaterial(material); 
    node->setFlag(QSGNode::OwnsMaterial); 

    delete oldNode; 
    return node; 
} 

geometry->setLineWidth(3); 줄을 생략하면 문제가 해결됩니다.

+2

이것은 실제로 https://bugreports.qt-project.org/secure/Dashboard.jspa에서 훨씬 빨리 (말장난) 답변을 얻을 수 있습니다! – mlvljr

답변

1

나는 그것이 버그라고 생각합니다. 그들은 모두 그리기 명령에 적용 할 수 있도록

if (g->drawingMode() == GL_LINE_STRIP || g->drawingMode() == GL_LINE_LOOP || g->drawingMode() == GL_LINES) 
     glLineWidth(g->lineWidth()); 

GL의 기능은 현재의 OpenGL 컨텍스트에 전역하고 다시 이전 값으로 glLineWidth을 설정 아무것도 없다 : gsgbatchrenderer.cpp에서의 구현은 다음과 같습니다. 그러나 GL_LINES 모드에있는 다른 노드도 렌더링 할 때 선 너비를 설정합니다. 따라서 다른 QML 요소는이 코드를 거치지 않고 행을 렌더링하고 glLineWidth을 설정해야합니다. 내가 맞다면 그게 버그이고 다른 요소들은 명시 적으로 폭을 설정해야합니다.

다른 '일반적인'QML 요소가 어떤 유형인지 알려주실 수 있습니까?