inline void PhotonProcess::operator()(const pbrt::Point &p, const Photon &photon, float distSquared, float &maxDistSquared) { if (nFound < nLookup) { // Add photon to unordered array of photons photons[nFound++] = ClosePhoton(&photon, distSquared); if (nFound == nLookup) { std::make_heap(&photons[0], &photons[nLookup]); maxDistSquared = photons[0].distanceSquared; } } else { // Remove most distant photon from heap and add new photon std::pop_heap(&photons[0], &photons[nLookup]); photons[nLookup-1] = ClosePhoton(&photon, distSquared); std::push_heap(&photons[0], &photons[nLookup]); maxDistSquared = photons[0].distanceSquared; } }
void PhotonProcess::operator()(const Photon &photon, float distSquared, float &maxDistSquared) const { static StatsPercentage discarded("Photon Map", "Discarded photons"); // NOBOOK discarded.Add(0, 1); // NOBOOK if (foundPhotons < nLookup) { // Add photon to unordered array of photons photons[foundPhotons++] = ClosePhoton(&photon, distSquared); if (foundPhotons == nLookup) { std::make_heap(&photons[0], &photons[nLookup]); maxDistSquared = photons[0].distanceSquared; } } else { // Remove most distant photon from heap and add new photon discarded.Add(1, 0); // NOBOOK std::pop_heap(&photons[0], &photons[nLookup]); photons[nLookup-1] = ClosePhoton(&photon, distSquared); std::push_heap(&photons[0], &photons[nLookup]); maxDistSquared = photons[0].distanceSquared; } }