Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
PhosphorShaders::IUniformExtension Class Referenceabstract

Interface for appending custom uniform data after the base UBO layout. More...

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

Inheritance diagram for PhosphorShaders::IUniformExtension:
[legend]

Public Member Functions

virtual ~IUniformExtension ()=default
 
virtual int extensionSize () const =0
 Size in bytes of the extension region (must respect std140 alignment).
 
virtual void write (char *buffer, int offset) const =0
 Write extension data into buffer starting at offset.
 
virtual bool isDirty () const =0
 Whether the extension data has changed since the last write.
 
virtual void clearDirty ()=0
 Mark as clean after a successful write.
 
virtual bool requiresPhysicalResolution () const
 Whether iResolution in this extension's UBO should be uploaded in PHYSICAL pixels (DPR-scaled, matches gl_FragCoord) or LOGICAL pixels (matches the QQuickItem's bounds and Qt's auto-interpolated vTexCoord).
 

Detailed Description

Interface for appending custom uniform data after the base UBO layout.

The RHI render node allocates sizeof(BaseUniforms) + extensionSize() bytes for the UBO. During prepare(), if isDirty() returns true, write() is called to fill the extension region.

All methods may be called on the render thread.

Constructor & Destructor Documentation

◆ ~IUniformExtension()

virtual PhosphorShaders::IUniformExtension::~IUniformExtension ( )
virtualdefault

Member Function Documentation

◆ clearDirty()

virtual void PhosphorShaders::IUniformExtension::clearDirty ( )
pure virtual

Mark as clean after a successful write.

Implemented in PhosphorAnimation::AnimationUniformExtension, and PhosphorRendering::ZoneUniformExtension.

◆ extensionSize()

virtual int PhosphorShaders::IUniformExtension::extensionSize ( ) const
pure virtual

Size in bytes of the extension region (must respect std140 alignment).

Must be stable for the lifetime of the extension instance: the render node sizes the UBO and its staging buffer once when the extension is installed (via setUniformExtension) and reuses both across frames. A changing size silently bypasses the resize path and risks UBO write overruns. To change the size, install a fresh IUniformExtension instance with the new size — that triggers UBO recreation.

Implemented in PhosphorAnimation::AnimationUniformExtension, and PhosphorRendering::ZoneUniformExtension.

◆ isDirty()

virtual bool PhosphorShaders::IUniformExtension::isDirty ( ) const
pure virtual

Whether the extension data has changed since the last write.

Implemented in PhosphorAnimation::AnimationUniformExtension, and PhosphorRendering::ZoneUniformExtension.

◆ requiresPhysicalResolution()

virtual bool PhosphorShaders::IUniformExtension::requiresPhysicalResolution ( ) const
inlinevirtual

Whether iResolution in this extension's UBO should be uploaded in PHYSICAL pixels (DPR-scaled, matches gl_FragCoord) or LOGICAL pixels (matches the QQuickItem's bounds and Qt's auto-interpolated vTexCoord).

Default true (physical) is the legacy overlay-shader contract — zone-overlay fragment shaders sample gl_FragCoord / iResolution for SDF masks and expect both sides in physical pixels. Extensions whose shader contract uses vTexCoord (the rasterised quad's 0..1 interpolated UV, DPR-independent) and reads other-extension fields that ride on logical-pixel semantics (animation shaders' iAnchorSize / iAnchorPosInFbo / iSurfaceScreenPos magic-constant tuning) override to false so the ratios stay dimensionally consistent across the UBO.

Reimplemented in PhosphorAnimation::AnimationUniformExtension.

◆ write()

virtual void PhosphorShaders::IUniformExtension::write ( char *  buffer,
int  offset 
) const
pure virtual

Write extension data into buffer starting at offset.

Called on the render thread during prepare().

Implemented in PhosphorAnimation::AnimationUniformExtension, and PhosphorRendering::ZoneUniformExtension.


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