FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
Renderer.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "FAST/ProcessObject.hpp"
6 #include <mutex>
7 #include <QOpenGLFunctions_3_3_Core>
8 
9 namespace fast {
10 
11 class View;
12 class DataBoundingBox;
13 
14 class FAST_EXPORT Renderer : public ProcessObject, protected QOpenGLFunctions_3_3_Core {
15  public:
16  typedef std::shared_ptr<Renderer> pointer;
17  virtual void draw(Matrix4f perspectiveMatrix, Matrix4f viewingMatrix, float zNear, float zFar, bool mode2D) = 0;
18  virtual void postDraw();
24  virtual uint addInputConnection(DataChannel::pointer port);
30  virtual uint addInputData(DataObject::pointer data);
31  virtual DataBoundingBox getBoundingBox(bool transform = true);
32  virtual void stopPipeline();
33  virtual void reset();
38  virtual void setDisabled(bool disabled);
43  virtual bool isDisabled() const;
44  void setView(View* view);
45  void setSynchronizedRendering(bool synched);
46  bool getSynchronizedRendering() const;
47  protected:
48  Renderer();
49  virtual void execute() override;
50 
56  void createShaderProgram(std::vector<std::string> shaderFilenames, std::string programName = "default");
57  void attachShader(std::string filename, std::string programName = "default");
58  void activateShader(std::string programName = "default");
59  void deactivateShader();
60  uint getShaderProgram(std::string programName = "default");
61  void setShaderUniform(std::string name, Matrix4f matrix, std::string shaderProgramName = "default");
62  void setShaderUniform(std::string name, Affine3f matrix, std::string shaderProgramName = "default");
63  void setShaderUniform(std::string name, Vector3f vector, std::string shaderProgramName = "default");
64  void setShaderUniform(std::string name, float value, std::string shaderProgramName = "default");
65  void setShaderUniform(std::string name, bool value, std::string shaderProgramName = "default");
66  void setShaderUniform(std::string name, int value, std::string shaderProgramName = "default");
67  int getShaderUniformLocation(std::string name, std::string shaderProgramName = "default");
68 
69  // Locking mechanisms to ensure thread safe synchronized rendering
70  bool mHasRendered = true;
71  bool mStop = false;
72  bool m_synchedRendering = true;
73  std::condition_variable_any mRenderedCV;
74  std::mutex mMutex;
75 
79  bool m_disabled = false;
80 
84  std::unordered_map<uint, SpatialDataObject::pointer> mDataToRender;
85 
89  void lock();
93  void unlock();
94  friend class View;
95 
97  private:
98 
102  std::unordered_map<std::string, uint> mShaderProgramIDs;
103 };
104 
105 }
DataBoundingBox.hpp
fast::Renderer
Definition: Renderer.hpp:14
fast
Definition: AffineTransformation.hpp:7
fast::View
Definition: View.hpp:17
fast::Renderer::mDataToRender
std::unordered_map< uint, SpatialDataObject::pointer > mDataToRender
Definition: Renderer.hpp:84
fast::Renderer::m_view
View * m_view
Definition: Renderer.hpp:96
SpatialDataObject.hpp
fast::Renderer::pointer
std::shared_ptr< Renderer > pointer
Definition: Renderer.hpp:16
fast::DataChannel::pointer
std::shared_ptr< DataChannel > pointer
Definition: DataChannel.hpp:12
ProcessObject.hpp
fast::Renderer::mMutex
std::mutex mMutex
Definition: Renderer.hpp:74
fast::DataObject::pointer
std::shared_ptr< DataObject > pointer
Definition: DataObject.hpp:16
uint
unsigned int uint
Definition: DataTypes.hpp:16
fast::Renderer::mRenderedCV
std::condition_variable_any mRenderedCV
Definition: Renderer.hpp:73
fast::ProcessObject
Definition: ProcessObject.hpp:22
fast::DataBoundingBox
Definition: DataBoundingBox.hpp:13