public void SyncWithModel(FigureModel model, List <ControlVertexProvider> children) { //sync occluder var materialSetDirector = model.MaterialSet.Directory; var newOcclusionDirectory = OccluderLoader.IsOcclusionDirectory(materialSetDirector) ? materialSetDirector : (model.Shape.Directory ?? occluderLoader.DefaultDirectory); if (newOcclusionDirectory != occlusionDirectory) { var newOccluder = occluderLoader.Load(newOcclusionDirectory); occluder?.Dispose(); occlusionDirectory = newOcclusionDirectory; occluder = newOccluder; } //sync visible isVisible = model.IsVisible; //register child occluders if (children != null) { //children are synced first so all children should have occluders by this point var childOccluders = children .Where(child => child.isVisible) .Select(child => child.occluder) .ToList(); occluder.SetChildOccluders(childOccluders); } }
public static ControlVertexProvider Load(Device device, ShaderCache shaderCache, FigureDefinition definition) { var shaperParameters = Persistance.Load <ShaperParameters>(definition.Directory.File("shaper-parameters.dat")); var occluderLoader = new OccluderLoader(device, shaderCache, definition); var provider = new ControlVertexProvider( device, shaderCache, occluderLoader, definition, shaperParameters); return(provider); }
public ControlVertexProvider(Device device, ShaderCache shaderCache, OccluderLoader occluderLoader, FigureDefinition definition, ShaperParameters shaperParameters) { this.occluderLoader = occluderLoader; this.definition = definition; this.shaper = new GpuShaper(device, shaderCache, definition, shaperParameters); this.vertexCount = shaperParameters.InitialPositions.Length; controlVertexInfosBufferManager = new InOutStructuredBufferManager <ControlVertexInfo>(device, vertexCount); if (definition.ChannelSystem.Parent == null) { this.controlVertexInfoStagingBufferManager = new StagingStructuredBufferManager <ControlVertexInfo>(device, vertexCount, BackingArrayCount); } }