void RebuildSelectedHandlesInternal(IEnumerable<ProBuilderMesh> meshes, SelectMode selectionMode) { ClearHandles(); foreach (var mesh in meshes) { switch (selectionMode) { case SelectMode.Vertex: case SelectMode.TextureVertex: { RebuildMeshHandle(mesh, m_VertexHandles, MeshHandles.CreateVertexMesh); var handle = GetMeshHandle(mesh, m_SelectedVertexHandles); MeshHandles.CreateVertexMesh(mesh, handle.mesh, mesh.selectedIndexesInternal); goto default; } case SelectMode.Edge: case SelectMode.TextureEdge: { if(m_ForceEdgeLinesGL || BuiltinMaterials.geometryShadersSupported) RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeMesh); else RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeBillboardMesh); var handle = GetMeshHandle(mesh, m_SelectedEdgeHandles); if(m_ForceEdgeLinesGL || BuiltinMaterials.geometryShadersSupported) MeshHandles.CreateEdgeMesh(mesh, handle.mesh, mesh.selectedEdgesInternal); else MeshHandles.CreateEdgeBillboardMesh(mesh, handle.mesh, mesh.selectedEdgesInternal); break; } case SelectMode.Face: case SelectMode.TextureFace: { RebuildMeshHandle(mesh, m_SelectedFaceHandles, MeshHandles.CreateFaceMesh); goto default; } default: if(m_ForceWireframeLinesGL || BuiltinMaterials.geometryShadersSupported) RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeMesh); else RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeBillboardMesh); break; } } }
void RebuildSelectedHandlesInternal(IEnumerable <ProBuilderMesh> meshes, SelectMode selectionMode, bool selectionOrVertexCountChanged = true) { if (!selectionOrVertexCountChanged) { foreach (var handle in m_WireHandles) { handle.Value.mesh.vertices = handle.Key.positionsInternal; } switch (selectionMode) { case SelectMode.Vertex: case SelectMode.TextureVertex: { if (BuiltinMaterials.geometryShadersSupported) { foreach (var handle in m_VertexHandles) { handle.Value.mesh.vertices = handle.Key.positionsInternal; } foreach (var handle in m_SelectedVertexHandles) { handle.Value.mesh.vertices = handle.Key.positionsInternal; } } else { foreach (var handle in m_VertexHandles) { MeshHandles.CreateVertexMesh(handle.Key, handle.Value.mesh); } foreach (var handle in m_SelectedVertexHandles) { MeshHandles.CreateVertexMesh(handle.Key, handle.Value.mesh, handle.Key.selectedIndexesInternal); } } break; } case SelectMode.Edge: case SelectMode.TextureEdge: { foreach (var handle in m_SelectedEdgeHandles) { handle.Value.mesh.vertices = handle.Key.positionsInternal; } break; } case SelectMode.Face: case SelectMode.TextureFace: { foreach (var handle in m_SelectedFaceHandles) { handle.Value.mesh.vertices = handle.Key.positionsInternal; } break; } } return; } ClearHandles(); foreach (var mesh in meshes) { // always do wireframe RebuildMeshHandle(mesh, m_WireHandles, MeshHandles.CreateEdgeMesh); switch (selectionMode) { case SelectMode.Vertex: case SelectMode.TextureVertex: { RebuildMeshHandle(mesh, m_VertexHandles, MeshHandles.CreateVertexMesh); RebuildMeshHandle(mesh, m_SelectedVertexHandles, (x, y) => { MeshHandles.CreateVertexMesh(x, y, x.selectedIndexesInternal); }); break; } case SelectMode.Edge: case SelectMode.TextureEdge: { RebuildMeshHandle(mesh, m_SelectedEdgeHandles, (x, y) => { MeshHandles.CreateEdgeMesh(x, y, x.selectedEdgesInternal); }); break; } case SelectMode.Face: case SelectMode.TextureFace: { RebuildMeshHandle(mesh, m_SelectedFaceHandles, MeshHandles.CreateFaceMesh); break; } } } }