70 lines · 1.8 KB · C
RawDownload
//// ResourceImageItem.h//// Created by David Kelly and Howard Stearns on 2017/06/08// Copyright 2017 High Fidelity, Inc. // Distributed under the Apache License, Version 2.0// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #pragma once#ifndef hifi_ResourceImageItem_h#define hifi_ResourceImageItem_h #include "Application.h" #include <gl/Config.h> #include <QQuickFramebufferObject>#include <QQuickWindow>#include <QTimer> #include <TextureCache.h> class QOpenGLFramebufferObject;class QOpenGLShaderProgram; class ResourceImageItemRenderer : public QObject, public QQuickFramebufferObject::Renderer {    Q_OBJECTpublic:    ResourceImageItemRenderer();    QOpenGLFramebufferObject* createFramebufferObject(const QSize& size) override;    void synchronize(QQuickFramebufferObject* item) override;    void render() override;private:    bool _ready{ false };    QString _url;    bool _visible{ false };     NetworkTexturePointer _networkTexture;    QQuickWindow* _window{ nullptr };    QMutex _fboMutex;    uint32_t _vao{ 0 };    QOpenGLFramebufferObject* _copyFbo { nullptr };    QOpenGLShaderProgram* _shader{ nullptr };    GLsync _fenceSync { 0 };    QTimer _updateTimer;public slots:    void onUpdateTimer();}; class ResourceImageItem : public QQuickFramebufferObject {    Q_OBJECT    Q_PROPERTY(QString url READ getUrl WRITE setUrl)    Q_PROPERTY(bool ready READ getReady WRITE setReady)public:    ResourceImageItem();    QString getUrl() const { return m_url; }    void setUrl(const QString& url);    bool getReady() const { return m_ready; }    void setReady(bool ready);    QQuickFramebufferObject::Renderer* createRenderer() const override { return new ResourceImageItemRenderer; } private:    QString m_url;    bool m_ready { false }; }; #endif // hifi_ResourceImageItem_h