// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef EXAMPLEWIDGET_H #define EXAMPLEWIDGET_H #include #include class ExampleRhiWidget : public QRhiWidget { Q_OBJECT public: ExampleRhiWidget(QWidget *parent = nullptr); void initialize(QRhiCommandBuffer *cb) override; void render(QRhiCommandBuffer *cb) override; void releaseResources() override; //![data-setters] void setCubeTextureText(const QString &s) { if (itemData.cubeText == s) return; itemData.cubeText = s; itemData.cubeTextDirty = true; update(); } void setCubeRotation(float r) { if (itemData.cubeRotation == r) return; itemData.cubeRotation = r; itemData.cubeRotationDirty = true; update(); } //![data-setters] signals: void resized(); void rhiChanged(const QString &apiName); private: QRhi *m_rhi = nullptr; int m_sampleCount = 1; QSize m_pixelSize; struct { QRhiResourceUpdateBatch *resourceUpdates = nullptr; std::unique_ptr vbuf; std::unique_ptr ubuf; std::unique_ptr srb; std::unique_ptr ps; std::unique_ptr sampler; std::unique_ptr cubeTex; QMatrix4x4 mvp; } scene; struct { QString cubeText; bool cubeTextDirty = false; float cubeRotation = 0.0f; bool cubeRotationDirty = false; } itemData; void initScene(); void updateMvp(); void updateCubeTexture(); }; #endif