// Copyright (C) 2022 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "qquick3drenderstatspassesmodel_p.h" #include QT_BEGIN_NAMESPACE QHash QQuick3DRenderStatsPassesModel::roleNames() const { return { {Qt::DisplayRole, "display"} }; } int QQuick3DRenderStatsPassesModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return m_data.count(); } int QQuick3DRenderStatsPassesModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return 4; } QVariant QQuick3DRenderStatsPassesModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); const uint row = index.row(); const uint column = index.column(); if (role == Qt::DisplayRole) { // Name 0 if (column == 0) return m_data[row].name; // Size 1 if (column == 1) return m_data[row].size; // Vertices 2 if (column == 2) return m_data[row].vertices; // DrawCalls 3 if (column == 3) return m_data[row].drawCalls; } return QVariant(); } QVariant QQuick3DRenderStatsPassesModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole || orientation != Qt::Horizontal || section > 4) return QVariant(); switch (section) { case 0: return QStringLiteral("Name"); case 1: return QStringLiteral("Size"); case 2: return QStringLiteral("Vertices"); case 3: return QStringLiteral("Draw Calls"); default: Q_UNREACHABLE(); return QVariant(); } } const QString &QQuick3DRenderStatsPassesModel::passData() const { return m_passData; } void QQuick3DRenderStatsPassesModel::setPassData(const QString &newPassData) { if (m_passData == newPassData) return; m_passData = newPassData; emit passDataChanged(); // newPassData is just a markdown table... QVector newData; if (!m_passData.isEmpty()) { auto lines = m_passData.split(QRegularExpression(QStringLiteral("[\r\n]")), Qt::SkipEmptyParts); if (lines.size() > 2) { for (qsizetype i = 2; i < lines.size(); ++i) { const auto &line = lines.at(i); auto fields = line.split(QLatin1Char('|'), Qt::SkipEmptyParts); if (fields.size() != 4) continue; Data data; bool isUInt64 = false; bool isUint32 = false; data.name = fields[0]; data.size = fields[1]; data.vertices = fields[2].toULongLong(&isUInt64); if (!isUInt64) continue; data.drawCalls = fields[3].toULong(&isUint32); if (!isUint32) continue; newData.append(data); } } } // update the model beginResetModel(); m_data = newData; endResetModel(); } QT_END_NAMESPACE