Beispiel #1
0
        public void Evaluate(int SpreadMax)
        {
            if (this.FInput.PluginIO.IsConnected && this.FInEnabled[0])
            {
                if (this.RenderRequest != null) { this.RenderRequest(this, this.FHost); }

                if (this.AssignedContext == null)
                {
                    this.FOutput.Length = 0;
                    return;
                }

                IDX11RWStructureBuffer b = this.FInput[0][this.AssignedContext];
                if (b != null)
                {
                    if (this.staging != null && this.staging.ElementCount != b.ElementCount) { this.staging.Dispose(); this.staging = null; }

                    if (this.staging == null)
                    {
                        staging = new DX11StagingStructuredBuffer(this.AssignedContext.Device, b.ElementCount, 4);
                    }

                    this.AssignedContext.CurrentDeviceContext.CopyResource(b.Buffer, staging.Buffer);

                    this.FOutput.Length = b.ElementCount; //float

                    DataStream ds = staging.MapForRead(this.AssignedContext.CurrentDeviceContext);

                    double* ptr1 = this.FOutput.Data;

                    for (int i = 0; i < b.ElementCount; i++)
                    {

                        //float v = ds.Read<float>();
                        ptr1[i] = ds.Read<float>();

            //						Vector3 v = ds.Read<Vector3>();
            //						ptr1[i*3] = v.X;
            //						ptr1[i * 3 + 1] = v.Y;
            //						ptr1[i * 3 + 2] = v.Z;

                    }

                    staging.UnMap(this.AssignedContext.CurrentDeviceContext);
                }
                else
                {
                    this.FOutput.Length = 0;
                }
            }
            else
            {
                this.FOutput.Length = 0;
            }
        }
        public void Evaluate(int SpreadMax)
        {
            if (this.FInput.IsConnected && this.FInEnabled[0])
            {
                if (this.RenderRequest != null) { this.RenderRequest(this, this.FHost); }

                IDX11ReadableStructureBuffer b= this.FInput[0][this.AssignedContext];

                if (b != null)
                {

                    int elementcount = this.FInElementCount[0];
                    if (elementcount == 0) { elementcount = b.ElementCount; }

                    DX11StagingStructuredBuffer staging = new DX11StagingStructuredBuffer(this.AssignedContext.Device
                        , elementcount, b.Stride);

                    ResourceRegion region = new ResourceRegion(0,0,0,this.FInElementCount[0]*b.Stride,1,1);
                    /*this.AssignedContext.CurrentDeviceContext.CopySubresourceRegion(b.Buffer, 0, staging.Buffer, 0, */
                    this.AssignedContext.CurrentDeviceContext.CopySubresourceRegion(b.Buffer, 0, region,staging.Buffer, 0, 0, 0, 0);

                    /*this.AssignedContext.CurrentDeviceContext.CopyResource(b.Buffer, staging.Buffer);*/

                    foreach (IIOContainer sp in this.outspreads)
                    {
                        ISpread s = (ISpread)sp.RawIOObject;
                        s.SliceCount = elementcount;
                    }

                    DataStream ds = staging.MapForRead(this.AssignedContext.CurrentDeviceContext);

                    for (int i = 0; i < elementcount; i++)
                    {
                        int cnt = 0;
                        foreach (string lay in layout)
                        {
                            switch (lay)
                            {
                                case "float":
                                    ISpread<float> spr = (ISpread<float>)this.outspreads[cnt].RawIOObject;
                                    spr[i] = ds.Read<float>();
                                    break;
                                case "float2":
                                    ISpread<Vector2> spr2 = (ISpread<Vector2>)this.outspreads[cnt].RawIOObject;
                                    spr2[i] = ds.Read<Vector2>();
                                    break;
                                case "float3":
                                    ISpread<Vector3> spr3 = (ISpread<Vector3>)this.outspreads[cnt].RawIOObject;
                                    spr3[i] = ds.Read<Vector3>();
                                    break;
                                case "float4":
                                    ISpread<Vector4> spr4 = (ISpread<Vector4>)this.outspreads[cnt].RawIOObject;
                                    spr4[i] = ds.Read<Vector4>();
                                    break;
                                case "float4x4":
                                    ISpread<Matrix> sprm = (ISpread<Matrix>)this.outspreads[cnt].RawIOObject;
                                    sprm[i] = ds.Read<Matrix>();
                                    break;
                                case "int":
                                    ISpread<int> spri = (ISpread<int>)this.outspreads[cnt].RawIOObject;
                                    spri[i] = ds.Read<int>();
                                    break;
                                case "uint":
                                    ISpread<uint> sprui = (ISpread<uint>)this.outspreads[cnt].RawIOObject;
                                    sprui[i] = ds.Read<uint>();
                                    break;
                                case "uint2":
                                    ISpread<Vector2> sprui2 = (ISpread<Vector2>)this.outspreads[cnt].RawIOObject;
                                    uint ui1 = ds.Read<uint>();
                                    uint ui2 = ds.Read<uint>();
                                    sprui2[i] = new Vector2(ui1, ui2);
                                    break;
                                case "uint3":
                                    ISpread<Vector3> sprui3 = (ISpread<Vector3>)this.outspreads[cnt].RawIOObject;
                                    uint ui31 = ds.Read<uint>();
                                    uint ui32 = ds.Read<uint>();
                                    uint ui33 = ds.Read<uint>();
                                    sprui3[i] = new Vector3(ui31, ui32, ui33);
                                    break;
                            }
                            cnt++;
                        }

                    }

                    staging.UnMap(this.AssignedContext.CurrentDeviceContext);

                    staging.Dispose();
                }
                else
                {
                    foreach (IIOContainer sp in this.outspreads)
                    {
                        ISpread s = (ISpread)sp.RawIOObject;
                        s.SliceCount = 0;
                    }
                }
            }
            else
            {
                foreach (IIOContainer sp in this.outspreads)
                {
                    ISpread s = (ISpread)sp.RawIOObject;
                    s.SliceCount = 0;
                }
            }
        }