Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
ZoneShaderCommon.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
8
9#include <QColor>
10#include <QRectF>
11#include <QVector>
12#include <QVector4D>
13
14#include <atomic>
15#include <cstddef>
16#include <cstring>
17
18namespace PhosphorRendering {
19
23constexpr int MaxZones = 64;
24
25// Re-export so consumers that pull in this header get the full set of shader
26// constants without an extra include.
28
40struct alignas(16) ZoneShaderUniforms
41{
42 // ── Base region (PhosphorShaders::BaseUniforms) ────────────────────
44
45 // ── Zone extension region ────────────────────────────────────────
50};
51
52static_assert(sizeof(ZoneShaderUniforms) <= 8192, "ZoneShaderUniforms exceeds expected size");
53static_assert(offsetof(ZoneShaderUniforms, base) == 0, "base must be at offset 0");
54static_assert(offsetof(ZoneShaderUniforms, zoneRects) == sizeof(PhosphorShaders::BaseUniforms),
55 "zoneRects must follow BaseUniforms with no gap");
56
62namespace ZoneShaderUboRegions {
63
64// Re-export base regions
65using namespace PhosphorShaders::UboRegions;
66
67// Scene header: iResolution through end of BaseUniforms (before zone arrays).
68// Used when scene data changes but zone data hasn't.
69constexpr size_t K_SCENE_HEADER_OFFSET = offsetof(ZoneShaderUniforms, base.iResolution);
71
72// Scene data: iResolution through end of zone arrays. Used when zone data changes.
73constexpr size_t K_SCENE_DATA_OFFSET = offsetof(ZoneShaderUniforms, base.iResolution);
75
76// Zone extension region (zoneRects/zoneFillColors/zoneBorderColors/zoneParams).
79
80} // namespace ZoneShaderUboRegions
81
86{
87 QRectF rect;
88 QColor fillColor;
90 float borderRadius = 0.0f;
91 float borderWidth = 2.0f;
92 bool isHighlighted = false;
93 int zoneNumber = 0;
94};
95
100{
101 float x = 0.0f;
102 float y = 0.0f;
103 float width = 0.0f;
104 float height = 0.0f;
105 int zoneNumber = 0;
106 bool highlighted = false;
107 float borderRadius = 8.0f;
108 float borderWidth = 2.0f;
109};
110
115{
116 float r = 0.0f;
117 float g = 0.0f;
118 float b = 0.0f;
119 float a = 1.0f;
120
121 ZoneColor() = default;
122 ZoneColor(float red, float green, float blue, float alpha = 1.0f)
123 : r(red)
124 , g(green)
125 , b(blue)
126 , a(alpha)
127 {
128 }
129
130 static ZoneColor fromQColor(const QColor& color)
131 {
132 return ZoneColor(static_cast<float>(color.redF()), static_cast<float>(color.greenF()),
133 static_cast<float>(color.blueF()), static_cast<float>(color.alphaF()));
134 }
135
136 QVector4D toVector4D() const
137 {
138 return QVector4D(r, g, b, a);
139 }
140};
141
146{
147 QVector<ZoneRect> rects;
148 QVector<ZoneColor> fillColors;
149 QVector<ZoneColor> borderColors;
150 int zoneCount = 0;
152 int version = 0;
153};
154
155} // namespace PhosphorRendering
constexpr size_t K_SCENE_HEADER_SIZE
Definition ZoneShaderCommon.h:70
constexpr size_t K_SCENE_DATA_OFFSET
Definition ZoneShaderCommon.h:73
constexpr size_t K_ZONE_EXTENSION_SIZE
Definition ZoneShaderCommon.h:78
constexpr size_t K_ZONE_EXTENSION_OFFSET
Definition ZoneShaderCommon.h:77
constexpr size_t K_SCENE_HEADER_OFFSET
Definition ZoneShaderCommon.h:69
constexpr size_t K_SCENE_DATA_SIZE
Definition ZoneShaderCommon.h:74
Definition ShaderCompiler.h:15
constexpr int MaxZones
Maximum number of zones the zone-aware UBO supports.
Definition ZoneShaderCommon.h:23
UBO region offsets and sizes for partial updates (reduces GPU bandwidth).
Definition BaseUniforms.h:165
constexpr double kShaderTimeWrap
Time wrap period for float32 precision preservation.
Definition BaseUniforms.h:11
Parsed zone color data for shader rendering.
Definition ZoneShaderCommon.h:115
float a
Definition ZoneShaderCommon.h:119
ZoneColor(float red, float green, float blue, float alpha=1.0f)
Definition ZoneShaderCommon.h:122
float g
Definition ZoneShaderCommon.h:117
float r
Definition ZoneShaderCommon.h:116
static ZoneColor fromQColor(const QColor &color)
Definition ZoneShaderCommon.h:130
float b
Definition ZoneShaderCommon.h:118
QVector4D toVector4D() const
Definition ZoneShaderCommon.h:136
Thread-safe zone data snapshot for the render thread.
Definition ZoneShaderCommon.h:146
int highlightedCount
Definition ZoneShaderCommon.h:151
QVector< ZoneColor > borderColors
Definition ZoneShaderCommon.h:149
int version
Definition ZoneShaderCommon.h:152
QVector< ZoneColor > fillColors
Definition ZoneShaderCommon.h:148
int zoneCount
Definition ZoneShaderCommon.h:150
QVector< ZoneRect > rects
Definition ZoneShaderCommon.h:147
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
Parsed zone rectangle data for shader rendering.
Definition ZoneShaderCommon.h:100
bool highlighted
Definition ZoneShaderCommon.h:106
float borderWidth
Definition ZoneShaderCommon.h:108
float width
Definition ZoneShaderCommon.h:103
float height
Definition ZoneShaderCommon.h:104
int zoneNumber
Definition ZoneShaderCommon.h:105
float y
Definition ZoneShaderCommon.h:102
float x
Definition ZoneShaderCommon.h:101
float borderRadius
Definition ZoneShaderCommon.h:107
GPU uniform buffer layout — BaseUniforms + zone extension.
Definition ZoneShaderCommon.h:41
float zoneParams[MaxZones][4]
Definition ZoneShaderCommon.h:49
float zoneFillColors[MaxZones][4]
Definition ZoneShaderCommon.h:47
PhosphorShaders::BaseUniforms base
Definition ZoneShaderCommon.h:43
float zoneRects[MaxZones][4]
Definition ZoneShaderCommon.h:46
float zoneBorderColors[MaxZones][4]
Definition ZoneShaderCommon.h:48
GPU uniform buffer layout following std140 rules (base region).
Definition BaseUniforms.h:37