10#include <QMutexLocker>
37 std::memset(&m_data, 0,
sizeof(m_data));
42 return static_cast<int>(
sizeof(m_data));
45 void write(
char* buffer,
int offset)
const override
47 QMutexLocker lock(&m_mutex);
48 std::memcpy(buffer + offset, &m_data,
sizeof(m_data));
53 return m_dirty.load(std::memory_order_acquire);
58 m_dirty.store(
false, std::memory_order_release);
66 QMutexLocker lock(&m_mutex);
68 if (i < zones.size()) {
70 m_data.zoneRects[i][0] =
static_cast<float>(zone.
rect.x());
71 m_data.zoneRects[i][1] =
static_cast<float>(zone.
rect.y());
72 m_data.zoneRects[i][2] =
static_cast<float>(zone.
rect.width());
73 m_data.zoneRects[i][3] =
static_cast<float>(zone.
rect.height());
74 m_data.zoneFillColors[i][0] =
static_cast<float>(zone.
fillColor.redF());
75 m_data.zoneFillColors[i][1] =
static_cast<float>(zone.
fillColor.greenF());
76 m_data.zoneFillColors[i][2] =
static_cast<float>(zone.
fillColor.blueF());
77 m_data.zoneFillColors[i][3] =
static_cast<float>(zone.
fillColor.alphaF());
78 m_data.zoneBorderColors[i][0] =
static_cast<float>(zone.
borderColor.redF());
79 m_data.zoneBorderColors[i][1] =
static_cast<float>(zone.
borderColor.greenF());
80 m_data.zoneBorderColors[i][2] =
static_cast<float>(zone.
borderColor.blueF());
81 m_data.zoneBorderColors[i][3] =
static_cast<float>(zone.
borderColor.alphaF());
85 m_data.zoneParams[i][3] =
static_cast<float>(zone.
zoneNumber);
87 std::memset(m_data.zoneRects[i], 0,
sizeof(m_data.zoneRects[i]));
88 std::memset(m_data.zoneFillColors[i], 0,
sizeof(m_data.zoneFillColors[i]));
89 std::memset(m_data.zoneBorderColors[i], 0,
sizeof(m_data.zoneBorderColors[i]));
90 std::memset(m_data.zoneParams[i], 0,
sizeof(m_data.zoneParams[i]));
93 m_dirty.store(
true, std::memory_order_release);
98 struct alignas(16) ZoneExtensionData
102 float zoneBorderColors[
MaxZones][4];
106 static_assert(
sizeof(ZoneExtensionData) ==
MaxZones * 4 *
sizeof(
float) * 4,
107 "ZoneExtensionData must be MaxZones * 4 arrays * 4 floats");
111 static_assert(offsetof(ZoneExtensionData, zoneRects) == 0,
"zoneRects must be first");
112 static_assert(offsetof(ZoneExtensionData, zoneFillColors) ==
sizeof(
float[
MaxZones][4]),
113 "zoneFillColors must follow zoneRects with no gap");
114 static_assert(offsetof(ZoneExtensionData, zoneBorderColors) == 2 *
sizeof(
float[
MaxZones][4]),
115 "zoneBorderColors must follow zoneFillColors with no gap");
116 static_assert(offsetof(ZoneExtensionData, zoneParams) == 3 *
sizeof(
float[
MaxZones][4]),
117 "zoneParams must follow zoneBorderColors with no gap");
121 "ZoneExtensionData size must match ZoneShaderUniforms zone region size");
123 ZoneExtensionData m_data;
124 mutable QMutex m_mutex;
125 std::atomic<bool> m_dirty{
true};
Definition ShaderCompiler.h:15
constexpr int MaxZones
Maximum number of zones the zone-aware UBO supports.
Definition ZoneShaderCommon.h:23
Per-zone payload pushed into the UBO each frame.
Definition ZoneShaderCommon.h:86
float borderWidth
Definition ZoneShaderCommon.h:91
QRectF rect
Definition ZoneShaderCommon.h:87
QColor borderColor
Definition ZoneShaderCommon.h:89
int zoneNumber
Definition ZoneShaderCommon.h:93
QColor fillColor
Definition ZoneShaderCommon.h:88
float borderRadius
Definition ZoneShaderCommon.h:90
bool isHighlighted
Definition ZoneShaderCommon.h:92