58 const GPUSettingsDisplayRenderer&
cfgR()
const {
return mCfgR; }
59 const GPUSettingsDisplayLight&
cfgL()
const {
return mCfgL; }
60 const GPUSettingsDisplayHeavy&
cfgH()
const {
return mCfgH; }
61 const GPUSettingsDisplay&
cfg()
const {
return mConfig; }
80 static constexpr float GL_SCALE_FACTOR = (1.f / 100.f);
82 static constexpr const int32_t N_POINTS_TYPE = 15;
83 static constexpr const int32_t N_POINTS_TYPE_TPC = 9;
84 static constexpr const int32_t N_POINTS_TYPE_TRD = 2;
85 static constexpr const int32_t N_POINTS_TYPE_TOF = 2;
86 static constexpr const int32_t N_POINTS_TYPE_ITS = 2;
87 static constexpr const int32_t N_LINES_TYPE = 7;
88 static constexpr const int32_t N_FINAL_TYPE = 4;
89 static constexpr int32_t TRACK_TYPE_ID_LIMIT = 100;
90 enum PointTypes { tCLUSTER = 0,
96 tEXTRAPOLATEDTRACK = 6,
105 enum LineTypes { RESERVED = 0 };
109 struct threadVertexBuffer {
114 threadVertexBuffer() :
buffer()
116 for (int32_t
i = 0;
i < N_FINAL_TYPE;
i++) {
123 for (int32_t
i = 0;
i < N_FINAL_TYPE;
i++) {
133 opengl_spline() : ma(), mb(), mc(), md(), mx() {}
135 float evaluate(
float x);
136 void setVerbose() { mVerbose =
true; }
140 bool mVerbose =
false;
143 void DrawGLScene_internal(
float animateTime = -1.f,
bool renderToMixBuffer =
false);
144 void DrawGLScene_updateEventData();
145 void DrawGLScene_cameraAndAnimation(
float animateTime,
float& mixSlaveImage,
hmm_mat4& nextViewMatrix);
146 size_t DrawGLScene_updateVertexList();
147 void DrawGLScene_drawCommands();
148 int32_t InitDisplay_internal();
149 int32_t getNumThreads();
150 void updateOptions();
151 void disableUnsupportedOptions();
152 int32_t buildTrackFilter();
153 const GPUTPCTracker& sectorTracker(int32_t iSector);
154 const GPUTRDGeometry* trdGeometry();
155 const GPUTrackingInOutPointers* mIOPtrs =
nullptr;
157 void insertVertexList(int32_t iSector,
size_t first,
size_t last);
158 template <
typename... Args>
159 void SetInfo(Args... args);
160 void PrintGLHelpText(
float colorValue);
161 void calcXYZ(
const float*);
162 void mAnimationCloseAngle(
float& newangle,
float lastAngle);
163 void mAnimateCloseQuaternion(
float*
v,
float lastx,
float lasty,
float lastz,
float lastw);
164 void setAnimationPoint();
165 void resetAnimation();
166 void removeAnimationPoint();
167 void startAnimation();
168 int32_t animateCamera(
float& animateTime,
float& mixSlaveImage,
hmm_mat4& nextViewMatrix);
169 void showInfo(
const char* info);
170 void ActivateColor();
174 void SetColorClusters();
175 void SetColorInitLinks();
176 void SetColorLinks();
177 void SetColorSeeds();
178 void SetColorTracklets();
179 void SetColorTracks();
180 void SetColorExtrapolatedTracks();
181 void SetColorFinal();
183 void SetColorGridTRD();
184 void SetColorMarked();
185 void SetCollisionColor(int32_t
col);
187 void drawPointLinestrip(int32_t iSector, int32_t cid, int32_t
id, int32_t id_limit = TRACK_TYPE_ID_LIMIT);
188 vboList DrawClusters(int32_t iSector, int32_t
select, uint32_t iCol);
189 vboList DrawSpacePointsTRD(int32_t iSector, int32_t
select, int32_t iCol);
190 vboList DrawSpacePointsTOF(int32_t iSector, int32_t
select, int32_t iCol);
191 vboList DrawSpacePointsITS(int32_t iSector, int32_t
select, int32_t iCol);
192 vboList DrawLinks(
const GPUTPCTracker& tracker, int32_t
id,
bool dodown =
false);
193 vboList DrawSeeds(
const GPUTPCTracker& tracker);
194 vboList DrawTracklets(
const GPUTPCTracker& tracker);
195 vboList DrawTracks(
const GPUTPCTracker& tracker, int32_t global);
196 void DrawTrackITS(int32_t trackId, int32_t iSector);
197 GPUDisplay::vboList DrawFinalITS();
199 void DrawFinal(int32_t iSector, int32_t ,
const GPUTPCGMPropagator* prop, std::array<
vecpod<int32_t>, 2>& trackList, threadVertexBuffer& threadBuffer);
200 vboList DrawGrid(
const GPUTPCTracker& tracker);
201 vboList DrawGridTRD(int32_t sector);
202 void DoScreenshot(
const char*
filename, std::vector<char>&
pixels,
float animateTime = -1.f);
204 void createQuaternionFromMatrix(
float*
v,
const float* mat);
206 void OpenGLPrint(
const char* s,
float x,
float y,
float r,
float g,
float b,
float a,
bool fromBotton =
true);
208 GPUDisplayFrontend* mFrontend =
nullptr;
209 std::unique_ptr<GPUDisplayBackend> mBackend;
210 GPUChainTracking* mChain =
nullptr;
211 const GPUParam* mParam =
nullptr;
213 const GPUSettingsDisplay& mConfig;
214 GPUSettingsDisplayLight mCfgL;
215 GPUSettingsDisplayHeavy mCfgH;
216 GPUSettingsDisplayRenderer mCfgR;
218 qSem mSemLockDisplay;
220 bool mDrawTextInCompatMode =
false;
221 int32_t mDrawTextFontSize = 0;
223 int32_t mNDrawCalls = 0;
225 bool mUseMultiVBO =
false;
227 std::array<float, 4> mDrawColor = {1.f, 1.f, 1.f, 1.f};
229 int32_t mTestSetting = 0;
231 float mAngleRollOrigin = -1e9;
232 float mMaxClusterZ = -1;
235 float*
const mViewMatrixP = &mViewMatrix.
Elements[0][0];
242 int32_t mNCollissions = 1;
248 std::unique_ptr<float4[]> mGlobalPosPtr;
249 std::unique_ptr<float4[]> mGlobalPosPtrTRD;
250 std::unique_ptr<float4[]> mGlobalPosPtrTRD2;
251 std::unique_ptr<float4[]> mGlobalPosPtrITS;
252 std::unique_ptr<float4[]> mGlobalPosPtrTOF;
258 int32_t mNMaxClusters = 0;
259 int32_t mNMaxSpacePointsTRD = 0;
260 int32_t mNMaxClustersITS = 0;
261 int32_t mNMaxClustersTOF = 0;
262 int32_t mCurrentClusters = 0;
263 int32_t mCurrentSpacePointsTRD = 0;
264 int32_t mCurrentClustersITS = 0;
265 int32_t mCurrentClustersTOF = 0;
268 std::vector<bool> mTrackFilter;
269 bool mUpdateTrackFilter =
false;
271 int32_t mUpdateVertexLists = 1;
272 int32_t mUpdateEventData = 0;
273 int32_t mUpdateDrawCommands = 1;
274 int32_t mUpdateRenderPipeline = 0;
275 volatile int32_t mResetScene = 0;
277 int32_t mAnimate = 0;
279 int32_t mAnimationFrame = 0;
280 int32_t mAnimationLastBase = 0;
281 int32_t mAnimateScreenshot = 0;
282 int32_t mAnimationExport = 0;
283 bool mAnimationChangeConfig =
true;
284 float mAnimationDelay = 2.f;
287 opengl_spline mAnimationSplines[8];
289 int32_t mPrintInfoText = 1;
290 bool mPrintInfoTextAlways = 0;
291 char mInfoText2[1024];
294 std::vector<threadVertexBuffer> mThreadBuffers;
295 std::vector<std::vector<std::array<std::array<vecpod<int32_t>, 2>, NSECTORS>>> mThreadTracks;
296 volatile int32_t mInitResult = 0;
298 float mFPSScale = 1, mFPSScaleadjust = 0;
299 int32_t mFramesDone = 0, mFramesDoneFPS = 0;
301 vboList mGlDLLines[NSECTORS][N_LINES_TYPE];
303 vboList mGlDLFinalITS;
305 vboList mGlDLGrid[NSECTORS];
306 vboList mGlDLGridTRD[NSECTORS / 2];
308 bool mRequestScreenshot =
false;
309 std::string mScreenshotFile;
311 float mYFactor = 1.0f;