community-shaders/skyrim-community-shaders
Voir sur GitHubEnable HDR when HMDs support
Open
#2 102 ouverte le 12 avr. 2026
VRhelp wanted
Métriques du dépôt
- Stars
- (1 037 stars)
- Métriques de merge PR
- (Merge moyen 2j 4h) (63 PRs mergées en 30 j)
Description
HDR composite (PQ encode, paper white, peak nits) HERE, writing the
result back to kFRAMEBUFFER so ISCopy distributes HDR-processed content
to both the HMD and companion at their native sizes. The post-Present
ApplyHDR path cannot do this correctly because ISCopy has already run
and the companion back buffer (1024x1024) does not match outputTexture
(sized from kMAIN). Requires hooking the ISCopy vfunc to fire
HDROutputCS before distribution.
hdr->RedirectFramebuffer();
func(a_this, a3, a_target, a_4, a_5);
hdr->RestoreFramebuffer();
// VR: RedirectFramebuffer made ISHDR write to hdrTexture (float16); after
// RestoreFramebuffer kFRAMEBUFFER reverts to its original texture.
// ISCopy reads kFRAMEBUFFER.SRV to distribute the frame to the HMD and
// companion window, so we must write the tonemapped content back into
// kFRAMEBUFFER before ISCopy runs.
//
// TODO (future HDR HMD support): The correct pipeline is to run the full
// HDR composite (PQ encode, paper white, peak nits) HERE, writing the
// result back to kFRAMEBUFFER so ISCopy distributes HDR-processed content
// to both the HMD and companion at their native sizes. The post-Present
// ApplyHDR path cannot do this correctly because ISCopy has already run
// and the companion back buffer (1024x1024) does not match outputTexture
// (sized from kMAIN). Requires hooking the ISCopy vfunc to fire
// HDROutputCS before distribution.
if (globals::game::isVR && hdr->settings.enableHDR &&
hdr->hdrTexture && hdr->hdrTexture->resource) {
auto& fb = globals::game::renderer->GetRuntimeData().renderTargets[RE::RENDER_TARGETS::kFRAMEBUFFER];
if (fb.texture)
globals::d3d::context->CopyResource(fb.texture, hdr->hdrTexture->resource.get());
}
}
static inline REL::Relocation<decltype(thunk)> func;
};