Exemplo n.º 1
0
 public RenderStageModelFactory(IFrameworkMessenger frameworkMessenger,
                                IStartupPropertiesCache startUpPropertiesCache,
                                ISystemComponents veldridComponents,
                                IVeldridWindowUpdater windowUpdater,
                                IDrawQueueGroupFactory drawQueueGroupFactory,
                                IDrawStageBatcherFactory drawStageBatcherFactory,
                                IGpuSurfaceManager gpuSurfaceManager,
                                IPipelineFactory pipelineFactory,
                                IGaussianBlurWeightsAndOffsetsCache gaussianWeightsAndOffsetsCache,
                                IQuadMeshBuilder quadMeshBuilder,
                                IBlendStateConverter blendStateConverter,
                                IShaderLoader shaderTools)
 {
     _frameworkMessenger             = frameworkMessenger;
     _startUpPropertiesCache         = startUpPropertiesCache;
     _systemComponents               = veldridComponents;
     _windowUpdater                  = windowUpdater;
     _drawQueueGroupFactory          = drawQueueGroupFactory;
     _drawStageBatcherFactory        = drawStageBatcherFactory;
     _gpuSurfaceManager              = gpuSurfaceManager;
     _pipelineFactory                = pipelineFactory;
     _gaussianWeightsAndOffsetsCache = gaussianWeightsAndOffsetsCache;
     _quadMeshBuilder                = quadMeshBuilder;
     _blendStateConverter            = blendStateConverter;
     _shaderTools = shaderTools;
 }
Exemplo n.º 2
0
 public ApplicationWindow(ILogger logger, IShaderLoader shaderLoader,
                          ISceneManager sceneManager) : base(1280, 720, new GraphicsMode(new ColorFormat(8, 8, 8, 8), 0, 0, 8), "")
 {
     this.logger       = logger;
     this.shaderLoader = shaderLoader;
     this.sceneManager = sceneManager;
 }
Exemplo n.º 3
0
        private void InitFromFiles()
        {
            IShaderLoader loader = DefaultLoader ?? new FileSystemLoader();

            foreach (var s in ShaderSourceOrFilenames)
            {
                AddShader(new Shader(Name + "_" + s.Item1.ToString(), s.Item1, loader.Load(s.Item2).Content));
            }
        }
Exemplo n.º 4
0
        public DistortionHeightRenderer(IFrameworkMessenger frameworkMessenger,
                                        IShaderLoader shaderLoader,
                                        IPipelineFactory pipelineFactory,
                                        IGpuSurfaceManager surfaceManager)
        {
            _frameworkMessenger = frameworkMessenger;
            _shaderLoader       = shaderLoader;
            _pipelineFactory    = pipelineFactory;
            _surfaceManager     = surfaceManager;

            Initialise();
        }
Exemplo n.º 5
0
        public MeshRenderStageRenderer(IFrameworkMessenger frameworkMessenger,
                                       ISystemComponents systemComponents,
                                       IShaderLoader shaderLoader,
                                       IPipelineFactory pipelineFactory,
                                       IViewportManager viewportManager)
        {
            _frameworkMessenger = frameworkMessenger;
            _systemComponents   = systemComponents;
            _shaderLoader       = shaderLoader;
            _pipelineFactory    = pipelineFactory;
            _viewportManager    = viewportManager;

            Initialise();
        }
Exemplo n.º 6
0
        private Pipeline _pipeline; //rename internal version

        public DistortionRenderer(ISystemComponents systemComponents,
                                  IShaderLoader shaderLoader,
                                  IPipelineFactory pipelineFactory,
                                  IFullNdcSpaceQuadVertexBuffer ndcQuadVertexBuffer,
                                  IViewportManager viewportManager)
        {
            _systemComponents    = systemComponents;
            _shaderLoader        = shaderLoader;
            _pipelineFactory     = pipelineFactory;
            _ndcQuadVertexBuffer = ndcQuadVertexBuffer;
            _viewportManager     = viewportManager;

            Initialise();
        }
        public SinglePassGaussianBlurRenderer(ISystemComponents systemComponents,
                                              IShaderLoader shaderLoader,
                                              IPipelineFactory pipelineFactory,
                                              IFullNdcSpaceQuadVertexBuffer ndcQuadVertexBuffer,
                                              IGaussianBlurWeightsAndOffsetsCache gaussianWeightsAndOffsetsCache)
        {
            _systemComponents               = systemComponents;
            _shaderLoader                   = shaderLoader;
            _pipelineFactory                = pipelineFactory;
            _ndcQuadVertexBuffer            = ndcQuadVertexBuffer;
            _gaussianWeightsAndOffsetsCache = gaussianWeightsAndOffsetsCache;

            Initialise();
        }
Exemplo n.º 8
0
        public ColourEffectsStageRenderer(IFrameworkMessenger frameworkMessenger,
                                          ISystemComponents systemComponents,
                                          IShaderLoader shaderLoader,
                                          IPipelineFactory pipelineFactory,
                                          IFullNdcSpaceQuadVertexBuffer ndcQuadVertexBuffer,
                                          IViewportManager viewportManager)
        {
            _frameworkMessenger  = frameworkMessenger;
            _systemComponents    = systemComponents;
            _shaderLoader        = shaderLoader;
            _pipelineFactory     = pipelineFactory;
            _ndcQuadVertexBuffer = ndcQuadVertexBuffer;
            _viewportManager     = viewportManager;

            Initialise();
        }
Exemplo n.º 9
0
        public DrawStageRenderer(IFrameworkMessenger frameworkMessenger,
                                 ISystemComponents components,
                                 IShaderLoader shaderLoader,
                                 IPipelineFactory pipelineFactory,
                                 IGpuSurfaceManager surfaceManager,
                                 IViewportManager viewportManager)
        {
            _frameworkMessenger = frameworkMessenger;
            _components         = components;
            _shaderLoader       = shaderLoader;
            _pipelineFactory    = pipelineFactory;
            _surfaceManager     = surfaceManager;
            _viewportManager    = viewportManager;

            Initialise();
        }
Exemplo n.º 10
0
        public BloomSamplingRenderer(ISystemComponents systemComponents,
                                     IShaderLoader shaderLoader,
                                     IPipelineFactory pipelineFactory,
                                     IFullNdcSpaceQuadVertexBuffer ndcQuadVertexBuffer,
                                     IDownSamplerWeightsAndOffsets downSamplerWeightsAndOffsets)
        {
            _systemComponents    = systemComponents;
            _shaderLoader        = shaderLoader;
            _pipelineFactory     = pipelineFactory;
            _ndcQuadVertexBuffer = ndcQuadVertexBuffer;
            _downSamplerValues   = downSamplerWeightsAndOffsets;

            Initialise();

            _sampleType = null;
        }
Exemplo n.º 11
0
        private Pipeline _pipeline; //rename internal version

        public DistortionGradientShiftRenderer(IFrameworkMessenger frameworkMessenger,
                                               ISystemComponents systemComponents,
                                               IShaderLoader shaderLoader,
                                               IPipelineFactory pipelineFactory,
                                               IGpuSurfaceManager surfaceManager,
                                               IFullNdcSpaceQuadVertexBuffer ndcQuadVertexBuffer)
        {
            _frameworkMessenger  = frameworkMessenger;
            _systemComponents    = systemComponents;
            _shaderLoader        = shaderLoader;
            _pipelineFactory     = pipelineFactory;
            _surfaceManager      = surfaceManager;
            _ndcQuadVertexBuffer = ndcQuadVertexBuffer;

            Initialise();
        }
Exemplo n.º 12
0
        public CustomShaderStageModel(IFrameworkMessenger frameworkMessenger,
                                      ISystemComponents systemComponents,
                                      IShaderLoader shaderLoader,
                                      IPipelineFactory pipelineFactory,
                                      IBlendStateConverter blendStateConverter,
                                      string fragmentShaderFilename,
                                      AssetSourceEnum shaderFileAssetType,
                                      ShaderUniformDescription[] userUniformDescriptions,
                                      BlendState blendState,
                                      bool userSpirvCompile)
        {
            _frameworkMessenger      = frameworkMessenger;
            _systemComponents        = systemComponents;
            _shaderLoader            = shaderLoader;
            _pipelineFactory         = pipelineFactory;
            _blendStateConverter     = blendStateConverter;
            _fragmentShaderFilename  = fragmentShaderFilename;
            _shaderFileAssetType     = shaderFileAssetType;
            _userUniformDescriptions = userUniformDescriptions;
            _blendState      = blendState;
            _useSpirvCompile = userSpirvCompile;

            Initialise();
        }
Exemplo n.º 13
0
        public static ArrayPoolStringBuilder Render(int threadsX, int threadsY, int threadsZ, IShaderLoader info)
        {
            var builder = ArrayPoolStringBuilder.Create();

            // Header
            builder.AppendLine("// ================================================");
            builder.AppendLine("//                  AUTO GENERATED");
            builder.AppendLine("// ================================================");
            builder.AppendLine("// This shader was created by ComputeSharp.");
            builder.AppendLine("// See: https://github.com/Sergio0694/ComputeSharp.");

            // Group size constants
            builder.AppendLine();
            builder.Append("#define __GroupSize__get_X ");
            builder.AppendLine(threadsX.ToString());
            builder.Append("#define __GroupSize__get_Y ");
            builder.AppendLine(threadsY.ToString());
            builder.Append("#define __GroupSize__get_Z ");
            builder.AppendLine(threadsZ.ToString());

            // Define declarations
            foreach (var define in info.DefinesInfo)
            {
                builder.Append("#define ");
                builder.Append(define.Key);
                builder.Append(' ');
                builder.AppendLine(define.Value);
            }

            // Static fields
            if (info.StaticFields.Count > 0)
            {
                builder.AppendLine();

                foreach (var constant in info.StaticFields)
                {
                    builder.Append(constant.Value.TypeDeclaration);
                    builder.Append(' ');
                    builder.Append(constant.Key);

                    if (constant.Value.Assignment is string assignment)
                    {
                        builder.Append(" = ");
                        builder.Append(assignment);
                    }

                    builder.AppendLine(";");
                }
            }

            // Declared types
            foreach (var type in info.DeclaredTypes)
            {
                builder.AppendLine();
                builder.AppendLine(type);
            }

            // Captured variables
            builder.AppendLine();
            builder.AppendLine("cbuffer _ : register(b0)");
            builder.AppendLine('{');
            builder.AppendLine("    uint __x;");
            builder.AppendLine("    uint __y;");
            builder.AppendLine("    uint __z;");

            foreach (var local in info.FieldsInfo)
            {
                builder.Append("    ");
                builder.Append(local.FieldType);
                builder.Append(' ');
                builder.Append(local.FieldName);
                builder.AppendLine(';');
            }

            builder.AppendLine('}');

            // Buffers
            foreach (var buffer in info.HlslResourceInfo)
            {
                builder.AppendLine();

                switch (buffer)
                {
                // Constant buffer go to cbuffer fields with a dummy local
                case HlslResourceInfo.Constant _:
                    builder.Append("cbuffer _");
                    builder.Append(buffer.FieldName);
                    builder.Append(" : register(b");
                    builder.Append(buffer.BufferIndex.ToString());
                    builder.AppendLine(')');
                    builder.AppendLine('{');
                    builder.Append("    ");
                    builder.Append(buffer.FieldType);
                    builder.Append(' ');
                    builder.Append(buffer.FieldName);
                    builder.AppendLine("[2];");
                    builder.AppendLine('}');
                    break;

                // Structured buffer have the same syntax but different id
                case HlslResourceInfo.ReadOnly _:
                    char registerId = 't';
                    goto StructuredBuffer;

                case HlslResourceInfo.ReadWrite _:
                    registerId = 'u';
StructuredBuffer:
                    builder.Append(buffer.FieldType);
                    builder.Append(' ');
                    builder.Append(buffer.FieldName);
                    builder.Append(" : register(");
                    builder.Append(registerId);
                    builder.Append(buffer.BufferIndex.ToString());
                    builder.AppendLine(");");
                    break;
                }
            }

            // Shared buffers
            foreach (var buffer in info.SharedBuffers)
            {
                builder.AppendLine();
                builder.Append("groupshared ");
                builder.Append(buffer.Value.Type);
                builder.Append(' ');
                builder.Append(buffer.Key);
                builder.Append('[');

                if (buffer.Value.Count is int count)
                {
                    builder.Append(count.ToString());
                }
                else
                {
                    builder.Append((threadsX * threadsY * threadsZ).ToString());
                }

                builder.AppendLine("];");
            }

            // Forward declarations
            foreach (var declaration in info.ForwardDeclarations)
            {
                builder.AppendLine();
                builder.AppendLine(declaration);
            }

            // Captured methods
            foreach (var function in info.MethodsInfo)
            {
                builder.AppendLine();
                builder.AppendLine(function);
            }

            // Entry point
            builder.AppendLine();
            builder.AppendLine("[NumThreads(__GroupSize__get_X, __GroupSize__get_Y, __GroupSize__get_Z)]");
            builder.AppendLine(info.EntryPoint);

            return(builder);
        }
Exemplo n.º 14
0
        public ShaderProgram Init(string vertexSource, string fragmentSource, IList <Variable> variables, string[] fragDataOutputs, IShaderLoader loader)
        {
            log.Info("ShaderProgram.Init ({0}) loading", this.Name);

            string vsrc, fsrc;

            if (loader != null)
            {
                vsrc = loader.Load(vertexSource).Content;
                fsrc = loader.Load(fragmentSource).Content;
            }
            else  // source is raw
            {
                vsrc = vertexSource;
                fsrc = fragmentSource;
            }

            this.AddVertexShader(vsrc);
            this.AddFragmentShader(fsrc);

            foreach (var v in variables)
            {
                this.AddVariable(v.Index, v.Name);
            }

            if (fragDataOutputs != null)
            {
                for (int i = 0; i < fragDataOutputs.Length; i++)
                {
                    this.AddFragmentShaderOutput(i, fragDataOutputs[i]);
                }
            }

            this.Link();
            return(this);
        }
Exemplo n.º 15
0
        public static SourceContent Preprocess(this SourceContent sourceContent, int levelsRemaining, IShaderLoader loader)
        {
            if (levelsRemaining < 0)
            {
                throw new InvalidOperationException("Maximum recursion levels exceeded in preprocessing.");
            }

            //string source =

            // find all instances of #include "x" and replace with preprocessed input

            var sb = new StringBuilder();

            foreach (var token in sourceContent.Content.Tokens())
            {
                switch (token.Type)
                {
                case TokenType.Text:
                    sb.Append(token.Content);
                    break;

                case TokenType.Include:
                    sb.Append(loader.LoadRaw(token.Content, sourceContent.Name.Name).Preprocess(levelsRemaining - 1, loader).Content);
                    break;
                }
            }


            var content = sb.ToString();

            return(new SourceContent
            {
                Name = sourceContent.Name,
                Content = content
            });
        }