| 164 | } |
| 165 | |
| 166 | void SceneDebugger::setScene(RenderContext* pRenderContext, const ref<Scene>& pScene) |
| 167 | { |
| 168 | mUpdateFlagsConnection = {}; |
| 169 | mUpdateFlags = IScene::UpdateFlags::None; |
| 170 | |
| 171 | mpScene = pScene; |
| 172 | mpMeshToBlasID = nullptr; |
| 173 | mpDebugPass = nullptr; |
| 174 | mUpdateFlags = IScene::UpdateFlags::None; |
| 175 | |
| 176 | if (mpScene) |
| 177 | { |
| 178 | mUpdateFlagsConnection = mpScene->getUpdateFlagsSignal().connect([&](IScene::UpdateFlags flags) { mUpdateFlags |= flags; }); |
| 179 | |
| 180 | // Prepare our programs for the scene. |
| 181 | ProgramDesc desc; |
| 182 | desc.addShaderModules(mpScene->getShaderModules()); |
| 183 | desc.addShaderLibrary(kShaderFile).csEntry("main"); |
| 184 | desc.addTypeConformances(mpScene->getTypeConformances()); |
| 185 | |
| 186 | DefineList defines = mpScene->getSceneDefines(); |
| 187 | defines.add(mpSampleGenerator->getDefines()); |
| 188 | mpDebugPass = ComputePass::create(mpDevice, desc, defines); |
| 189 | |
| 190 | // Create lookup table for mesh to BLAS ID. |
| 191 | auto blasIDs = mpScene->getMeshBlasIDs(); |
| 192 | if (!blasIDs.empty()) |
| 193 | { |
| 194 | mpMeshToBlasID = mpDevice->createStructuredBuffer( |
| 195 | sizeof(uint32_t), |
| 196 | (uint32_t)blasIDs.size(), |
| 197 | ResourceBindFlags::ShaderResource, |
| 198 | MemoryType::DeviceLocal, |
| 199 | blasIDs.data(), |
| 200 | false |
| 201 | ); |
| 202 | } |
| 203 | |
| 204 | // Create instance metadata. |
| 205 | initInstanceInfo(); |
| 206 | |
| 207 | // Bind variables. |
| 208 | auto var = mpDebugPass->getRootVar()["CB"]["gSceneDebugger"]; |
| 209 | if (!mpPixelData) |
| 210 | { |
| 211 | mpPixelData = mpDevice->createStructuredBuffer( |
| 212 | var["pixelData"], |
| 213 | 1, |
| 214 | ResourceBindFlags::ShaderResource | ResourceBindFlags::UnorderedAccess, |
| 215 | MemoryType::DeviceLocal, |
| 216 | nullptr, |
| 217 | false |
| 218 | ); |
| 219 | mpPixelDataStaging = |
| 220 | mpDevice->createStructuredBuffer(var["pixelData"], 1, ResourceBindFlags::None, MemoryType::ReadBack, nullptr, false); |
| 221 | } |
| 222 | var["pixelData"] = mpPixelData; |
| 223 | var["meshToBlasID"] = mpMeshToBlasID; |
nothing calls this directly
no test coverage detected