1 #ifndef VolViz_VisualizerImpl_h
2 #define VolViz_VisualizerImpl_h
16 #include <Eigen/Geometry>
18 #include <concurrentqueue.h>
24 #include <unordered_map>
31 std::pair<Visualizer::GeometryName, Geometry::UniquePtr>;
33 std::unordered_map<Visualizer::GeometryName, Geometry::UniquePtr>;
39 using Lights = std::unordered_map<Visualizer::LightName, Light>;
49 operator
bool() const noexcept;
56 template <class Descriptor,
57 typename = std::enable_if_t<std::is_base_of<
60 Descriptor const &descriptor) {
64 template <
class Descriptor,
65 typename = std::enable_if_t<std::is_base_of<
68 Descriptor &&descriptor) {
79 throw std::logic_error(
"Geometry " + name +
" not found");
82 search->second->enqueueUpdate(std::forward<Descriptor>(descriptor));
122 friend class ::VolViz::Visualizer;
124 using Clock = std::chrono::steady_clock;
300 #endif // VolViz_VisualizerImpl_h
struct VolViz::Private_::VisualizerImpl::DepthRange depthRange_
void start()
Definition: VisualizerImpl.cpp:334
GL::Textures< 7 > textures_
Definition: VisualizerImpl.h:229
void handleKeyInput(int key, int scancode, int action, int mode)
Key input handler.
Definition: VisualizerImpl.cpp:452
std::unordered_map< Visualizer::LightName, Light > Lights
Definition: VisualizerImpl.h:39
bool inSelectionMode
Definition: VisualizerImpl.h:268
std::pair< Visualizer::GeometryName, Geometry::UniquePtr > InitQueueEntry
Definition: VisualizerImpl.h:31
AtomicProperty< Color > backgroundColor
Definition: Visualizer.h:75
Lights lights_
Lights.
Definition: VisualizerImpl.h:273
void renderFullscreenQuad(TextureID texture, GL::ShaderProgram &quad)
Renders a textured fullscreen quad.
Definition: VisualizerImpl.cpp:815
GL::Framebuffer lightingFbo_
Definition: VisualizerImpl.h:233
GLboolean * data
Definition: glad.h:2184
Eigen::Quaternionf Orientation
6-DOF orientation, represented as a quaternion
Definition: Types.h:54
void renderLightSpecular(Light const &light)
GL::Framebuffer finalFbo_
Frabebuffer used for the deferred shading.
Definition: VisualizerImpl.h:232
GLsizei const GLfloat * value
Definition: glad.h:2544
void renderSpecularLighting()
Definition: VisualizerImpl.cpp:937
GLenum mode
Definition: glad.h:2088
void renderFinalPass()
Renders the final image to screen.
Definition: VisualizerImpl.cpp:667
GeometryList geometries_
Definition: VisualizerImpl.h:250
float far
Definition: VisualizerImpl.h:214
void swap() noexcept
Definition: VisualizerImpl.h:242
void addLight(Visualizer::LightName name, Light const &light)
Definition: VisualizerImpl.cpp:435
Position selectedPoint_
Definition: VisualizerImpl.h:270
GLint GLint GLsizei GLsizei GLsizei depth
Definition: glad.h:2276
Eigen::Matrix4f textureTransformationMatrix() const noexcept
Definition: VisualizerImpl.cpp:316
void renderGeometry()
Renders the geometry.
Definition: VisualizerImpl.cpp:551
void renderQuad(Point2 const &topLeft, Size2 const &size, TextureID texture, GL::ShaderProgram &prog)
Renderes a textured quad.
Definition: VisualizerImpl.cpp:821
unsigned int GLuint
Definition: glad.h:688
RAII wrapper for OpenGL framebuffer objects.
Definition: Framebuffer.h:11
RAII wrapper for OpenGL buffers.
Definition: Buffer.h:14
std::array< GL::Buffer, 2 > Buffers
Definition: VisualizerImpl.h:237
GeometryInitQueue geometryInitQueue_
Definition: VisualizerImpl.h:252
Shaders & shaders() noexcept
Definition: VisualizerImpl.h:92
Definition: VisualizerImpl.h:257
Definition: GeometryFactory.h:10
GLuint writeBuffer
Definition: glad.h:3899
struct VolViz::Private_::VisualizerImpl::SelectionBuffer selectionBuffer_
Eigen::Vector3f Position
Position in 3D euclidean space.
Definition: Types.h:21
std::uint16_t LightName
Definition: Visualizer.h:28
Shaders shaders_
Shader programs.
Definition: VisualizerImpl.h:220
struct VolViz::Private_::VisualizerImpl::TextureWrapper textures_
AtomicCache< Length > cachedScale
Definition: VisualizerImpl.h:110
GeometryPtr create(AxisAlignedPlaneDescriptor const &descriptor)
Definition: GeometryFactory.cpp:15
Private_::CameraClient client() const noexcept
Definition: Camera.cpp:5
GL::VertexArray vao
Definition: VisualizerImpl.h:259
RAII wrapper for OpenGL shader programs objects.
Definition: ShaderProgram.h:125
GLuint shader
Definition: glad.h:2427
Eigen::Vector3f Size3f
Definition: Types.h:31
void renderBoundingBox(Position const &position, Orientation const &orientation, Size3f const &size, Color const &color)
Renders a bounding box.
Definition: VisualizerImpl.cpp:682
Definition: Visualizer.h:23
std::chrono::steady_clock Clock
Definition: VisualizerImpl.h:124
Camera & camera() noexcept
Definition: VisualizerImpl.h:88
AtomicCache< Color > cachedBackgroundColor
Definition: VisualizerImpl.h:118
std::mutex geometriesMutex_
Definition: VisualizerImpl.h:251
GL::Buffer vBuff
Definition: VisualizerImpl.h:258
GLuint const GLchar * name
Definition: glad.h:2430
void updateGeometries()
Update the geometry.
Definition: VisualizerImpl.cpp:586
void attachVolumeToShader(GL::ShaderProgram &shader) const
Definition: VisualizerImpl.cpp:427
void setupFBOs()
Setup the required textures and frabebuffer objects for rendering.
Definition: VisualizerImpl.cpp:146
float near
Definition: VisualizerImpl.h:214
Handle readBuffer
Definition: VisualizerImpl.h:241
Eigen::Vector3f Color
Normalized RGB color.
Definition: Types.h:40
moodycamel::ConcurrentQueue< InitQueueEntry > GeometryInitQueue
Definition: VisualizerImpl.h:34
void dragSelectedGeometry()
Definition: VisualizerImpl.cpp:788
Camera camera
The camera.
Definition: Visualizer.h:78
void addGeometry(Visualizer::GeometryName name, Descriptor const &descriptor)
Definition: VisualizerImpl.h:59
void renderLightDiffuse(Light const &light)
void setupSelectionBuffers()
Setup selection buffers.
Definition: VisualizerImpl.cpp:306
Definition: GeometryDescriptor.h:33
std::mutex lightMutex_
Definition: VisualizerImpl.h:274
void drawSingleVertex() const noexcept
Definition: VisualizerImpl.cpp:441
Visualizer * visualizer_
Definition: VisualizerImpl.h:210
Eigen::Vector2f Size2
Definition: VisualizerImpl.h:38
void renderLights()
Defferred shading lighing pass.
Definition: VisualizerImpl.cpp:849
GLenum GLuint id
Definition: glad.h:732
ViewState
Definition: VisualizerImpl.h:262
const GLuint * buffers
Definition: glad.h:2378
Eigen::Matrix< std::size_t, 2, 1 > Size2
Definition: Types.h:28
bool updateGeometry(Visualizer::GeometryName name, Descriptor &&descriptor)
Definition: VisualizerImpl.h:67
Definition: AtomicCache.h:22
VolumeDescriptor currentVolume_
Definition: VisualizerImpl.h:290
struct{Visualizer::GeometryName name GeometryNameAndPosition
Definition: VisualizerImpl.h:127
void setVolume(VolumeDescriptor descriptor, span< float const > data)
Definition: VisualizerImpl.cpp:343
float depth
Definition: VisualizerImpl.h:129
RAII wrapper for OpenGL vertex arrays.
Definition: VertexArray.h:11
GLuint color
Definition: glad.h:2834
Buffers buffers
Definition: VisualizerImpl.h:240
Size3f volumeSize() const noexcept
Definition: VisualizerImpl.cpp:405
void renderPoint(Position const &position, Color const &color, float size)
Renders a point.
Definition: VisualizerImpl.cpp:608
void enableMultithreading() noexcept
Definition: VisualizerImpl.cpp:336
void renderDiffuseLighting()
Definition: VisualizerImpl.cpp:895
GLuint texture
Definition: glad.h:2257
void renderAmbientLighting()
Definition: VisualizerImpl.cpp:876
Eigen::Vector2f Point2
Definition: VisualizerImpl.h:37
Definition: VisualizerImpl.h:29
GLsizeiptr size
Definition: glad.h:2387
phys::units::quantity< phys::units::length_d > Length
Definition: Types.h:64
Eigen::Vector2f Position2
Position in 2D space.
Definition: Types.h:26
VisualizerImpl(Visualizer *vis)
Definition: VisualizerImpl.cpp:22
GL::GLFW glfw_
Definition: VisualizerImpl.h:217
std::unordered_map< Visualizer::GeometryName, Geometry::UniquePtr > GeometryList
Definition: VisualizerImpl.h:33
bool multithreadingEnabled_
Definition: VisualizerImpl.h:292
auto cameraClient() const noexcept
Definition: VisualizerImpl.h:90
TextureID
IDs for the auxiliary textures used for the deferred rendering.
Definition: VisualizerImpl.h:133
Position unproject(Position2 const &screenPoint, float depth) const noexcept
GeometryNameAndPosition getGeometryUnderCursor()
Definition: VisualizerImpl.cpp:723
AtomicProperty< Length > scale
Definition: Visualizer.h:74
std::chrono::time_point< Clock > TimePoint
Definition: VisualizerImpl.h:125
void renderGrid()
Renders a grid.
Definition: VisualizerImpl.cpp:590
RAII wrapper for GLFW.
Definition: GLFW.h:25
Camera const & camera() const noexcept
Convenience method for easy camera access.
Definition: VisualizerImpl.h:87
Directional light.
Definition: Light.h:9
std::string GeometryName
Definition: Visualizer.h:29
void renderVolumeBBox()
Definition: VisualizerImpl.cpp:708
Visualizer::GeometryName selectedGeometry_
Definition: VisualizerImpl.h:269
struct VolViz::Private_::VisualizerImpl::SingleVertData singleVertexData_
void renderOneFrame(bool block=true)
Definition: VisualizerImpl.cpp:487
Definition: VisualizerImpl.h:213
void renderSelectionIndexTexture()
Definition: VisualizerImpl.cpp:653
GLenum GLenum GLsizei void GLsizei void void * span
Definition: glad.h:4220
void bindVolume(GLuint unitIdx=0) const noexcept
Bind the volume texture to texture unit i.
Definition: VisualizerImpl.cpp:447
void renderLightingTextures()
Renders all textures of the deferred lighting pass.
Definition: VisualizerImpl.cpp:633
GeometryFactory geomFactory_
Definition: VisualizerImpl.h:211
std::array< GLuint, N > names
Definition: Textures.h:34
Position position
Definition: VisualizerImpl.h:128
Buffers::iterator Handle
Definition: VisualizerImpl.h:238
GLuint operator[](TextureID id) const noexcept
Definition: VisualizerImpl.h:224
Pixel buffers used for mouse picking.
Definition: VisualizerImpl.h:236
Auxiliary textures use in the deferred shading process.
Definition: VisualizerImpl.h:223