SGCT master (487fac4)
Simple Graphics Cluster Toolkit
Loading...
Searching...
No Matches
statisticsrenderer.h
Go to the documentation of this file.
1/*****************************************************************************************
2 * SGCT *
3 * Simple Graphics Cluster Toolkit *
4 * *
5 * Copyright (c) 2012-2026 *
6 * For conditions of distribution and use, see copyright notice in LICENSE.md *
7 ****************************************************************************************/
8
9#ifndef __SGCT__STATISTICSRENDERER__H__
10#define __SGCT__STATISTICSRENDERER__H__
11
12#include <sgct/sgctexports.h>
13
14#include <sgct/engine.h>
15#include <sgct/math.h>
16#include <array>
17
18namespace sgct {
19
20class Viewport;
21class Window;
22
23class SGCT_EXPORT StatisticsRenderer {
24public:
27
28 void update();
29 void render(const Window& window, const Viewport& viewport) const;
30
31 float scale() const;
32 void setScale(float scale);
33
34 vec2 offset() const;
36
37private:
38 const Engine::Statistics& _statistics;
39
40 ShaderProgram _shader;
41 int _mvpLoc = -1;
42 int _colorLoc = -1;
43
44 struct Vertex {
45 float x = 0.f;
46 float y = 0.f;
47 };
48 struct Lines {
49 struct {
50 unsigned int vao = 0;
51 unsigned int vbo = 0;
52 int nLines = 0;
53 } staticDraw;
54
55 struct {
56 unsigned int vao = 0;
57 unsigned int vbo = 0;
58 } dynamicDraw;
59
60
61 struct Vertices {
62 // The implementation requires frametimes to be the first element so beware
63 std::array<Vertex, Engine::Statistics::HistoryLength> frametimes;
64 std::array<Vertex, Engine::Statistics::HistoryLength> drawTimes;
65 std::array<Vertex, Engine::Statistics::HistoryLength> syncTimes;
66 std::array<Vertex, Engine::Statistics::HistoryLength> loopTimeMin;
67 std::array<Vertex, Engine::Statistics::HistoryLength> loopTimeMax;
68 };
69 Vertices buffer;
70 };
71 Lines _lines;
72
73 struct Histogram {
74 // Each bin covers 1ms
75 static constexpr int Bins = 128;
76
77 struct Values {
78 std::array<int, Bins> frametimes = {};
79 std::array<int, Bins> drawTimes = {};
80 std::array<int, Bins> syncTimes = {};
81 std::array<int, Bins> loopTimeMin = {};
82 std::array<int, Bins> loopTimeMax = {};
83 };
84 Values values;
85
86 struct Vertices {
87 // The implementation requires frametimes to be the first element so beware
88 std::array<Vertex, 6 * Bins> frametimes = {};
89 std::array<Vertex, 6 * Bins> drawTimes = {};
90 std::array<Vertex, 6 * Bins> syncTimes = {};
91 std::array<Vertex, 6 * Bins> loopTimeMin = {};
92 std::array<Vertex, 6 * Bins> loopTimeMax = {};
93 };
94 Vertices buffer;
95
96 struct {
97 int frametimes = 0;
98 int drawTimes = 0;
99 int syncTimes = 0;
100 int loopTimeMin = 0;
101 int loopTimeMax = 0;
102 } maxBinValue;
103
104 struct {
105 unsigned int vao = 0;
106 unsigned int vbo = 0;
107 } staticDraw;
108
109 struct {
110 unsigned int vao = 0;
111 unsigned int vbo = 0;
112 } dynamicDraw;
113 };
114 Histogram _histogram;
115
116 float _scale = 0.5f;
117 vec2 _offset;
118};
119
120} // namespace sgct
121
122#endif // __SGCT__STATISTICSRENDERER__H__
Class for handling compiling, linking and using shader programs.
Definition shaderprogram.h:24
StatisticsRenderer(const Engine::Statistics &statistics)
void setOffset(vec2 offset)
void render(const Window &window, const Viewport &viewport) const
void setScale(float scale)
This class holds and manages viewportdata and calculates frustums.
Definition viewport.h:29
Definition window.h:46
Definition actions.h:16
Structure with all statistics gathered about different frametimes.
Definition engine.h:81
Definition statisticsrenderer.h:77
std::array< int, Bins > loopTimeMax
Definition statisticsrenderer.h:82
std::array< int, Bins > drawTimes
Definition statisticsrenderer.h:79
std::array< int, Bins > syncTimes
Definition statisticsrenderer.h:80
std::array< int, Bins > loopTimeMin
Definition statisticsrenderer.h:81
std::array< int, Bins > frametimes
Definition statisticsrenderer.h:78
Definition statisticsrenderer.h:86
std::array< Vertex, 6 *Bins > syncTimes
Definition statisticsrenderer.h:90
std::array< Vertex, 6 *Bins > loopTimeMax
Definition statisticsrenderer.h:92
std::array< Vertex, 6 *Bins > frametimes
Definition statisticsrenderer.h:88
std::array< Vertex, 6 *Bins > drawTimes
Definition statisticsrenderer.h:89
std::array< Vertex, 6 *Bins > loopTimeMin
Definition statisticsrenderer.h:91
Definition statisticsrenderer.h:61
std::array< Vertex, Engine::Statistics::HistoryLength > loopTimeMin
Definition statisticsrenderer.h:66
std::array< Vertex, Engine::Statistics::HistoryLength > syncTimes
Definition statisticsrenderer.h:65
std::array< Vertex, Engine::Statistics::HistoryLength > frametimes
Definition statisticsrenderer.h:63
std::array< Vertex, Engine::Statistics::HistoryLength > drawTimes
Definition statisticsrenderer.h:64
std::array< Vertex, Engine::Statistics::HistoryLength > loopTimeMax
Definition statisticsrenderer.h:67
Definition math.h:47