Allows overriding the live display's characteristics with values from a preset or ICC profile, enabling tone mapping development targeting arbitrary displays without physical hardware.
classDiagram
class DisplayCapabilities {
+bool hdrEnabled
+uint32_t bitsPerColor
+DXGI_COLOR_SPACE_TYPE colorSpace
+float sdrWhiteLevelNits
+float maxLuminanceNits
+float minLuminanceNits
+float maxFullFrameLuminanceNits
}
class ChromaticityXY {
+float x
+float y
}
class DisplayProfile {
+DisplayCapabilities caps
+ChromaticityXY primaryRed
+ChromaticityXY primaryGreen
+ChromaticityXY primaryBlue
+ChromaticityXY whitePoint
+GamutId gamut
+wstring profileName
+bool isSimulated
}
class GamutId {
<<enumeration>>
sRGB
DCI_P3
BT2020
Custom
}
class IccProfileParser {
+LoadFromFile(path) IccProfileData?
}
class IccProfileData {
+wstring description
+ChromaticityXY primaryRed/Green/Blue
+ChromaticityXY whitePoint
+float luminanceNits
+bool valid
}
class DisplayMonitor {
+SetSimulatedProfile(profile)
+ClearSimulatedProfile()
+IsSimulated() bool
+ActiveProfile() DisplayProfile
+CachedCapabilities() DisplayCapabilities
}
DisplayProfile *-- DisplayCapabilities
DisplayProfile *-- ChromaticityXY
DisplayProfile --> GamutId
IccProfileParser ..> IccProfileData : parses
IccProfileData ..> DisplayProfile : DisplayProfileFromIcc()
DisplayMonitor --> DisplayProfile : m_simulatedProfile
sequenceDiagram
participant UI as User / UI
participant DM as DisplayMonitor
participant ICC as IccProfileParser
participant CB as Callback (PipelineFormat)
alt Preset selection
UI->>DM: SetSimulatedProfile(PresetP3_1000())
DM->>DM: Store simulated profile
DM->>CB: callback(profile.caps)
CB->>CB: Re-configure pipeline
end
alt ICC file load
UI->>ICC: LoadFromFile("display.icc")
ICC-->>UI: IccProfileData
UI->>UI: DisplayProfileFromIcc(iccData)
UI->>DM: SetSimulatedProfile(profile)
DM->>DM: Store simulated profile
DM->>CB: callback(profile.caps)
end
alt Clear simulation
UI->>DM: ClearSimulatedProfile()
DM->>DM: Re-query live DXGI output
DM->>CB: callback(liveCaps)
end