Exemplo n.º 1
0
    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);
        }
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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);
        }
    }