| 347 | } |
| 348 | |
| 349 | void PatchNode::onPreRender(const VolumeTest& volume) |
| 350 | { |
| 351 | // Defer the tesselation calculation to the last minute |
| 352 | m_patch.evaluateTransform(); |
| 353 | m_patch.updateTesselation(); |
| 354 | |
| 355 | if (m_patch.getWidth() > 0 && m_patch.getHeight() > 0) |
| 356 | { |
| 357 | _renderableSurfaceSolid.update(m_patch._shader.getGLShader()); |
| 358 | _renderableSurfaceWireframe.update(getRenderState() == RenderState::Active ? |
| 359 | _renderEntity->getWireShader() : _inactiveShader); |
| 360 | _renderableSurfaceSolid.attachToEntity(_renderEntity); |
| 361 | } |
| 362 | else |
| 363 | { |
| 364 | _renderableSurfaceSolid.clear(); |
| 365 | _renderableSurfaceWireframe.clear(); |
| 366 | } |
| 367 | |
| 368 | if (isSelected() && GlobalSelectionSystem().ComponentMode() == selection::ComponentSelectionMode::Vertex) |
| 369 | { |
| 370 | // Selected patches in component mode render the lattice connecting the control points |
| 371 | _renderableCtrlLattice.update(_ctrlLatticeShader); |
| 372 | _renderableCtrlPoints.update(_ctrlPointShader); |
| 373 | } |
| 374 | else |
| 375 | { |
| 376 | _renderableCtrlPoints.hide(); |
| 377 | _renderableCtrlLattice.hide(); |
| 378 | |
| 379 | // Queue an update the next time it's rendered |
| 380 | _renderableCtrlPoints.queueUpdate(); |
| 381 | _renderableCtrlLattice.queueUpdate(); |
| 382 | } |
| 383 | } |
| 384 | |
| 385 | void PatchNode::renderHighlights(IRenderableCollector& collector, const VolumeTest& volume) |
| 386 | { |
nothing calls this directly
no test coverage detected