| 204 | } |
| 205 | |
| 206 | void SDFEditor::setScene(RenderContext* pRenderContext, const ref<Scene>& pScene) |
| 207 | { |
| 208 | mpScene = pScene; |
| 209 | |
| 210 | if (!mpScene) |
| 211 | return; |
| 212 | |
| 213 | mpCamera = mpScene->getCamera(); |
| 214 | mpGUIPass = FullScreenPass::create( |
| 215 | mpDevice, ProgramDesc().addShaderLibrary(kGUIPassShaderFilename).psEntry("psMain"), mpScene->getSceneDefines() |
| 216 | ); |
| 217 | |
| 218 | // Initialize editing primitive. |
| 219 | { |
| 220 | const SDF3DShapeType kDefaultShapeType = SDF3DShapeType::Sphere; |
| 221 | const float3 kDefaultShapeData = float3(0.01f); |
| 222 | const float kDefaultShapeBlobbing = 0.0f; |
| 223 | const float kDefaultOperationSmoothing = 0.0f; |
| 224 | const SDFOperationType kDefaultOperationType = SDFOperationType::Union; |
| 225 | const Transform kDefaultTransform = Transform(); |
| 226 | |
| 227 | mUI2D.currentEditingShape = kDefaultShapeType; |
| 228 | mUI2D.currentEditingOperator = kDefaultOperationType; |
| 229 | |
| 230 | if (mpScene->getSDFGridCount() > 0) |
| 231 | { |
| 232 | std::vector<uint32_t> instanceIDs = mpScene->getGeometryInstanceIDsByType(Scene::GeometryType::SDFGrid); |
| 233 | if (instanceIDs.empty()) |
| 234 | FALCOR_THROW("Scene missing SDFGrid object!"); |
| 235 | |
| 236 | mCurrentEdit.instanceID = instanceIDs[0]; |
| 237 | GeometryInstanceData instance = mpScene->getGeometryInstance(mCurrentEdit.instanceID); |
| 238 | SdfGridID sdfGridID = mpScene->findSDFGridIDFromGeometryInstanceID(mCurrentEdit.instanceID); |
| 239 | FALCOR_ASSERT(sdfGridID != SdfGridID::Invalid()); |
| 240 | mCurrentEdit.gridID = sdfGridID; |
| 241 | mCurrentEdit.pSDFGrid = mpScene->getSDFGrid(sdfGridID); |
| 242 | mCurrentEdit.primitive = SDF3DPrimitiveFactory::initCommon( |
| 243 | kDefaultShapeType, |
| 244 | kDefaultShapeData, |
| 245 | kDefaultShapeBlobbing, |
| 246 | kDefaultOperationSmoothing, |
| 247 | kDefaultOperationType, |
| 248 | kDefaultTransform |
| 249 | ); |
| 250 | |
| 251 | const AnimationController* pAnimationController = mpScene->getAnimationController(); |
| 252 | const float4x4& transform = pAnimationController->getGlobalMatrices()[instance.globalMatrixID]; |
| 253 | |
| 254 | // Update GUI variables |
| 255 | mUI2D.bbRenderSettings.selectedInstanceID = mCurrentEdit.instanceID; |
| 256 | mUI2D.gridPlane.position = transform.getCol(3).xyz(); |
| 257 | mUI2D.previousGridPlane.position = transform.getCol(3).xyz(); |
| 258 | |
| 259 | updateSymmetryPrimitive(); |
| 260 | } |
| 261 | } |
| 262 | |
| 263 | mNonBakedPrimitiveCount = mCurrentEdit.pSDFGrid->getPrimitiveCount(); |
nothing calls this directly
no test coverage detected