v2.0.0
Loading...
Searching...
No Matches
brainrenderer.h
Go to the documentation of this file.
1//=============================================================================================================
30
31#ifndef BRAINRENDERER_H
32#define BRAINRENDERER_H
33
34//=============================================================================================================
35// INCLUDES
36//=============================================================================================================
37
38#include "../disp3D_global.h"
39
40#include "../core/rendertypes.h"
41
42#include <QMatrix4x4>
43#include <QVector3D>
44#include <memory>
45
46//=============================================================================================================
47// FORWARD DECLARATIONS
48//=============================================================================================================
49
50class QRhi;
51class QRhiCommandBuffer;
52class QRhiRenderTarget;
53class QRhiRenderPassDescriptor;
54class QRhiResourceUpdateBatch;
55class QRhiTexture;
56class QRhiRenderBuffer;
57class QRhiTextureRenderTarget;
58
59namespace DISP3DLIB
60{
61
62class BrainSurface;
63class DipoleObject;
64class ElectrodeObject;
65class NetworkObject;
66class PolylineObject;
67class VideoOverlay;
68class SliceObject;
69
70//=============================================================================================================
77{
78public:
79 //=========================================================================================================
84
85 //=========================================================================================================
90
91 // ShaderMode is defined in core/rendertypes.h for lightweight inclusion.
92 // These aliases preserve backward compatibility.
98 static constexpr ShaderMode XRay = DISP3DLIB::XRay;
100
105 {
106 QMatrix4x4 mvp;
107 QVector3D cameraPos;
108 QVector3D lightDir;
109 bool lightingEnabled = true;
110 float overlayMode = 0.0f; // 0=FsSurface, 1=FsAnnotation, 2=Scientific, 3=STC
111 };
112
113 //=========================================================================================================
122 void initialize(QRhi* rhi, QRhiRenderPassDescriptor* rp, int sampleCount);
123
124 //=========================================================================================================
141 void ensureRenderTargets(QRhi* rhi, QRhiTexture* colorTex, const QSize& pixelSize);
142
143 //=========================================================================================================
147 QRhiRenderTarget* rtClear() const;
148
152 QRhiRenderTarget* rtPreserve() const;
153
154 //=========================================================================================================
167 void newFrame();
168
172 int cachedMeshCount() const;
173
174 //=========================================================================================================
181 void beginFrame(QRhiCommandBuffer* cb, QRhiResourceUpdateBatch* updates = nullptr);
182
183 //=========================================================================================================
191 void beginPreservingPass(QRhiCommandBuffer* cb, QRhiResourceUpdateBatch* updates = nullptr);
192
193 //=========================================================================================================
202 int prepareSurfaceDraw(QRhiResourceUpdateBatch* u, const SceneData& data, BrainSurface* surface);
203
212 void issueSurfaceDraw(QRhiCommandBuffer* cb, BrainSurface* surface, ShaderMode mode, int uniformOffset);
213
214 //=========================================================================================================
223 int prepareDipoleDraw(QRhiResourceUpdateBatch* u, const SceneData& data, DipoleObject* dipoles);
224
232 void issueDipoleDraw(QRhiCommandBuffer* cb, DipoleObject* dipoles, int uniformOffset);
233
242 int prepareNetworkDraw(QRhiResourceUpdateBatch* u, const SceneData& data, NetworkObject* network);
243
251 void issueNetworkDraw(QRhiCommandBuffer* cb, NetworkObject* network, int uniformOffset);
252
261 int preparePolylineDraw(QRhiResourceUpdateBatch* u, const SceneData& data, PolylineObject* polyline);
262
270 void issuePolylineDraw(QRhiCommandBuffer* cb, PolylineObject* polyline, int uniformOffset);
271
280 int prepareElectrodeDraw(QRhiResourceUpdateBatch* u, const SceneData& data, ElectrodeObject* electrodes);
281
289 void issueElectrodeDraw(QRhiCommandBuffer* cb, ElectrodeObject* electrodes, int uniformOffset);
290
291 //=========================================================================================================
303 void prepareVideoOverlay(QRhi* rhi,
304 QRhiResourceUpdateBatch* u,
305 DISP3DLIB::VideoOverlay* overlay);
306
307 //=========================================================================================================
318 int prepareVideoOverlayDraw(QRhiResourceUpdateBatch* u,
319 const SceneData& data,
321 BrainSurface* surface);
322
331 void issueVideoOverlayDraw(QRhiCommandBuffer* cb,
333 BrainSurface* surface,
334 int uniformOffset);
335
336 //=========================================================================================================
348 void prepareSlice(QRhi* rhi,
349 QRhiResourceUpdateBatch* u,
351 int slotIndex);
352
353 //=========================================================================================================
362 int prepareSliceDraw(QRhiResourceUpdateBatch* u,
363 const SceneData& data,
364 int slotIndex);
365
366 //=========================================================================================================
374 void issueSliceDraw(QRhiCommandBuffer* cb,
375 int slotIndex,
376 int uniformOffset);
377
378 //=========================================================================================================
384 void endPass(QRhiCommandBuffer* cb);
385
386private:
388 struct Impl;
389 std::unique_ptr<Impl> d;
390};
391
392} // namespace DISP3DLIB
393
394#endif // BRAINRENDERER_H
Library export/import macros and namespace marker for the disp3D library.
#define DISP3DSHARED_EXPORT
Lightweight render-related enums (ShaderMode, VisualizationMode) shared across disp3D.
3-D brain visualisation using the Qt RHI rendering backend.
Renderable cortical surface mesh with per-vertex color, curvature data, and GPU buffer management.
Renderable dipole arrow set with instanced GPU rendering.
Renderable sEEG / ECoG electrodes: contact spheres plus lead bodies.
Renderable connectivity network visualization.
Connected line segments through an ordered list of points.
Data model for a single 2-D MRI volume slice.
Definition sliceobject.h:82
Camera-facing textured quad rendered at a focus point in the 3-D scene.
int prepareDipoleDraw(QRhiResourceUpdateBatch *u, const SceneData &data, DipoleObject *dipoles)
static constexpr ShaderMode Dipole
int preparePolylineDraw(QRhiResourceUpdateBatch *u, const SceneData &data, PolylineObject *polyline)
void issuePolylineDraw(QRhiCommandBuffer *cb, PolylineObject *polyline, int uniformOffset)
int prepareElectrodeDraw(QRhiResourceUpdateBatch *u, const SceneData &data, ElectrodeObject *electrodes)
void issueElectrodeDraw(QRhiCommandBuffer *cb, ElectrodeObject *electrodes, int uniformOffset)
void prepareSlice(QRhi *rhi, QRhiResourceUpdateBatch *u, DISP3DLIB::SliceObject *slice, int slotIndex)
void ensureRenderTargets(QRhi *rhi, QRhiTexture *colorTex, const QSize &pixelSize)
int prepareSliceDraw(QRhiResourceUpdateBatch *u, const SceneData &data, int slotIndex)
void issueSliceDraw(QRhiCommandBuffer *cb, int slotIndex, int uniformOffset)
void beginFrame(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *updates=nullptr)
static constexpr ShaderMode ShowNormals
QRhiRenderTarget * rtPreserve() const
void initialize(QRhi *rhi, QRhiRenderPassDescriptor *rp, int sampleCount)
void issueSurfaceDraw(QRhiCommandBuffer *cb, BrainSurface *surface, ShaderMode mode, int uniformOffset)
QRhiRenderTarget * rtClear() const
int prepareNetworkDraw(QRhiResourceUpdateBatch *u, const SceneData &data, NetworkObject *network)
static constexpr ShaderMode Standard
void endPass(QRhiCommandBuffer *cb)
void beginPreservingPass(QRhiCommandBuffer *cb, QRhiResourceUpdateBatch *updates=nullptr)
int prepareSurfaceDraw(QRhiResourceUpdateBatch *u, const SceneData &data, BrainSurface *surface)
static constexpr ShaderMode Holographic
static constexpr ShaderMode Anatomical
void issueNetworkDraw(QRhiCommandBuffer *cb, NetworkObject *network, int uniformOffset)
void issueDipoleDraw(QRhiCommandBuffer *cb, DipoleObject *dipoles, int uniformOffset)
void prepareVideoOverlay(QRhi *rhi, QRhiResourceUpdateBatch *u, DISP3DLIB::VideoOverlay *overlay)
static constexpr ShaderMode XRay
void issueVideoOverlayDraw(QRhiCommandBuffer *cb, DISP3DLIB::VideoOverlay *overlay, BrainSurface *surface, int uniformOffset)
DISP3DLIB::ShaderMode ShaderMode
int prepareVideoOverlayDraw(QRhiResourceUpdateBatch *u, const SceneData &data, DISP3DLIB::VideoOverlay *overlay, BrainSurface *surface)
Per-draw scene uniforms: camera matrices, light and overlay mode.