Showing the changes to libraries/render-utils/src/GeometryCache.cpp (1 of 7 files). Show all
Unified · Split
| @@ -450,14 +450,50 @@ gpu::Stream::FormatPointer& getInstancedSolidStreamFormat() { · 449 unmodified lines | ||
| 450 | 450 | return INSTANCED_SOLID_STREAM_FORMAT; |
| 451 | 451 | } |
| 452 | 452 | |
| 453 | +QHash<SimpleProgramKey, gpu::PipelinePointer> GeometryCache::_simplePrograms; | |
| 454 | + | |
| 455 | +gpu::ShaderPointer GeometryCache::_simpleShader; | |
| 456 | +gpu::ShaderPointer GeometryCache::_unlitShader; | |
| 457 | +gpu::ShaderPointer GeometryCache::_simpleFadeShader; | |
| 458 | +gpu::ShaderPointer GeometryCache::_unlitFadeShader; | |
| 459 | + | |
| 453 | 460 | render::ShapePipelinePointer GeometryCache::_simpleOpaquePipeline; |
| 454 | 461 | render::ShapePipelinePointer GeometryCache::_simpleTransparentPipeline; |
| 455 | 462 | render::ShapePipelinePointer GeometryCache::_simpleOpaqueFadePipeline; |
| 456 | 463 | render::ShapePipelinePointer GeometryCache::_simpleTransparentFadePipeline; |
| 457 | 464 | render::ShapePipelinePointer GeometryCache::_simpleWirePipeline; |
| 458 | 465 | |
| 466 | +uint8_t GeometryCache::CUSTOM_PIPELINE_NUMBER = 0; | |
| 467 | + | |
| 468 | +render::ShapePipelinePointer GeometryCache::shapePipelineFactory(const render::ShapePlumber& plumber, const render::ShapeKey& key) { | |
| 469 | + initializeShapePipelines(); | |
| 470 | + | |
| 471 | + if (key.isWireframe()) { | |
| 472 | + return _simpleWirePipeline; | |
| 473 | + } | |
| 474 | + | |
| 475 | + if (key.isFaded()) { | |
| 476 | + if (key.isTranslucent()) { | |
| 477 | + return _simpleTransparentFadePipeline; | |
| 478 | + } | |
| 479 | + else { | |
| 480 | + return _simpleOpaqueFadePipeline; | |
| 481 | + } | |
| 482 | + } | |
| 483 | + else { | |
| 484 | + if (key.isTranslucent()) { | |
| 485 | + return _simpleTransparentPipeline; | |
| 486 | + } | |
| 487 | + else { | |
| 488 | + return _simpleOpaquePipeline; | |
| 489 | + } | |
| 490 | + } | |
| 491 | +} | |
| 492 | + | |
| 459 | 493 | GeometryCache::GeometryCache() : |
| 460 | 494 | _nextID(0) { |
| 495 | + // Let's register its special shapePipeline factory: | |
| 496 | + registerShapePipeline(); | |
| 461 | 497 | buildShapes(); |
| 462 | 498 | } |
| 463 | 499 | |
| @@ -504,11 +540,13 @@ void setupBatchInstance(gpu::Batch& batch, gpu::BufferPointer colorBuffer) { · 40 unmodified lines | ||
| 504 | 540 | } |
| 505 | 541 | |
| 506 | 542 | void GeometryCache::initializeShapePipelines() { |
| 507 | − GeometryCache::_simpleOpaquePipeline = getShapePipeline(false, false, true, false); | |
| 508 | − GeometryCache::_simpleTransparentPipeline = getShapePipeline(false, true, true, false); | |
| 509 | − GeometryCache::_simpleOpaqueFadePipeline = getShapePipeline(false, false, true, false, false, true); | |
| 510 | − GeometryCache::_simpleTransparentFadePipeline = getShapePipeline(false, true, true, false, false, true); | |
| 511 | − GeometryCache::_simpleWirePipeline = getShapePipeline(false, false, true, true); | |
| 543 | + if (!_simpleOpaquePipeline) { | |
| 544 | + _simpleOpaquePipeline = getShapePipeline(false, false, true, false); | |
| 545 | + _simpleTransparentPipeline = getShapePipeline(false, true, true, false); | |
| 546 | + _simpleOpaqueFadePipeline = getShapePipeline(false, false, true, false, false, true); | |
| 547 | + _simpleTransparentFadePipeline = getShapePipeline(false, true, true, false, false, true); | |
| 548 | + _simpleWirePipeline = getShapePipeline(false, false, true, true); | |
| 549 | + } | |
| 512 | 550 | } |
| 513 | 551 | |
| 514 | 552 | render::ShapePipelinePointer GeometryCache::getShapePipeline(bool textured, bool transparent, bool culled, |