mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-24 06:51:17 +01:00
Stop normalizing light directions
This normalization was added in 02ac5e95c84a1d9a46df1dc4102342fb653e36ee (and changed to use floats in 4bf031c0646e91b35777f1ba4e2b0328063bb666). However, this normalization introduces NaN values in some cases, which is causing problems for the version of Mesa in use on FifoCI (currently 20.3.5). Although Mesa's NaN behavior is corrected by b3f3287eac
(21.2.0), FifoCI is currently stuck with the older version.
This commit is contained in:
parent
ceae42b754
commit
63e299e1a1
@ -172,22 +172,9 @@ void VertexShaderManager::SetConstants(const std::vector<std::string>& textures)
|
||||
dstlight.pos[1] = light.dpos[1];
|
||||
dstlight.pos[2] = light.dpos[2];
|
||||
|
||||
// TODO: Hardware testing is needed to confirm that this normalization is correct
|
||||
auto sanitize = [](float f) {
|
||||
if (std::isnan(f))
|
||||
return 0.0f;
|
||||
else if (std::isinf(f))
|
||||
return f > 0.0f ? 1.0f : -1.0f;
|
||||
else
|
||||
return f;
|
||||
};
|
||||
double norm = double(light.ddir[0]) * double(light.ddir[0]) +
|
||||
double(light.ddir[1]) * double(light.ddir[1]) +
|
||||
double(light.ddir[2]) * double(light.ddir[2]);
|
||||
norm = 1.0 / sqrt(norm);
|
||||
dstlight.dir[0] = sanitize(static_cast<float>(light.ddir[0] * norm));
|
||||
dstlight.dir[1] = sanitize(static_cast<float>(light.ddir[1] * norm));
|
||||
dstlight.dir[2] = sanitize(static_cast<float>(light.ddir[2] * norm));
|
||||
dstlight.dir[0] = light.ddir[0];
|
||||
dstlight.dir[1] = light.ddir[1];
|
||||
dstlight.dir[2] = light.ddir[2];
|
||||
}
|
||||
dirty = true;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user