Showing the changes to libraries/render-utils/src/HighlightEffect.cpp (1 of 43 files). Show all
Unified · Split
| @@ -37,6 +37,8 @@ namespace gr { · 36 unmodified lines | ||
| 37 | 37 | |
| 38 | 38 | #define OUTLINE_STENCIL_MASK 1 |
| 39 | 39 | |
| 40 | +extern void initZPassPipelines(ShapePlumber& plumber, gpu::StatePointer state); | |
| 41 | + | |
| 40 | 42 | HighlightRessources::HighlightRessources() { |
| 41 | 43 | } |
| 42 | 44 | |
| @@ -180,6 +182,7 @@ void DrawHighlightMask::run(const render::RenderContextPointer& renderContext, c · 137 unmodified lines | ||
| 180 | 182 | |
| 181 | 183 | auto maskPipeline = _shapePlumber->pickPipeline(args, defaultKeyBuilder); |
| 182 | 184 | auto maskSkinnedPipeline = _shapePlumber->pickPipeline(args, defaultKeyBuilder.withSkinned()); |
| 185 | + auto maskSkinnedDQPipeline = _shapePlumber->pickPipeline(args, defaultKeyBuilder.withSkinned().withDualQuatSkinned()); | |
| 183 | 186 | |
| 184 | 187 | // Setup camera, projection and viewport for all items |
| 185 | 188 | batch.setViewportTransform(args->_viewport); |
| @@ -187,14 +190,17 @@ void DrawHighlightMask::run(const render::RenderContextPointer& renderContext, c · 1 unmodified line | ||
| 187 | 190 | batch.setProjectionJitter(jitter.x, jitter.y); |
| 188 | 191 | batch.setViewTransform(viewMat); |
| 189 | 192 | |
| 190 | − std::vector<ShapeKey> skinnedShapeKeys{}; | |
| 193 | + std::vector<ShapeKey> skinnedShapeKeys; | |
| 194 | + std::vector<ShapeKey> skinnedDQShapeKeys; | |
| 191 | 195 | |
| 192 | 196 | // Iterate through all inShapes and render the unskinned |
| 193 | 197 | args->_shapePipeline = maskPipeline; |
| 194 | 198 | batch.setPipeline(maskPipeline->pipeline); |
| 195 | 199 | for (const auto& items : inShapes) { |
| 196 | 200 | itemBounds.insert(itemBounds.end(), items.second.begin(), items.second.end()); |
| 197 | − if (items.first.isSkinned()) { | |
| 201 | + if (items.first.isSkinned() && items.first.isDualQuatSkinned()) { | |
| 202 | + skinnedDQShapeKeys.push_back(items.first); | |
| 203 | + } else if (items.first.isSkinned()) { | |
| 198 | 204 | skinnedShapeKeys.push_back(items.first); |
| 199 | 205 | } else { |
| 200 | 206 | renderItems(renderContext, items.second); |
| @@ -202,10 +208,21 @@ void DrawHighlightMask::run(const render::RenderContextPointer& renderContext, c · 1 unmodified line | ||
| 202 | 208 | } |
| 203 | 209 | |
| 204 | 210 | // Reiterate to render the skinned |
| 205 | − args->_shapePipeline = maskSkinnedPipeline; | |
| 206 | − batch.setPipeline(maskSkinnedPipeline->pipeline); | |
| 207 | − for (const auto& key : skinnedShapeKeys) { | |
| 208 | − renderItems(renderContext, inShapes.at(key)); | |
| 211 | + if (skinnedShapeKeys.size() > 0) { | |
| 212 | + args->_shapePipeline = maskSkinnedPipeline; | |
| 213 | + batch.setPipeline(maskSkinnedPipeline->pipeline); | |
| 214 | + for (const auto& key : skinnedShapeKeys) { | |
| 215 | + renderItems(renderContext, inShapes.at(key)); | |
| 216 | + } | |
| 217 | + } | |
| 218 | + | |
| 219 | + // Reiterate to render the DQ skinned | |
| 220 | + if (skinnedDQShapeKeys.size() > 0) { | |
| 221 | + args->_shapePipeline = maskSkinnedDQPipeline; | |
| 222 | + batch.setPipeline(maskSkinnedDQPipeline->pipeline); | |
| 223 | + for (const auto& key : skinnedDQShapeKeys) { | |
| 224 | + renderItems(renderContext, inShapes.at(key)); | |
| 225 | + } | |
| 209 | 226 | } |
| 210 | 227 | |
| 211 | 228 | args->_shapePipeline = nullptr; |
| @@ -488,7 +505,7 @@ void DrawHighlightTask::build(JobModel& task, const render::Varying& inputs, ren · 276 unmodified lines | ||
| 488 | 505 | state->setDepthTest(true, true, gpu::LESS_EQUAL); |
| 489 | 506 | state->setColorWriteMask(false, false, false, false); |
| 490 | 507 | |
| 491 | − initMaskPipelines(*shapePlumber, state); | |
| 508 | + initZPassPipelines(*shapePlumber, state); | |
| 492 | 509 | } |
| 493 | 510 | auto sharedParameters = std::make_shared<HighlightSharedParameters>(); |
| 494 | 511 | |
| @@ -550,14 +567,3 @@ const render::Varying DrawHighlightTask::addSelectItemJobs(JobModel& task, const · 55 unmodified lines | ||
| 550 | 567 | return task.addJob<SelectItems>("TransparentSelection", selectItemInput); |
| 551 | 568 | } |
| 552 | 569 | |
| 553 | −void DrawHighlightTask::initMaskPipelines(render::ShapePlumber& shapePlumber, gpu::StatePointer state) { | |
| 554 | − gpu::ShaderPointer modelProgram = gpu::Shader::createProgram(shader::render_utils::program::model_shadow); | |
| 555 | − shapePlumber.addPipeline( | |
| 556 | − ShapeKey::Filter::Builder().withoutSkinned(), | |
| 557 | − modelProgram, state); | |
| 558 | − | |
| 559 | − gpu::ShaderPointer deformedProgram = gpu::Shader::createProgram(shader::render_utils::program::deformed_model_shadow); | |
| 560 | − shapePlumber.addPipeline( | |
| 561 | − ShapeKey::Filter::Builder().withSkinned(), | |
| 562 | − deformedProgram, state); | |
| 563 | −} | |