Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. My app crashed inside Qt internal function

My app crashed inside Qt internal function

Scheduled Pinned Locked Moved QML and Qt Quick
1 Posts 1 Posters 730 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    jiandingzhe
    wrote on 14 Nov 2014, 13:51 last edited by
    #1

    I want to make a QtQuick app that show some 3D model. However when I run the program, the main window will show for a blink, then it crashes instantly. The debugger shows it is inside Qt inner rendering function, so I have no idea of how to find it out.

    The model is contained in a QSGGeometry:
    @
    // Profile3DWidget is my subclass of QQuickItem
    void Profile3DWidget::build_shape()
    {
    std::printf("begin Profile3DWidget::build_shape\n");
    QSGGeometry::Attribute attrs[] = {
    QSGGeometry::Attribute::create(0, 4, GL_FLOAT, true),
    QSGGeometry::Attribute::create(1, 4, GL_FLOAT, false),
    };

    QSGGeometry::AttributeSet attr_set = {2, sizeof(float)*8, attrs};
    
    std::printf("create geometry\n");
    shape = new QSGGeometry(attr_set, 4, 4, GL_UNSIGNED_INT);
    node->setGeometry(shape);
    shape->setDrawingMode(GL_TRIANGLE_STRIP);
    
    std::printf("set vertex data\n");
    MyVertex* vertices = (MyVertex*)shape->vertexData();
    vertices[0].set_position(-10, -10, 0, 1);
    vertices[0].set_color(1, 0, 0, 1);
    vertices[1].set_position(10, -10, 0, 1);
    vertices[1].set_color(0, 1, 0, 1);
    vertices[2].set_position(10, 10, 0, 1);
    vertices[2].set_color(0, 0, 1, 1);
    vertices[3].set_position(-10, 10, 0, 1);
    vertices[3].set_color(0.5, 0.5, 0.5, 1);
    
    std::printf("set index data\n");
    uint* indices = shape->indexDataAsUInt();
    indices[0] = 0;
    indices[1] = 1;
    indices[2] = 2;
    indices[3] = 3;
    
    std::printf("end Profile3DWidget::build_shape\n");
    

    }
    @

    This is the implemented updatePaintNode function. The node is already created in Profile3DWidget constructor. We simply update its matrix, and return it.
    @
    QSGNode* Profile3DWidget::updatePaintNode(QSGNode * old_node, UpdatePaintNodeData * data)
    {
    std::printf("begin Profile3DWidget::updatePaintNode\n");
    if (!shape)
    build_shape();

    QSGTransformNode* transform_node = data->transformNode;
    
    QMatrix4x4 mat = matrix_project;
    mat *= matrix_camera;
    mat *= matrix_object;
    transform_node->setMatrix(mat);
    
    std::printf("end Profile3DWidget::updatePaintNode: return %p\n", node);
    return node;
    

    }
    @
    And these are some key functions of the re-implemented shader class. The GLSL code is a simple vertex and color processor, so I don't post it here:
    @
    char const* const* DataProfileShader::attributeNames() const
    {
    static const char* const names[] = {"vtx", "vtx_color", 0};
    return names;
    }

    void DataProfileShader::updateState(const RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial)
    {
    Q_ASSERT(program()->isLinked());

    if (state.isMatrixDirty())
    {
        program()->setUniformValue(id_matrix, state.combinedMatrix());
    }
    

    }
    void DataProfileShader::initialize()
    {
    QSGMaterialShader::initialize();
    id_matrix = program()->uniformLocation("matrix");
    }
    @
    This is the crash back trace:
    @
    0 ?? /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff79554d6
    1 QSGBatchRenderer::Renderer::renderBatches() /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff79566bd
    2 QSGBatchRenderer::Renderer::render() /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff795cfea
    3 QSGRenderer::renderScene(QSGBindable const&) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff796918e
    4 QSGRenderer::renderScene() /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff7969587
    5 QSGRenderContext::renderNextFrame(QSGRenderer*, unsigned int) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff7976e48
    6 QQuickWindowPrivate::renderSceneGraph(QSize const&) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff79b5d78
    7 ?? /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff7993326
    8 ?? /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff7993e9e
    9 QWindow::event(QEvent*) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Gui.so.5 0x7ffff6034909
    10 QQuickWindow::event(QEvent*) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Quick.so.5 0x7ffff79c00cb
    11 QApplicationPrivate::notify_helper(QObject*, QEvent*) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5 0x7ffff6b15724
    12 QApplication::notify(QObject*, QEvent*) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5 0x7ffff6b18d46
    13 QCoreApplication::notifyInternal(QObject*, QEvent*) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Core.so.5 0x7ffff5ae0fc4
    14 QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent*) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Gui.so.5 0x7ffff6028587
    15 QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Gui.so.5 0x7ffff602f665
    16 QWindowSystemInterface::sendWindowSystemEvents(QFlagsQEventLoop::ProcessEventsFlag) /home/yangxi/software/Qt/5.3/gcc_64/lib/libQt5Gui.so.5 0x7ffff60145b8
    17 ?? /home/yangxi/software/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so 0x7fffeeeeca70
    18 g_main_context_dispatch /lib/x86_64-linux-gnu/libglib-2.0.so.0 0x7ffff4277c5d
    19 ?? /lib/x86_64-linux-gnu/libglib-2.0.so.0 0x7ffff4277f48
    20 g_main_context_iteration /lib/x86_64-linux-gnu/libglib-2.0.so.0 0x7ffff4277ffc
    ...
    @

    1 Reply Last reply
    0

    1/1

    14 Nov 2014, 13:51

    • Login

    • Login or register to search.
    1 out of 1
    • First post
      1/1
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved