Overte C++ Documentation
ResourceImageItem.h
1 //
2 // ResourceImageItem.h
3 //
4 // Created by David Kelly and Howard Stearns on 2017/06/08
5 // Copyright 2017 High Fidelity, Inc.
6 
7 // Distributed under the Apache License, Version 2.0
8 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
9 //
10 
11 #pragma once
12 #ifndef hifi_ResourceImageItem_h
13 #define hifi_ResourceImageItem_h
14 
15 #include "Application.h"
16 
17 #include <gl/Config.h>
18 
19 #include <QQuickFramebufferObject>
20 #include <QQuickWindow>
21 #include <QTimer>
22 
23 #include <TextureCache.h>
24 
25 class QOpenGLFramebufferObject;
26 class QOpenGLShaderProgram;
27 
28 class ResourceImageItemRenderer : public QObject, public QQuickFramebufferObject::Renderer {
29  Q_OBJECT
30 public:
31  ResourceImageItemRenderer();
32  QOpenGLFramebufferObject* createFramebufferObject(const QSize& size) override;
33  void synchronize(QQuickFramebufferObject* item) override;
34  void render() override;
35 private:
36  bool _ready{ false };
37  QString _url;
38  bool _visible{ false };
39 
40  NetworkTexturePointer _networkTexture;
41  QQuickWindow* _window{ nullptr };
42  QMutex _fboMutex;
43  uint32_t _vao{ 0 };
44  QOpenGLFramebufferObject* _copyFbo { nullptr };
45  QOpenGLShaderProgram* _shader{ nullptr };
46  GLsync _fenceSync { 0 };
47  QTimer _updateTimer;
48 public slots:
49  void onUpdateTimer();
50 };
51 
52 class ResourceImageItem : public QQuickFramebufferObject {
53  Q_OBJECT
54  Q_PROPERTY(QString url READ getUrl WRITE setUrl)
55  Q_PROPERTY(bool ready READ getReady WRITE setReady)
56 public:
57  ResourceImageItem();
58  QString getUrl() const { return m_url; }
59  void setUrl(const QString& url);
60  bool getReady() const { return m_ready; }
61  void setReady(bool ready);
62  QQuickFramebufferObject::Renderer* createRenderer() const override { return new ResourceImageItemRenderer; }
63 
64 private:
65  QString m_url;
66  bool m_ready { false };
67 
68 };
69 
70 #endif // hifi_ResourceImageItem_h