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 | return INSTANCED_SOLID_STREAM_FORMAT; | 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 | render::ShapePipelinePointer GeometryCache::_simpleOpaquePipeline; | 460 | render::ShapePipelinePointer GeometryCache::_simpleOpaquePipeline; |
| 454 | render::ShapePipelinePointer GeometryCache::_simpleTransparentPipeline; | 461 | render::ShapePipelinePointer GeometryCache::_simpleTransparentPipeline; |
| 455 | render::ShapePipelinePointer GeometryCache::_simpleOpaqueFadePipeline; | 462 | render::ShapePipelinePointer GeometryCache::_simpleOpaqueFadePipeline; |
| 456 | render::ShapePipelinePointer GeometryCache::_simpleTransparentFadePipeline; | 463 | render::ShapePipelinePointer GeometryCache::_simpleTransparentFadePipeline; |
| 457 | render::ShapePipelinePointer GeometryCache::_simpleWirePipeline; | 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 | GeometryCache::GeometryCache() : | 493 | GeometryCache::GeometryCache() : |
| 460 | _nextID(0) { | 494 | _nextID(0) { |
| 495 | // Let's register its special shapePipeline factory: | ||
| 496 | registerShapePipeline(); | ||
| 461 | buildShapes(); | 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 | void GeometryCache::initializeShapePipelines() { | 542 | void GeometryCache::initializeShapePipelines() { |
| 507 | GeometryCache::_simpleOpaquePipeline = getShapePipeline(false, false, true, false); | 543 | if (!_simpleOpaquePipeline) { |
| 508 | GeometryCache::_simpleTransparentPipeline = getShapePipeline(false, true, true, false); | 544 | _simpleOpaquePipeline = getShapePipeline(false, false, true, false); |
| 509 | GeometryCache::_simpleOpaqueFadePipeline = getShapePipeline(false, false, true, false, false, true); | 545 | _simpleTransparentPipeline = getShapePipeline(false, true, true, false); |
| 510 | GeometryCache::_simpleTransparentFadePipeline = getShapePipeline(false, true, true, false, false, true); | 546 | _simpleOpaqueFadePipeline = getShapePipeline(false, false, true, false, false, true); |
| 511 | GeometryCache::_simpleWirePipeline = getShapePipeline(false, false, true, true); | 547 | _simpleTransparentFadePipeline = getShapePipeline(false, true, true, false, false, true); |
| 548 | _simpleWirePipeline = getShapePipeline(false, false, true, true); | ||
| 549 | } | ||
| 512 | } | 550 | } |
| 513 | 551 | ||
| 514 | render::ShapePipelinePointer GeometryCache::getShapePipeline(bool textured, bool transparent, bool culled, | 552 | render::ShapePipelinePointer GeometryCache::getShapePipeline(bool textured, bool transparent, bool culled, |