| 80 | } |
| 81 | |
| 82 | Material::UpdateFlags RGLMaterial::update(MaterialSystem* pOwner) |
| 83 | { |
| 84 | FALCOR_ASSERT(pOwner); |
| 85 | |
| 86 | auto flags = Material::UpdateFlags::None; |
| 87 | if (mUpdates != Material::UpdateFlags::None) |
| 88 | { |
| 89 | auto checkBuffer = [&](ref<Buffer>& buf, uint& handle) |
| 90 | { |
| 91 | // If a BRDF was already loaded and we're just updating data, |
| 92 | // then buffer handles are already assigned. |
| 93 | // Replace the buffer contents instead of adding a new buffer. |
| 94 | if (mBRDFUploaded) |
| 95 | { |
| 96 | pOwner->replaceBuffer(handle, buf); |
| 97 | } |
| 98 | else |
| 99 | { |
| 100 | uint32_t bufferID = pOwner->addBuffer(buf); |
| 101 | if (bufferID != handle) mUpdates |= Material::UpdateFlags::DataChanged; |
| 102 | handle = bufferID; |
| 103 | } |
| 104 | }; |
| 105 | |
| 106 | checkBuffer(mpThetaBuf, mData.thetaBufID); |
| 107 | checkBuffer(mpPhiBuf, mData.phiBufID); |
| 108 | checkBuffer(mpSigmaBuf, mData.sigmaBufID); |
| 109 | checkBuffer(mpNDFBuf, mData.ndfBufID); |
| 110 | checkBuffer(mpVNDFBuf, mData.vndfBufID); |
| 111 | checkBuffer(mpLumiBuf, mData.lumiBufID); |
| 112 | checkBuffer(mpRGBBuf, mData.rgbBufID); |
| 113 | checkBuffer(mpVNDFMarginalBuf, mData.vndfMarginalBufID); |
| 114 | checkBuffer(mpLumiMarginalBuf, mData.lumiMarginalBufID); |
| 115 | checkBuffer(mpVNDFConditionalBuf, mData.vndfConditionalBufID); |
| 116 | checkBuffer(mpLumiConditionalBuf, mData.lumiConditionalBufID); |
| 117 | updateTextureHandle(pOwner, mpAlbedoLUT, mData.texAlbedoLUT); |
| 118 | mBRDFUploaded = true; |
| 119 | |
| 120 | flags |= mUpdates; |
| 121 | mUpdates = Material::UpdateFlags::None; |
| 122 | } |
| 123 | |
| 124 | return flags; |
| 125 | } |
| 126 | |
| 127 | bool RGLMaterial::isEqual(const ref<Material>& pOther) const |
| 128 | { |
no test coverage detected