| 1531 | |
| 1532 | |
| 1533 | bool EveChildMesh::UpdateMeshMorphs( Tr2RenderContext& renderContext ) |
| 1534 | { |
| 1535 | GPU_REGION( renderContext, "MeshMorphs" ); |
| 1536 | |
| 1537 | if( m_bakeMorphs ) |
| 1538 | { |
| 1539 | auto shader = m_mergeMorphsEffect->GetShaderStateInterface(); |
| 1540 | if( !shader ) |
| 1541 | { |
| 1542 | return false; |
| 1543 | } |
| 1544 | if( !PrepareMorphBuffers( renderContext ) ) |
| 1545 | { |
| 1546 | return false; |
| 1547 | } |
| 1548 | |
| 1549 | auto meshIndex = m_mesh->GetMeshIndex(); |
| 1550 | auto lod = m_mesh->GetGeometryResource()->GetMeshLod( meshIndex, m_currentScreenSize ); |
| 1551 | uint32_t vertexCount = lod->m_vertexCount; |
| 1552 | |
| 1553 | renderContext.SetConstants( m_mergeMorphsConstantBuffer, Tr2RenderContextEnum::COMPUTE_SHADER, Tr2Renderer::GetPerObjectVSStartRegister() ); |
| 1554 | |
| 1555 | |
| 1556 | Tr2Renderer::RunComputeShader( |
| 1557 | m_mergeMorphsEffect, |
| 1558 | BlueSharedString( "MorphBaking" ), |
| 1559 | ( vertexCount + 63 ) / 64, |
| 1560 | 1, |
| 1561 | 1, |
| 1562 | renderContext ); |
| 1563 | |
| 1564 | auto rtMesh = m_mesh->GetRtMesh(); |
| 1565 | |
| 1566 | if( rtMesh ) |
| 1567 | { |
| 1568 | rtMesh->MarkDirty(); |
| 1569 | } |
| 1570 | } |
| 1571 | |
| 1572 | m_isMorphsBaked = true; |
| 1573 | return true; |
| 1574 | } |
| 1575 | |
| 1576 | |
| 1577 | bool EveChildMesh::IsMorphsBaked() const |
no test coverage detected