Walls And Holes  1
simpletexturedrenderer.h
Go to the documentation of this file.
1 #ifndef SIMPLETEXTUREDRENDERER_H
2 #define SIMPLETEXTUREDRENDERER_H
3 
4 #include <QSharedPointer>
5 #include <QMatrix4x4>
6 #include <QMap>
7 
8 #include <QOpenGLBuffer>
9 #include <QOpenGLVertexArrayObject>
10 
11 #include "abstractrenderer.h"
12 
13 #include "simpletexturedshader.h"
14 #include "simpletexturedscene.h"
15 #include "simpletexturedobject.h"
16 
17 
22 {
23  Q_OBJECT
24 
25 public:
27 
28  virtual ~SimpleTexturedRenderer();
29 
30  void paint(QMatrix4x4 mvpMatrix, QVector3D camPos) override;
31 
32  void create() override;
33 
34 public slots:
39  void objectAdded(const SimpleTexturedObject &obj);
40 
41 
48  void objectRemoved(const SimpleTexturedObject &obj);
49 
50 
55  void clearAll();
56 
57 
62  void cleanUp() override;
63 
64 
65 protected:
66 
67  void initializeRenderer() override;
68 
69 
70 private:
71 
77  void createSceneBuffers();
78 
79 
84  void createObjectBuffers(const SimpleTexturedObject &obj);
85 
89  void clearAllTextures();
90 
91 
92 
94 
95  SimpleTexturedShader mShaderProgram;
96 
97 
99  QMutex mGLDataMutex;
100 
101 
102  // VAO and buffers for each object.
103  // TODO These should be adapted to a textured shader.
104  QMap<const SimpleTexturedObject *, QSharedPointer<QOpenGLVertexArrayObject>> mVAOs;
105  QMap<const SimpleTexturedObject *, int> mNumVertices;
106 
107  QMap<const SimpleTexturedObject *, QSharedPointer<QOpenGLBuffer>> mObjectVertexPositions;
108  QMap<const SimpleTexturedObject *, QSharedPointer<QOpenGLBuffer>> mObjectVertexNormals;
109  QMap<const SimpleTexturedObject *, QSharedPointer<QOpenGLBuffer>> mObjectVertexMaterials;
110  QMap<const SimpleTexturedObject *, QSharedPointer<QOpenGLBuffer>> mObjectVertexTexCoords;
111 
112 
113 
118  QMap<const QImage *, QSharedPointer<QOpenGLTexture>> mImagesToTextures;
119 
120 
122  QMap<const QOpenGLTexture *, QSet<const SimpleTexturedObject *>> mTexturesToObjects;
123 
124 };
125 
126 #endif // SIMPLETEXTUREDRENDERER_H
void objectAdded(const SimpleTexturedObject &obj)
This slot should be called whenever the underlying scene has a new object.
Definition: simpletexturedrenderer.cpp:23
SimpleTexturedScene::SharedSimpleTexturedScene SharedSimpleTexturedScene
Definition: simpletexturedscene.h:136
void cleanUp() override
Cleans up all OpenGL data. This assumes that the correct context is current, and all data is cleaned ...
Definition: simpletexturedrenderer.cpp:92
void paint(QMatrix4x4 mvpMatrix, QVector3D camPos) override
Uses OpenGL commands to draw to the frame buffer. Nothing is assumed about the previous contents of t...
Definition: simpletexturedrenderer.cpp:112
void create() override
This is (should be) called on an OpenGL thread before this object is used. Allows the renderer to ini...
Definition: simpletexturedrenderer.cpp:180
Wrapper for the &#39;onelighttexture&#39; GLSL program.
Definition: simpletexturedshader.h:13
virtual ~SimpleTexturedRenderer()
Definition: simpletexturedrenderer.cpp:17
The SimpleTexturedObject class represents an object with Phong lighting information and a single text...
Definition: simpletexturedobject.h:23
void clearAll()
Clears all OpenGL data, not assuming that a context is current. Some data may not be cleared immediat...
Definition: simpletexturedrenderer.cpp:68
void objectRemoved(const SimpleTexturedObject &obj)
This slot should be called whenever an object is removed from the underlying scene. Locks the mGLDataMutex.
Definition: simpletexturedrenderer.cpp:33
Something that renders a 3D scene to the screen using OpenGL.
Definition: abstractrenderer.h:18
SimpleTexturedRenderer(SharedSimpleTexturedScene scene)
Definition: simpletexturedrenderer.cpp:11
The SimpleTexturedRenderer class renders a SimpleTexturedScene.
Definition: simpletexturedrenderer.h:21
void initializeRenderer() override
Used to initialize renderer parameters that require an OpenGL context to be bound.
Definition: simpletexturedrenderer.cpp:185