Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
PhosphorShaders::UboFrameState Struct Reference

Snapshot of every node-side value a UBO profile's fill() may read for a single frame. More...

#include <phosphor-shaders/include/PhosphorShaders/IUboProfile.h>

Public Attributes

float time = 0.0f
 Wrapped low part of elapsed seconds (m_time - m_timeHi).
 
float timeHi = 0.0f
 Wrap-offset high part.
 
float timeDelta = 0.0f
 
int frame = 0
 
bool bufferFeedback = false
 
bool bufferFeedbackCleared = false
 
float width = 0.0f
 
float height = 0.0f
 
float mouseX = 0.0f
 
float mouseY = 0.0f
 
bool isReversed = false
 
bool didFullUploadOnce = false
 Whether the first full upload has happened.
 
bool sceneDataDirty = false
 
float customParams [8][4] = {}
 
float customColors [16][4] = {}
 
float channelResolution [4][2] = {}
 iChannelResolution[i].xy — multipass buffer-channel output sizes.
 
float textureResolution [4][2] = {}
 iTextureResolution[i].xy — user-texture slot sizes.
 
int audioSpectrumSize = 0
 
bool yUpInNDC = false
 True when this draw should carry the NDC Y-flip: a Y-up-in-NDC backend (OpenGL, rhi->isYUpInNDC()) AND rendering direct to the window — the producer (ShaderNodeRhi::syncBaseUniforms) clears it when the item is captured into a texture render target (a ShaderEffectSource layer), where a flipped write would invert what the consumer samples.
 
float qtOpacity = 1.0f
 Per-surface opacity from the Qt scene graph.
 
float surfaceScale = 1.0f
 Logical→device pixel scale for the decorated surface.
 
float surfaceFocused = 0.0f
 1.0 when the surface is focused, 0.0 otherwise.
 
float hasBackdrop = 0.0f
 1.0 when a backdrop texture (the scene / wallpaper BEHIND the surface) is actually bound for this draw, 0.0 otherwise.
 
float surfaceSize [2] = {}
 Decorated surface size in device px.
 
float surfaceFrameTopLeft [2] = {}
 Frame top-left in device px.
 
float surfaceFrameSize [2] = {}
 Frame size in device px.
 
float backdropRect [4] = {0.0f, 0.0f, 1.0f, 1.0f}
 The slice of the bound backdrop this surface samples, in normalized texture coords (xy = min, zw = size).
 

Detailed Description

Snapshot of every node-side value a UBO profile's fill() may read for a single frame.

The render node populates this from its members during the sync phase and hands it to fill() — keeping all node→UBO data flow on one explicit seam. A given profile reads only the subset it needs: BaseUniformProfile ignores the surface-only fields; a SurfaceUniformProfile ignores the overlay-only ones.

Member Data Documentation

◆ audioSpectrumSize

int PhosphorShaders::UboFrameState::audioSpectrumSize = 0

◆ backdropRect

float PhosphorShaders::UboFrameState::backdropRect[4] = {0.0f, 0.0f, 1.0f, 1.0f}

The slice of the bound backdrop this surface samples, in normalized texture coords (xy = min, zw = size).

Defaults to the whole texture, which is right for the compositor (its capture already covers this window's canvas) and is the degraded answer for a host that knows of no placement. A daemon or preview host hands every surface the SAME desktop wallpaper, so it narrows this to the part lying behind each one.

◆ bufferFeedback

bool PhosphorShaders::UboFrameState::bufferFeedback = false

◆ bufferFeedbackCleared

bool PhosphorShaders::UboFrameState::bufferFeedbackCleared = false

◆ channelResolution

float PhosphorShaders::UboFrameState::channelResolution[4][2] = {}

iChannelResolution[i].xy — multipass buffer-channel output sizes.

◆ customColors

float PhosphorShaders::UboFrameState::customColors[16][4] = {}

◆ customParams

float PhosphorShaders::UboFrameState::customParams[8][4] = {}

◆ didFullUploadOnce

bool PhosphorShaders::UboFrameState::didFullUploadOnce = false

Whether the first full upload has happened.

The profile uses this (with sceneDataDirty) to gate the 1 Hz iDate wall-clock refresh.

◆ frame

int PhosphorShaders::UboFrameState::frame = 0

◆ hasBackdrop

float PhosphorShaders::UboFrameState::hasBackdrop = 0.0f

1.0 when a backdrop texture (the scene / wallpaper BEHIND the surface) is actually bound for this draw, 0.0 otherwise.

Feeds the surface UBO's uHasBackdrop gate, which a needsBackdrop pack branches on to choose between sampling the backdrop and its own fallback appearance.

Derived by the node from whether the binding is live rather than set by a host: the gate and the sampler must never disagree, or a pack samples a texture that was never bound.

◆ height

float PhosphorShaders::UboFrameState::height = 0.0f

◆ isReversed

bool PhosphorShaders::UboFrameState::isReversed = false

◆ mouseX

float PhosphorShaders::UboFrameState::mouseX = 0.0f

◆ mouseY

float PhosphorShaders::UboFrameState::mouseY = 0.0f

◆ qtOpacity

float PhosphorShaders::UboFrameState::qtOpacity = 1.0f

Per-surface opacity from the Qt scene graph.

◆ sceneDataDirty

bool PhosphorShaders::UboFrameState::sceneDataDirty = false

◆ surfaceFocused

float PhosphorShaders::UboFrameState::surfaceFocused = 0.0f

1.0 when the surface is focused, 0.0 otherwise.

◆ surfaceFrameSize

float PhosphorShaders::UboFrameState::surfaceFrameSize[2] = {}

Frame size in device px.

◆ surfaceFrameTopLeft

float PhosphorShaders::UboFrameState::surfaceFrameTopLeft[2] = {}

Frame top-left in device px.

◆ surfaceScale

float PhosphorShaders::UboFrameState::surfaceScale = 1.0f

Logical→device pixel scale for the decorated surface.

◆ surfaceSize

float PhosphorShaders::UboFrameState::surfaceSize[2] = {}

Decorated surface size in device px.

◆ textureResolution

float PhosphorShaders::UboFrameState::textureResolution[4][2] = {}

iTextureResolution[i].xy — user-texture slot sizes.

◆ time

float PhosphorShaders::UboFrameState::time = 0.0f

Wrapped low part of elapsed seconds (m_time - m_timeHi).

◆ timeDelta

float PhosphorShaders::UboFrameState::timeDelta = 0.0f

◆ timeHi

float PhosphorShaders::UboFrameState::timeHi = 0.0f

Wrap-offset high part.

◆ width

float PhosphorShaders::UboFrameState::width = 0.0f

◆ yUpInNDC

bool PhosphorShaders::UboFrameState::yUpInNDC = false

True when this draw should carry the NDC Y-flip: a Y-up-in-NDC backend (OpenGL, rhi->isYUpInNDC()) AND rendering direct to the window — the producer (ShaderNodeRhi::syncBaseUniforms) clears it when the item is captured into a texture render target (a ShaderEffectSource layer), where a flipped write would invert what the consumer samples.

Drives the qt_Matrix Y-flip the profile folds into fill().


The documentation for this struct was generated from the following file: