Example #1
0
        public override bool Register(ref RenderPassBuilder builder, ref Resolver resolver)
        {
            var resources = resolver.GetComponent <PipelineResources>();

            builder.MarkUsage(resources.SceneColor, ResourceState.CopySource);

            return(true);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
        }
Example #6
0
        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();
        }