Showing the changes to libraries/render-utils/src/MeshPartPayload.cpp (1 of 6 files). Show all
Unified · Split
| @@ -321,19 +321,10 @@ template <> void payloadRender(const ModelMeshPartPayload::Pointer& payload, Ren · 320 unmodified lines | |||
| 321 | } | 321 | } |
| 322 | } | 322 | } |
| 323 | 323 | ||
| 324 | struct ModelMeshPartPayload::Fade | ||
| 325 | { | ||
| 326 | glm::vec3 _offset; // The noise offset | ||
| 327 | float _percent; // The fade percent | ||
| 328 | }; | ||
| 329 | |||
| 330 | ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int _meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform) : | 324 | ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int _meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform) : |
| 331 | _meshIndex(_meshIndex), | 325 | _meshIndex(_meshIndex), |
| 332 | _shapeID(shapeIndex) { | 326 | _shapeID(shapeIndex) { |
| 333 | 327 | ||
| 334 | Fade fade; | ||
| 335 | _fadeBuffer = gpu::BufferView(std::make_shared<gpu::Buffer>(sizeof(Fade), (const gpu::Byte*) &fade)); | ||
| 336 | |||
| 337 | assert(model && model->isLoaded()); | 328 | assert(model && model->isLoaded()); |
| 338 | _model = model; | 329 | _model = model; |
| 339 | auto& modelMesh = model->getGeometry()->getMeshes().at(_meshIndex); | 330 | auto& modelMesh = model->getGeometry()->getMeshes().at(_meshIndex); |
| @@ -493,7 +484,7 @@ ShapeKey ModelMeshPartPayload::getShapeKey() const { · 153 unmodified lines | |||
| 493 | if (wireframe) { | 484 | if (wireframe) { |
| 494 | builder.withWireframe(); | 485 | builder.withWireframe(); |
| 495 | } | 486 | } |
| 496 | if (_fadeState != FADE_COMPLETE) { | 487 | if (_fadeState != FadeEffect::Complete) { |
| 497 | builder.withFade(); | 488 | builder.withFade(); |
| 498 | } | 489 | } |
| 499 | return builder.build(); | 490 | return builder.build(); |
| @@ -529,48 +520,6 @@ void ModelMeshPartPayload::bindTransform(gpu::Batch& batch, const ShapePipeline: · 29 unmodified lines | |||
| 529 | batch.setModelTransform(_transform); | 520 | batch.setModelTransform(_transform); |
| 530 | } | 521 | } |
| 531 | 522 | ||
| 532 | float ModelMeshPartPayload::computeFadePercent() const { | ||
| 533 | if (_fadeState == FADE_WAITING_TO_START) { | ||
| 534 | return 0.0f; | ||
| 535 | } | ||
| 536 | float fadeAlpha = 1.0f; | ||
| 537 | const double INV_FADE_PERIOD = 1.0 / (double)(3 * USECS_PER_SECOND); | ||
| 538 | double fraction = (double)(usecTimestampNow() - _fadeStartTime) * INV_FADE_PERIOD; | ||
| 539 | if (fraction < 1.0) { | ||
| 540 | fadeAlpha = Interpolate::simpleNonLinearBlend(fraction); | ||
| 541 | } | ||
| 542 | if (fadeAlpha >= 1.0f) { | ||
| 543 | _fadeState = FADE_COMPLETE; | ||
| 544 | // when fade-in completes we flag model for one last "render item update" | ||
| 545 | ModelPointer model = _model.lock(); | ||
| 546 | if (model) { | ||
| 547 | model->setRenderItemsNeedUpdate(); | ||
| 548 | } | ||
| 549 | fadeAlpha = 1.0f; | ||
| 550 | } | ||
| 551 | return fadeAlpha; | ||
| 552 | } | ||
| 553 | |||
| 554 | void ModelMeshPartPayload::bindFade(gpu::Batch& batch) const { | ||
| 555 | const bool isDebugEnabled = DependencyManager::get<FadeEffect>()->isDebugEnabled(); | ||
| 556 | |||
| 557 | if (_fadeState != FADE_COMPLETE || isDebugEnabled) { | ||
| 558 | auto& fade = _fadeBuffer.edit<Fade>(); | ||
| 559 | glm::vec3 offset = _transform.getTranslation(); | ||
| 560 | |||
| 561 | // A bit ugly to have the test at every bind... | ||
| 562 | if (!isDebugEnabled) { | ||
| 563 | fade._percent = computeFadePercent(); | ||
| 564 | } | ||
| 565 | else { | ||
| 566 | fade._percent = DependencyManager::get<FadeEffect>()->getDebugFadePercent(); | ||
| 567 | } | ||
| 568 | |||
| 569 | fade._offset = offset; | ||
| 570 | batch.setUniformBuffer(ShapePipeline::Slot::BUFFER::FADE, _fadeBuffer); | ||
| 571 | } | ||
| 572 | } | ||
| 573 | |||
| 574 | void ModelMeshPartPayload::render(RenderArgs* args) { | 523 | void ModelMeshPartPayload::render(RenderArgs* args) { |
| 575 | PerformanceTimer perfTimer("ModelMeshPartPayload::render"); | 524 | PerformanceTimer perfTimer("ModelMeshPartPayload::render"); |
| 576 | 525 | ||
| @@ -579,13 +528,13 @@ void ModelMeshPartPayload::render(RenderArgs* args) { · 2 unmodified lines | |||
| 579 | return; // bail asap | 528 | return; // bail asap |
| 580 | } | 529 | } |
| 581 | 530 | ||
| 582 | if (_fadeState == FADE_WAITING_TO_START) { | 531 | if (_fadeState == FadeEffect::WaitingToStart) { |
| 583 | if (model->isLoaded()) { | 532 | if (model->isLoaded()) { |
| 584 | if (EntityItem::getEntitiesShouldFadeFunction()()) { | 533 | if (EntityItem::getEntitiesShouldFadeFunction()()) { |
| 585 | _fadeStartTime = usecTimestampNow(); | 534 | _fadeStartTime = usecTimestampNow(); |
| 586 | _fadeState = FADE_IN_PROGRESS; | 535 | _fadeState = FadeEffect::InProgress; |
| 587 | } else { | 536 | } else { |
| 588 | _fadeState = FADE_COMPLETE; | 537 | _fadeState = FadeEffect::Complete; |
| 589 | } | 538 | } |
| 590 | model->setRenderItemsNeedUpdate(); | 539 | model->setRenderItemsNeedUpdate(); |
| 591 | } else { | 540 | } else { |
| @@ -618,7 +567,7 @@ void ModelMeshPartPayload::render(RenderArgs* args) { · 26 unmodified lines | |||
| 618 | bindMaterial(batch, locations, args->_enableTexturing); | 567 | bindMaterial(batch, locations, args->_enableTexturing); |
| 619 | 568 | ||
| 620 | // Apply fade effect | 569 | // Apply fade effect |
| 621 | bindFade(batch); | 570 | DependencyManager::get<FadeEffect>()->bindPerItem(batch, args, _transform.getTranslation(), _fadeStartTime, _fadeState); |
| 622 | 571 | ||
| 623 | args->_details._materialSwitches++; | 572 | args->_details._materialSwitches++; |
| 624 | 573 | ||