History

First draft of custom pipeline on geometry cache

Olivier Prat committed 9 years ago

Commit 1b8696f1 parent c583de47 files · +139 −48Browse files

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

Unified · Split

libraries/render-utils/src/GeometryCache.cpp+43−5
@@ -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
453QHash<SimpleProgramKey, gpu::PipelinePointer> GeometryCache::_simplePrograms;
454
455gpu::ShaderPointer GeometryCache::_simpleShader;
456gpu::ShaderPointer GeometryCache::_unlitShader;
457gpu::ShaderPointer GeometryCache::_simpleFadeShader;
458gpu::ShaderPointer GeometryCache::_unlitFadeShader;
459
453render::ShapePipelinePointer GeometryCache::_simpleOpaquePipeline;460render::ShapePipelinePointer GeometryCache::_simpleOpaquePipeline;
454render::ShapePipelinePointer GeometryCache::_simpleTransparentPipeline;461render::ShapePipelinePointer GeometryCache::_simpleTransparentPipeline;
455render::ShapePipelinePointer GeometryCache::_simpleOpaqueFadePipeline;462render::ShapePipelinePointer GeometryCache::_simpleOpaqueFadePipeline;
456render::ShapePipelinePointer GeometryCache::_simpleTransparentFadePipeline;463render::ShapePipelinePointer GeometryCache::_simpleTransparentFadePipeline;
457render::ShapePipelinePointer GeometryCache::_simpleWirePipeline;464render::ShapePipelinePointer GeometryCache::_simpleWirePipeline;
458 465
466uint8_t GeometryCache::CUSTOM_PIPELINE_NUMBER = 0;
467
468render::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
459GeometryCache::GeometryCache() :493GeometryCache::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
506void GeometryCache::initializeShapePipelines() {542void 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
514render::ShapePipelinePointer GeometryCache::getShapePipeline(bool textured, bool transparent, bool culled,552render::ShapePipelinePointer GeometryCache::getShapePipeline(bool textured, bool transparent, bool culled,