History

Switched to uniforms for sending fade shader data. Moved more fade functions to FadeEffect class

Olivier Prat committed 9 years ago

Commit de143d01 parent a9ab9d26 files · +60 −84Browse files

Showing the changes to libraries/render-utils/src/MeshPartPayload.cpp (1 of 6 files). Show all

Unified · Split

libraries/render-utils/src/MeshPartPayload.cpp+5−56
@@ -321,19 +321,10 @@ template <> void payloadRender(const ModelMeshPartPayload::Pointer& payload, Ren · 320 unmodified lines
321}321}
322}322}
323 323
324struct ModelMeshPartPayload::Fade
325{
326 glm::vec3 _offset; // The noise offset
327 float _percent; // The fade percent
328};
329
330ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int _meshIndex, int partIndex, int shapeIndex, const Transform& transform, const Transform& offsetTransform) :324ModelMeshPartPayload::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
532float 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
554void 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
574void ModelMeshPartPayload::render(RenderArgs* args) {523void 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 asap528 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 effect569 // 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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t