public override bool Register(ref RenderPassBuilder builder, ref Resolver resolver) { var resources = resolver.GetComponent <PipelineResources>(); builder.MarkUsage(resources.SceneColor, ResourceState.CopySource); return(true); }
public override bool Register(ref RenderPassBuilder builder, ref Resolver resolver) { var color = builder.GetInput <TextureHandle>(); var settings = resolver.GetComponent <RenderSettings>(); builder.MarkUsage(color, settings.Msaa.IsMultiSampled ? ResourceState.ResolveSource : ResourceState.CopySource); return(true); }
public override bool Register(ref RenderPassBuilder builder, ref Resolver resolver) { if (!IsEnabled) { return(false); } var settings = resolver.GetComponent <RenderSettings>(); var resources = resolver.GetComponent <RenderResources>(); builder.CreatePrimaryOutputRelativeTexture(TextureDesc.CreateUnorderedAccessResourceDesc(DataFormat.Unknown, TextureDimension.Tex2D)); return(true); }
public override bool Register(ref RenderPassBuilder builder, ref Resolver resolver) { var resources = resolver.GetComponent <PipelineResources>(); var settings = resolver.GetComponent <PipelineSettings>(); if (settings.Msaa.IsMultiSampled) { resources.SampledOutput = builder.CreatePrimaryOutputRelativeTexture( TextureDesc.CreateRenderTargetDesc(DataFormat.R8G8B8A8UnsignedNormalized, Rgba128.CornflowerBlue), ResourceState.ResolveDestination, debugName: nameof(resources.SampledOutput) ); resolver.SetComponent(resources); builder.MarkUsage(resources.SceneColor, ResourceState.ResolveSource); return(true); } else { resolver.SetComponent(resources); resources.SampledOutput = resources.SceneColor; return(false); } }
public override bool Register(ref RenderPassBuilder builder, ref Resolver resolver) { var settings = resolver.GetComponent <RenderSettings>(); RenderResources resources; resources.SceneColor = builder.CreatePrimaryOutputRelativeTexture( TextureDesc.CreateRenderTargetDesc(BackBufferFormat.R8G8B8A8UnsignedNormalized, DefaultSkyColor, settings.Msaa), ResourceState.RenderTarget ); resources.SceneDepth = builder.CreatePrimaryOutputRelativeTexture( TextureDesc.CreateDepthStencilDesc(DataFormat.Depth32Single, 1, 0, false, settings.Msaa), ResourceState.DepthWrite ); resolver.CreateComponent(resources); DefaultPipelineState = settings.Msaa.IsMultiSampled ? MsaaPso : Pso; builder.SetOutput(resources.SceneColor); return(true); }
private void LoadShaderToyFile(string filepath) { int displayOutputBufferId = 1; renderer.Clear(); using (ZipArchive zip = ZipFile.OpenRead(filepath)) { renderer.SharedFragmentCode = zip.GetEntry("common.glsl")?.ReadToEnd(); string vertexShader = zip.GetEntry("shared.vs.glsl").ReadToEnd(); foreach (ZipArchiveEntry entry in zip.Entries) { if (entry.Name.StartsWith("rp") && entry.Name.EndsWith(".json")) { JObject jRenderPass = JObject.Parse(entry.ReadToEnd()); if (jRenderPass["type"].Value <string>() == "image") { displayOutputBufferId = jRenderPass["outputs"].Values <int>().First(); } ZipArchiveEntry shaderEntry = zip.GetEntry(jRenderPass["code"].Value <string>()); string shaderCode = shaderEntry.ReadToEnd(); RenderPassBuilder rpb = RenderPassBuilder.FromString(jRenderPass["name"].Value <string>(), vertexShader, shaderCode); foreach (JObject obj in jRenderPass["inputs"]) { string type = obj["type"].Value <string>(); if (type == "buffer") { rpb.AddBufferInput(obj["channel"].Value <int>(), obj["id"].Value <int>()); } else if (type == "texture") { string src = obj["src"].Value <string>(); ZipArchiveEntry e = zip.Entries.FirstOrDefault(x => src.EndsWith(x.Name)); rpb.AddTextureInput(obj["channel"].Value <int>(), e.Name, e.ReadAllBytes()); } } foreach (int bufferId in jRenderPass["outputs"].Values <int>()) { rpb.AddOutput(bufferId); } RenderPass rp = rpb.Create(); renderer.Add(rp); } } } renderer.DisplayOutputBufferId = displayOutputBufferId; renderer.InitPasses(); }