xgpui-gamut 0.2.2

Wide-gamut color extension for xgpui with opt-in linear Display P3 SDR content producers
Documentation
use super::*;
use gpui_windows::custom_draw::Dx11CustomContext;

impl WideColor {
    pub(super) fn prepare_dx11(
        &self,
        backend: &dyn Any,
        extent: Size<DevicePixels>,
    ) -> Result<Box<dyn Any>> {
        let context = backend
            .downcast_ref::<Dx11CustomContext>()
            .ok_or_else(|| anyhow::anyhow!("WideColor requires native D3D11"))?;
        let output = context.create_wide_sdr_output(extent)?;
        #[cfg(test)]
        super::PRODUCER_ALLOCATIONS.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
        let [r, g, b, a] = self.rgba;
        context.record_wide_sdr(&output, |deferred, target| {
            unsafe {
                deferred.ClearRenderTargetView(target, &[r * a, g * a, b * a, a]);
            }
            Ok(())
        })?;
        Ok(Box::new(output))
    }
}