mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-09 04:49:39 -10:00
- Bind the GL raw-depth sampler on unit 11 in the deferred pass and unbind it after the pass. - Enable RTAO only when shadows are on, and remove the RTAO option when ray tracing is not supported. - Use every second Poisson tap in the PCSS blocker search. - Use TLAS-relative ray origins for RTAO. - Gate +AngularSize: at version 27.0. - Measure an .eff sun from its first frame, and skip the measurement when shadows are off. - Guard the GL 3.3 sampler check for GLES builds. - Restore the lab session overrides when the lab closes. Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
51 lines
1.9 KiB
C++
51 lines
1.9 KiB
C++
#include "graphics/rtao.h"
|
|
|
|
#include "graphics/2d.h"
|
|
#include "graphics/shadows.h"
|
|
#include "options/Option.h"
|
|
|
|
int Rtao_samples = 0;
|
|
|
|
// coverity[GLOBAL_INIT_ORDER] -- safe; OptionBuilder::finish() uses Meyers singleton
|
|
auto RtaoQualityOption = options::OptionBuilder<int>("Graphics.RtaoQuality",
|
|
std::pair<const char*, int>{"Raytraced Ambient Occlusion", -1},
|
|
std::pair<const char*, int>{"Rays traced per pixel for ambient occlusion in the deferred ambient pass; Off keeps baked AO maps only", -1})
|
|
.enumerator([]() -> SCP_vector<int> {
|
|
if (rtao_supported()) {
|
|
return {0, 4, 8, 16};
|
|
}
|
|
return {0}; // inert default when RT isn't supported
|
|
})
|
|
.display(options::MapValueDisplay<int>({
|
|
{0, {"Off", -1}},
|
|
{4, {"Low", -1}},
|
|
{8, {"Medium", -1}},
|
|
{16, {"High", -1}}
|
|
}))
|
|
.bind_to(&Rtao_samples)
|
|
.flags({options::OptionFlags::ForceMultiValueSelection})
|
|
.level(options::ExpertLevel::Advanced)
|
|
.category(std::make_pair("Graphics", 1825))
|
|
.default_func([]() { return 0; })
|
|
.importance(71)
|
|
.finish();
|
|
|
|
bool rtao_supported()
|
|
{
|
|
return gr_is_capable(gr_capability::CAPABILITY_RAYTRACED_SHADOWS);
|
|
}
|
|
|
|
bool rtao_enabled()
|
|
{
|
|
// The shadow cascade parameters that RTAO reads are only created when shadows are on.
|
|
return Rtao_samples > 0 && rtao_supported() && Shadow_quality != ShadowQuality::Disabled;
|
|
}
|
|
|
|
void rtao_remove_unsupported_options()
|
|
{
|
|
if (!rtao_supported()) {
|
|
// The option has no effect without raytracing support, so remove it.
|
|
options::OptionsManager::instance()->removeOption(RtaoQualityOption);
|
|
}
|
|
}
|