On Sat, 18 Dec 2021 16:00:24 GMT, Nir Lisker <nlis...@openjdk.org> wrote:

>> modules/javafx.graphics/src/main/native-prism-d3d/hlsl/psMath.h line 106:
>> 
>>> 104: 
>>> 105: void computeLight(float i, float3 n, float3 refl, float specPower, 
>>> float3 L, float3 lightDir, in out float3 d, in out float3 s) {
>>> 106:     if (gLightAttenuation[i].w < 0.5) {
>> 
>> Is there any performance difference between `< 0.5` and `!= 0` ? I suspect 
>> not, but in any case, you might consider the latter (as I also mentioned in 
>> the java files). The latter is more clear, so if you choose to stick with 
>> what you have, I'd like to see a comment added.
>
> Initially I went with the equality test, but it did not work well, probably 
> since we are comparing floating points. This just seemed safer. If you want 
> to try the equality test on you machine(s) it would be interesting, but I 
> don't know if I would trust it. Same with the ES shaders. On the Java side I 
> would trust it, but at this point it's a matter of consistency.
> 
> I suspect that this also messed up with the computation approaches of spot 
> light that check `falloff != 0` where we should be checking with a small 
> delta: `abs(falloff) < EPSILON` instead.
> Performance should be revisited anyway I think at a later stage after the 
> emissive color is added (where we need to figure out splitting shaders, which 
> also has to do with the removal of the 3 lights restriction).

It seems safer then to either leave it the way you have it (in which case, 
please a comment), or change it to `abs(gLightAttenuation[i].w) < EPSILON` both 
here and in the Java code (for consistency). I'll leave it up to you.

For spot light, you might want to file a new bug to address the `falloff != 0` 
problem.

I agree about deferring the performance question.

-------------

PR: https://git.openjdk.java.net/jfx/pull/548

Reply via email to