Back color configurable, added fps counter checkbox

This commit is contained in:
2026-03-28 13:32:26 +01:00
parent bb93ecdc5d
commit 69aa4e079d
4 changed files with 18 additions and 17 deletions

View File

@@ -45,14 +45,14 @@ void psxsplash::Renderer::SetCamera(psxsplash::Camera& camera) { m_currentCamera
void psxsplash::Renderer::SetFog(const FogConfig& fog) {
m_fog = fog;
// Always use fog color as the GPU clear/back color
m_clearcolor = fog.color;
if (fog.enabled) {
m_clearcolor = fog.color;
write<Register::RFC, Unsafe>(static_cast<uint32_t>(fog.color.r) << 4);
write<Register::GFC, Unsafe>(static_cast<uint32_t>(fog.color.g) << 4);
write<Register::BFC, Safe>(static_cast<uint32_t>(fog.color.b) << 4);
m_fog.fogFarSZ = 8000 / fog.density;
} else {
m_clearcolor = {.r = 0, .g = 0, .b = 0};
m_fog.fogFarSZ = 0;
}
}
@@ -135,9 +135,8 @@ void psxsplash::Renderer::processTriangle(
int32_t fogIR[3] = {0, 0, 0};
if (fogFarSZ > 0) {
int32_t fogNear = fogFarSZ / 4;
int32_t range4 = (fogFarSZ - fogNear) >> 4;
if (range4 < 1) range4 = 1;
int32_t scale = 4096 / range4;
int32_t range = fogFarSZ - fogNear;
if (range < 1) range = 1;
int32_t szArr[3] = {sz0, sz1, sz2};
for (int vi = 0; vi < 3; vi++) {
int32_t ir;
@@ -146,11 +145,10 @@ void psxsplash::Renderer::processTriangle(
} else if (szArr[vi] >= fogFarSZ) {
ir = 4096;
} else {
ir = ((szArr[vi] - fogNear) * scale) >> 4;
if (ir > 4096) ir = 4096;
int32_t inv = 4096 - ir;
ir = 4096 - ((inv >> 2) * (inv >> 2) >> 8);
if (ir < 0) ir = 0;
// Linear 0..4096 over [fogNear, fogFarSZ]
int32_t t = ((szArr[vi] - fogNear) * 4096) / range;
// Quadratic ease-in: t^2 / 4096
ir = (t * t) >> 12;
}
fogIR[vi] = ir;
}