mmp / pbrt-v3

Source code for pbrt, the renderer described in the third edition of "Physically Based Rendering: From Theory To Implementation", by Matt Pharr, Wenzel Jakob, and Greg Humphreys.
http://pbrt.org
BSD 2-Clause "Simplified" License
4.86k stars 1.18k forks source link

Fixing ResampleLinearSpectrum method in spectrum.cpp #249

Closed Kapsler closed 4 years ago

Kapsler commented 5 years ago

I debugged and tested this with VS2019 16.1.3.

The problem was an index out of bounds problem where end would be -1. This worked on all Configurations but "Release" for me. Somehow the compiler flag /Ob (Inline Function Expansion) on level 2 did something different than on level 1. (Test was working on level 1) The access to lambdaIn[-1] returned -nan in "Release" (with /Ob2) but an tiny tiny value in all other Configurations. I just made sure that end should never be smaller than null. Now all tests seem to work.

I didn't investigate further what the EXACT problem was, this would take too long for me now. If anyone knows the itty bitty details, please let me know.

Cheers, Stefan

mmp commented 4 years ago

Thanks!

I think this was the problem (a few lines up...)

        if (lambda - delta < lambdaIn[0])
            // Virtual sample at the start, as described above.
            start = -1;