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 | 324 | ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int _meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform) : |
| 331 | 325 | _meshIndex(_meshIndex), |
| 332 | 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 | 328 | assert(model && model->isLoaded()); |
| 338 | 329 | _model = model; |
| 339 | 330 | auto& modelMesh = model->getGeometry()->getMeshes().at(_meshIndex); |
| @@ -493,7 +484,7 @@ ShapeKey ModelMeshPartPayload::getShapeKey() const { · 153 unmodified lines | ||
| 493 | 484 | if (wireframe) { |
| 494 | 485 | builder.withWireframe(); |
| 495 | 486 | } |
| 496 | − if (_fadeState != FADE_COMPLETE) { | |
| 487 | + if (_fadeState != FadeEffect::Complete) { | |
| 497 | 488 | builder.withFade(); |
| 498 | 489 | } |
| 499 | 490 | return builder.build(); |
| @@ -529,48 +520,6 @@ void ModelMeshPartPayload::bindTransform(gpu::Batch& batch, const ShapePipeline: · 29 unmodified lines | ||
| 529 | 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 | 523 | void ModelMeshPartPayload::render(RenderArgs* args) { |
| 575 | 524 | PerformanceTimer perfTimer("ModelMeshPartPayload::render"); |
| 576 | 525 | |
| @@ -579,13 +528,13 @@ void ModelMeshPartPayload::render(RenderArgs* args) { · 2 unmodified lines | ||
| 579 | 528 | return; // bail asap |
| 580 | 529 | } |
| 581 | 530 | |
| 582 | − if (_fadeState == FADE_WAITING_TO_START) { | |
| 531 | + if (_fadeState == FadeEffect::WaitingToStart) { | |
| 583 | 532 | if (model->isLoaded()) { |
| 584 | 533 | if (EntityItem::getEntitiesShouldFadeFunction()()) { |
| 585 | 534 | _fadeStartTime = usecTimestampNow(); |
| 586 | − _fadeState = FADE_IN_PROGRESS; | |
| 535 | + _fadeState = FadeEffect::InProgress; | |
| 587 | 536 | } else { |
| 588 | − _fadeState = FADE_COMPLETE; | |
| 537 | + _fadeState = FadeEffect::Complete; | |
| 589 | 538 | } |
| 590 | 539 | model->setRenderItemsNeedUpdate(); |
| 591 | 540 | } else { |
| @@ -618,7 +567,7 @@ void ModelMeshPartPayload::render(RenderArgs* args) { · 26 unmodified lines | ||
| 618 | 567 | bindMaterial(batch, locations, args->_enableTexturing); |
| 619 | 568 | |
| 620 | 569 | // Apply fade effect |
| 621 | − bindFade(batch); | |
| 570 | + DependencyManager::get<FadeEffect>()->bindPerItem(batch, args, _transform.getTranslation(), _fadeStartTime, _fadeState); | |
| 622 | 571 | |
| 623 | 572 | args->_details._materialSwitches++; |
| 624 | 573 | |