Back color configurable, added fps counter checkbox
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user