예제 #1
0
            public QuadShaderDeviceData(DX11RenderContext context)
            {
                string     basepath = "VVVV.DX11.Nodes.effects.quad.fx";
                DX11Effect effect   = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), basepath);

                quadshader      = new DX11ShaderInstance(context, effect);
                texturevariable = quadshader.Effect.GetVariableBySemantic("INPUTTEXTURE").AsResource();
                samplervariable = quadshader.Effect.GetVariableBySemantic("SAMPLERSTATE").AsSampler();

                Quad quad = new Quad();

                quad.Size = new Vector2(1.0f);

                quadgeometry = context.Primitives.QuadNormals(quad);

                quadlayouts = new List <InputLayout>();
                for (int i = 0; i < 4; i++)
                {
                    InputLayout layout;
                    quadshader.SelectTechnique(i);

                    bool res = quadgeometry.ValidateLayout(quadshader.GetPass(0), out layout);
                    quadlayouts.Add(layout);
                }
            }
예제 #2
0
            public ShaderDeviceData(DX11RenderContext context)
            {
                string basepath = "VVVV.DX11.Nodes.effects.DrawFullScreen.fx";

                using (DX11Effect effect = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), basepath))
                {
                    shaderInstance = new DX11ShaderInstance(context, effect);

                    inputTextureVariable = shaderInstance.Effect.GetVariableBySemantic("INPUTTEXTURE").AsResource();
                    colorVariable        = shaderInstance.Effect.GetVariableBySemantic("COLOR").AsVector();
                    samplerVariable      = shaderInstance.Effect.GetVariableBySemantic("TEXTURESAMPLER").AsSampler();
                    texTransformVariable = shaderInstance.Effect.GetVariableBySemantic("TEXTUREMATRIX").AsMatrix();
                    pass = shaderInstance.CurrentTechnique.GetPassByIndex(0);
                }
            }
        public void Update(IPluginIO pin, DX11RenderContext context)
        {
            Device        device = context.Device;
            DeviceContext ctx    = context.CurrentDeviceContext;

            if (!this.FOutPointcloudBuffer[0].Contains(context) || !this.FOutIndexBuffer[0].Contains(context) || this.FInEleCount.IsChanged)
            {
                this.FOutPointcloudBuffer[0].Dispose(context);
                this.FOutIndexBuffer[0].Dispose(context);
                DX11RWStructuredBuffer pcBuffer = new DX11RWStructuredBuffer(device, FInEleCount[0], FInStride[0], eDX11BufferMode.Counter);
                DX11RWStructuredBuffer idBuffer = new DX11RWStructuredBuffer(device, FInEleCount[0], 4, eDX11BufferMode.Counter);
                this.FOutPointcloudBuffer[0][context] = pcBuffer;
                this.FOutIndexBuffer[0][context]      = idBuffer;
            }

            // clear offsetbuffer
            int[] mask = new int[4] {
                -1, -1, -1, -1
            };
            ctx.ClearUnorderedAccessView(FOutIndexBuffer[0][context].UAV, mask);

            // load shader
            if (this.shader == null)
            {
                string     basepath = "RingBufferIndexing.effects.RingBufferIndexing.fx";
                DX11Effect effect   = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), basepath);
                this.shader = new DX11ShaderInstance(context, effect);
            }

            if (this.FInPointcloudBuffer.PluginIO.IsConnected /* && currentFrame != FHDEHost.FrameTime*/)
            {
                currentFrame = FHDEHost.FrameTime; // prevents to execute this a second time

                shader.SelectTechnique("BuildHash");
                shader.SetBySemantic("POINTCLOUDBUFFERIN", FInPointcloudBuffer[0][context].SRV);
                shader.SetBySemantic("POINTCLOUDBUFFEROUT", FOutPointcloudBuffer[0][context].UAV, 0);
                shader.SetBySemantic("INDEXBUFFER", FOutIndexBuffer[0][context].UAV);

                shader.ApplyPass(0);
                ctx.Dispatch((FInEleCount[0] + 63) / 64, 1, 1);
                context.CleanUp();
                context.CleanUpCS();
            }
        }
예제 #4
0
        public void Update(IPluginIO pin, DX11RenderContext context)
        {
            Device        device = context.Device;
            DeviceContext ctx    = context.CurrentDeviceContext;

            if (!this.FOutLinkBuffer[0].Contains(context) || !this.FOutOffsetBuffer[0].Contains(context) || FInGridcellCount.IsChanged)
            {
                this.FOutLinkBuffer[0].Dispose(context);
                this.FOutOffsetBuffer[0].Dispose(context);
                DX11RWStructuredBuffer lb = new DX11RWStructuredBuffer(device, FInEleCount[0], 8, eDX11BufferMode.Counter);
                DX11RWStructuredBuffer ob = new DX11RWStructuredBuffer(device, FInGridcellCount[0] * FInGridcellCount[0] * FInGridcellCount[0], 4, eDX11BufferMode.Counter);
                this.FOutLinkBuffer[0][context]   = lb;
                this.FOutOffsetBuffer[0][context] = ob;
            }

            // clear offsetbuffer
            int[] mask = new int[4] {
                -1, -1, -1, -1
            };
            ctx.ClearUnorderedAccessView(FOutOffsetBuffer[0][context].UAV, mask);

            // load shader
            if (this.shader == null)
            {
                string     basepath = "LinkedList.effects.LinkedList.fx";
                DX11Effect effect   = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), basepath);
                this.shader = new DX11ShaderInstance(context, effect);
            }

            if (this.FInPcBuffer.PluginIO.IsConnected)
            {
                shader.SelectTechnique("BuildHash");
                shader.SetBySemantic("POINTCLOUDBUFFER", FInPcBuffer[0][context].SRV);
                shader.SetBySemantic("POINTTRANSFORM", FInTransform[0]);
                shader.SetBySemantic("RWLINKBUFFER", FOutLinkBuffer[0][context].UAV, 0);
                shader.SetBySemantic("RWOFFSETBUFFER", FOutOffsetBuffer[0][context].UAV);
                shader.SetBySemantic("GRIDCELLSIZE", FInGridcellCount[0]);

                shader.ApplyPass(0);
                ctx.Dispatch((FInEleCount[0] + 63) / 64, 1, 1);
                context.CleanUp();
                context.CleanUpCS();
            }
        }
예제 #5
0
        public SolidColorTransformed(DX11RenderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            this.context = context;

            using (var cef = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), "FeralTic.Effects.TransformColor.fx"))
            {
                this.effect = new Effect(context.Device, cef.ByteCode);
                this.pass   = this.effect.GetTechniqueByIndex(0).GetPassByIndex(0);

                this.viewProjVariable = this.effect.GetVariableByName("tVP").AsMatrix();
                this.worldVariable    = this.effect.GetVariableByName("tW").AsMatrix();
                this.colorVariable    = this.effect.GetVariableByName("objectColor").AsVector();
            }
        }
예제 #6
0
        public void Update(IPluginIO pin, DX11RenderContext context)
        {
            if (quadshader == null)
            {
                string     basepath = "VVVV.DX11.Nodes.effects.quad.fx";
                DX11Effect effect   = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), basepath);

                quadshader      = new DX11ShaderInstance(context, effect);
                texturevariable = quadshader.Effect.GetVariableBySemantic("INPUTTEXTURE").AsResource();
                samplervariable = quadshader.Effect.GetVariableBySemantic("SAMPLERSTATE").AsSampler();

                Quad quad = new Quad();
                quad.Size = new Vector2(1.0f);

                quadgeometry = context.Primitives.QuadNormals(quad);

                quadlayouts = new List <InputLayout>();
                for (int i = 0; i < 4; i++)
                {
                    InputLayout layout;
                    quadshader.SelectTechnique(i);

                    bool res = quadgeometry.ValidateLayout(quadshader.GetPass(0), out layout);
                    quadlayouts.Add(layout);
                }
            }

            if (this.spmax > 0)
            {
                if (!this.FOutLayer[0].Contains(context))
                {
                    this.FOutLayer[0][context]        = new DX11Layer();
                    this.FOutLayer[0][context].Render = this.Render;
                }
            }
        }
예제 #7
0
        public void Update(DX11RenderContext context)
        {
            for (int i = 0; i < framePool.Count; i++)
            {
                framePool[i].UnLock();
            }
            framePool.Clear();

            if (this.textureOutput.SliceCount == 0)
            {
                return;
            }

            //

            //Compile shader if necessary
            if (shader == null)
            {
                using (DX11Effect effect = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), Consts.EffectPath + ".ExtractChannel.fx"))
                {
                    shader = new DX11ShaderInstance(context, effect);
                }
            }
            if (shaderExpand == null)
            {
                using (DX11Effect effect = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), Consts.EffectPath + ".ExtractChannelExpand.fx"))
                {
                    shaderExpand = new DX11ShaderInstance(context, effect);
                }
            }

            for (int i = 0; i < this.textureOutput.SliceCount; i++)
            {
                if (this.textureInput[i] == null)
                {
                    this.SetDefault(context, i);
                }
                else if (this.textureInput[i].Contains(context))
                {
                    var instance = this.singleChannelOut[i] ? shader : shaderExpand;

                    var input = this.textureInput[i][context];

                    string prefix = "Float";

                    var inputFormat = input.SRV.Description.Format;
                    inputFormat = inputFormat.DefaultOutputForCompressed();

                    if (inputFormat.IsSignedInt())
                    {
                        prefix = "UInt";
                    }
                    if (inputFormat.IsUnsignedInt())
                    {
                        prefix = "Int";
                    }

                    prefix += this.channel[i].ToString();
                    instance.SelectTechnique(prefix);
                    instance.SetByName("InputTexture", input.SRV);

                    var outputFormat = inputFormat;
                    if (this.singleChannelOut[i])
                    {
                        var singleFormat = outputFormat.GetSingleChannelEquivalent();
                        if (singleFormat == SlimDX.DXGI.Format.Unknown)
                        {
                            this.message[i] = "Could not find a single channel format suitable for : " + outputFormat.ToString();
                            this.SetDefault(context, i);
                            continue;
                        }
                        else
                        {
                            outputFormat = singleFormat;
                        }
                    }


                    var output = context.ResourcePool.LockRenderTarget(input.Width, input.Height, outputFormat, false, 1, false);
                    context.RenderTargetStack.Push(output.Element);

                    context.Primitives.ApplyFullTriVSPosition();
                    instance.ApplyPass(0);
                    context.CurrentDeviceContext.Draw(3, 0);

                    context.RenderTargetStack.Pop();

                    this.framePool.Add(output);



                    this.textureOutput[i][context] = output.Element;
                    this.message[i] = "ok";
                }
                else
                {
                    this.SetDefault(context, i);
                }
            }

            if (this.BeginQuery != null)
            {
                this.BeginQuery(context);
            }

            if (this.EndQuery != null)
            {
                this.EndQuery(context);
            }
        }
        public void Update(IPluginIO pin, DX11RenderContext context)
        {
            Device device = context.Device;
            DeviceContext ctx = context.CurrentDeviceContext;

            if ( !this.FOutPointcloudRingBuffer[0].Contains(context) || !this.FOutUpdatedBuffer[0].Contains(context) || !this.bCounter.Contains(context) || !this.bOffset.Contains(context) || this.FInPointcloudRingBufferSize.IsChanged || this.FInEleCount.IsChanged)
            {

                this.FOutPointcloudRingBuffer[0].Dispose(context);
                DX11RWStructuredBuffer brPointcloud = new DX11RWStructuredBuffer(device, FInPointcloudRingBufferSize[0], FInStride[0], eDX11BufferMode.Counter);
                this.FOutPointcloudRingBuffer[0][context] = brPointcloud;

                this.FOutUpdatedBuffer[0].Dispose(context);
                DX11RWStructuredBuffer brUpdated = new DX11RWStructuredBuffer(device, FInPointcloudRingBufferSize[0], 4, eDX11BufferMode.Counter);
                this.FOutUpdatedBuffer[0][context] = brUpdated;

                this.bOffset.Dispose(context);
                this.bOffset[context] = new DX11RawBuffer(device, 16);

                this.bCounter.Dispose(context);
                this.bCounter[context] = new DX11RWStructuredBuffer(device, FInEleCount[0], 4, eDX11BufferMode.Counter);

            }

            // load shader
            if (this.shader == null)
            {
                string basepath = "RingBuffer.effects.RingBuffer.fx";
                DX11Effect effect = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), basepath);
                this.shader = new DX11ShaderInstance(context, effect);
            }

            if (this.FInPointcloudBuffer.PluginIO.IsConnected && FInSet[0] && currentFrame != FHDEHost.FrameTime)
            {

                currentFrame = FHDEHost.FrameTime; // prevents to execute this a second time

                int[] mask = new int[4] { 0, 0, 0, 0 };
                ctx.ClearUnorderedAccessView(FOutUpdatedBuffer[0][context].UAV, mask);

                shader.SelectTechnique("AddPoints");
                shader.SetBySemantic("POINTCLOUDBUFFER", FInPointcloudBuffer[0][context].SRV);
                shader.SetBySemantic("POINTCLOUDCOUNTBUFFER", FInCountBuffer[0][context].SRV);
                shader.SetBySemantic("POINTCLOUDRINGBUFFER", FOutPointcloudRingBuffer[0][context].UAV, FInPointcloudRingBufferSize[0]);
                shader.SetBySemantic("UPDATEDRINGBUFFER", FOutUpdatedBuffer[0][context].UAV, FInPointcloudRingBufferSize[0]);
                shader.SetBySemantic("POINTCLOUDRINGBUFFERSIZE", FInPointcloudRingBufferSize[0]);
                shader.SetBySemantic("OFFSETBUFFER", this.bOffset[context].SRV);
                shader.SetBySemantic("COUNTERBUFFER", this.bCounter[context].UAV, 0);
                shader.ApplyPass(0);
                ctx.Dispatch((FInEleCount[0] + 63) / 64, 1, 1);

                ctx.CopyStructureCount(this.bCounter[context].UAV, this.bOffset[context].Buffer, 0);
                shader.SelectTechnique("CalcOffset");
                shader.ApplyPass(0);
                ctx.Dispatch(1, 1, 1);

                context.CleanUp();
                context.CleanUpCS();
                
            }

        }
예제 #9
0
 public void OnImportsSatisfied()
 {
     effect = DX11Effect.FromResource(System.Reflection.Assembly.GetExecutingAssembly(), Consts.EffectPath + ".Composite.fx");
     vertexShadersEffect = DX11Effect.FromResource(System.Reflection.Assembly.GetExecutingAssembly(), Consts.EffectPath + ".VSFullTriDualTexTransform.fx");
 }
예제 #10
0
 public void OnImportsSatisfied()
 {
     effectSample = DX11Effect.FromResource(System.Reflection.Assembly.GetExecutingAssembly(), Consts.EffectPath + ".Pipet_Sample.fx");
     effectLoad   = DX11Effect.FromResource(System.Reflection.Assembly.GetExecutingAssembly(), Consts.EffectPath + ".Pipet_Load.fx");
 }
예제 #11
0
        public static DX11ShaderInstance GetShader(DX11RenderContext context, string shadername)
        {
            DX11Effect effect = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), "VVVV.DX11.Nodes.effects." + shadername + ".fx");

            return(new DX11ShaderInstance(context, effect));
        }
예제 #12
0
        public void Update(DX11RenderContext context)
        {
            for (int i = 0; i < framePool.Count; i++)
            {
                framePool[i].UnLock();
            }
            framePool.Clear();

            if (this.textureHueOutput.SliceCount == 0)
            {
                return;
            }

            //

            //Compile shader if necessary
            if (shader == null)
            {
                using (DX11Effect effect = DX11Effect.FromResource(Assembly.GetExecutingAssembly(), Consts.EffectPath + ".HSLSplit.fx"))
                {
                    shader = new DX11ShaderInstance(context, effect);
                }
            }

            for (int i = 0; i < this.textureHueOutput.SliceCount; i++)
            {
                if (this.textureInput[i] == null)
                {
                    this.SetDefault(context, i);
                }
                else if (this.textureInput[i].Contains(context))
                {
                    var input = this.textureInput[i][context];

                    var inputFormat = input.SRV.Description.Format;
                    inputFormat = inputFormat.DefaultOutputForCompressed();

                    if (inputFormat.IsSignedInt() || inputFormat.IsUnsignedInt())
                    {
                        this.message[i] = "Integer type textures are not supported for color conversion : " + inputFormat.ToString();
                        this.SetDefault(context, i);
                        continue;
                    }

                    var outputFormat = inputFormat;
                    if (this.singleChannelOut[i])
                    {
                        var singleFormat = outputFormat.GetSingleChannelEquivalent();
                        if (singleFormat == SlimDX.DXGI.Format.Unknown)
                        {
                            this.message[i] = "Could not find a single channel format suitable for : " + outputFormat.ToString();
                            this.SetDefault(context, i);
                            continue;
                        }
                        else
                        {
                            outputFormat = singleFormat;
                        }
                    }

                    string tech = "";

                    if (this.colorSpace[i] == HSLOrHSVSpace.HSL)
                    {
                        tech = this.singleChannelOut[i] ? "HSLSingle" : "HSLExpand";
                    }
                    else
                    {
                        tech = this.singleChannelOut[i] ? "HSVSingle" : "HSVExpand";
                    }
                    shader.SelectTechnique(tech);
                    shader.SetByName("InputTexture", input.SRV);

                    var outputRed   = context.ResourcePool.LockRenderTarget(input.Width, input.Height, outputFormat, false, 1, false);
                    var outputGreen = context.ResourcePool.LockRenderTarget(input.Width, input.Height, outputFormat, false, 1, false);
                    var outputBlue  = context.ResourcePool.LockRenderTarget(input.Width, input.Height, outputFormat, false, 1, false);
                    var outputAlpha = context.ResourcePool.LockRenderTarget(input.Width, input.Height, outputFormat, false, 1, false);

                    context.RenderTargetStack.Push(outputRed.Element, outputGreen.Element, outputBlue.Element, outputAlpha.Element);

                    context.Primitives.ApplyFullTriVSPosition();
                    shader.ApplyPass(0);
                    context.CurrentDeviceContext.Draw(3, 0);

                    context.RenderTargetStack.Pop();

                    this.framePool.Add(outputRed);
                    this.framePool.Add(outputGreen);
                    this.framePool.Add(outputBlue);
                    this.framePool.Add(outputAlpha);



                    this.textureHueOutput[i][context]        = outputRed.Element;
                    this.textureSaturationOutput[i][context] = outputGreen.Element;
                    this.textureBrightnessOutput[i][context] = outputBlue.Element;
                    this.textureAlphaOutput[i][context]      = outputAlpha.Element;

                    this.message[i] = "ok";
                }
                else
                {
                    this.SetDefault(context, i);
                }
            }

            if (this.BeginQuery != null)
            {
                this.BeginQuery(context);
            }

            if (this.EndQuery != null)
            {
                this.EndQuery(context);
            }
        }