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
450450 return INSTANCED_SOLID_STREAM_FORMAT;
451451 }
452452
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+
453460 render::ShapePipelinePointer GeometryCache::_simpleOpaquePipeline;
454461 render::ShapePipelinePointer GeometryCache::_simpleTransparentPipeline;
455462 render::ShapePipelinePointer GeometryCache::_simpleOpaqueFadePipeline;
456463 render::ShapePipelinePointer GeometryCache::_simpleTransparentFadePipeline;
457464 render::ShapePipelinePointer GeometryCache::_simpleWirePipeline;
458465
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+
459493 GeometryCache::GeometryCache() :
460494 _nextID(0) {
495+ // Let's register its special shapePipeline factory:
496+ registerShapePipeline();
461497 buildShapes();
462498 }
463499
@@ -504,11 +540,13 @@ void setupBatchInstance(gpu::Batch& batch, gpu::BufferPointer colorBuffer) { · 40 unmodified lines
504540 }
505541
506542 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+ }
512550 }
513551
514552 render::ShapePipelinePointer GeometryCache::getShapePipeline(bool textured, bool transparent, bool culled,