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); } }
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(); } }
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(); } }
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(); } }
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; } } }
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(); } }
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"); }
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"); }
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)); }
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); } }