Exemplo n.º 1
0
        public static GraphicsPipelineDescription GenerateOmniShadowMappingPreEffectPipeline <T>(
            ModelRuntimeDescriptor <T> modelRuntimeState,
            SceneRuntimeDescriptor sceneRuntimeState,
            RasterizerStateDescription rasterizerState,
            uint preEffectFlag,
            Framebuffer framebuffer) where T : struct, VertexLocateable
        {
            //TODO: Build resource layout outside and pass as parameter
            var shaderArrayIndex = RenderFlags.GetPreEffectArrayIndexForFlag(preEffectFlag);
            var shaderArray      =
                new Shader[] { modelRuntimeState.VertexPreEffectShaders[shaderArrayIndex], modelRuntimeState.GeometryPreEffectShaders[shaderArrayIndex], modelRuntimeState.FragmentPreEffectShaders[shaderArrayIndex] };

            return(new GraphicsPipelineDescription()
            {
                BlendState = BlendStateDescription.SingleOverrideBlend,
                DepthStencilState = DepthStencilStateDescription.DepthOnlyLessEqual,
                RasterizerState = rasterizerState,
                PrimitiveTopology = modelRuntimeState.PrimitiveTopology,
                ResourceLayouts = new ResourceLayout[] { sceneRuntimeState.CameraResourceLayout, sceneRuntimeState.OmniLightProvViewResourceLayout, sceneRuntimeState.CameraInfoResourceLayout },
                ShaderSet = new ShaderSetDescription(
                    vertexLayouts: modelRuntimeState.VertexPreEffectsLayouts,
                    shaders: shaderArray
                    ),
                Outputs = framebuffer.OutputDescription
            });
        }
Exemplo n.º 2
0
        public static GraphicsPipelineDescription GeneratePipelinePNTTB <T>(
            ModelRuntimeDescriptor <T> modelRuntimeState,
            SceneRuntimeDescriptor sceneRuntimeState,
            RasterizerStateDescription rasterizerState,
            Framebuffer framebuffer,
            ResourceLayout[] effectLayouts) where T : struct, VertexLocateable
        {
            var resourceLayout = new ResourceLayout[] {
                sceneRuntimeState.CameraResourceLayout,
                sceneRuntimeState.LightResourceLayout,
                sceneRuntimeState.SpotLightResourceLayout,
                sceneRuntimeState.MaterialResourceLayout,
                modelRuntimeState.TextureResourceLayout
            };

            var completeResourceLayout = new ResourceLayout[resourceLayout.Length + effectLayouts.Length];

            resourceLayout.CopyTo(completeResourceLayout, 0);
            effectLayouts.CopyTo(completeResourceLayout, resourceLayout.Length);

            return(new GraphicsPipelineDescription()
            {
                BlendState = BlendStateDescription.SingleOverrideBlend,
                DepthStencilState = DepthStencilStateDescription.DepthOnlyLessEqual,
                RasterizerState = rasterizerState,
                PrimitiveTopology = modelRuntimeState.PrimitiveTopology,
                ResourceLayouts = completeResourceLayout,
                ShaderSet = new ShaderSetDescription(
                    vertexLayouts: modelRuntimeState.VertexLayouts,
                    shaders: new Shader[] { modelRuntimeState.VertexShader, modelRuntimeState.FragmentShader }
                    ),
                Outputs = framebuffer.OutputDescription
            });
        }
Exemplo n.º 3
0
        //TODO: Add color space handling
        override public void CreateResources(SceneRuntimeDescriptor sceneRuntimeDescriptor,
                                             ModelRuntimeDescriptor <VertexPositionNormalTextureTangentBitangent>[] modelPNTTBDescriptorArray,
                                             ModelRuntimeDescriptor <VertexPositionNormal>[] modelPNDescriptorArray,
                                             ModelRuntimeDescriptor <VertexPositionTexture>[] modelPTDescriptorArray,
                                             ModelRuntimeDescriptor <VertexPositionColor>[] modelPCDescriptorArray)
        {
            //ResourceFactory factory = GraphicsDevice.ResourceFactory;
            _vertexBuffer      = _factory.CreateBuffer(new BufferDescription(10000, BufferUsage.VertexBuffer | BufferUsage.Dynamic));
            _vertexBuffer.Name = "ImGui.NET Vertex Buffer";
            _indexBuffer       = _factory.CreateBuffer(new BufferDescription(2000, BufferUsage.IndexBuffer | BufferUsage.Dynamic));
            _indexBuffer.Name  = "ImGui.NET Index Buffer";

            _projMatrixBuffer      = _factory.CreateBuffer(new BufferDescription(64, BufferUsage.UniformBuffer | BufferUsage.Dynamic));
            _projMatrixBuffer.Name = "ImGui.NET Projection Buffer";

            byte[] vertexShaderBytes   = LoadEmbeddedShaderCode(GraphicsDevice.ResourceFactory, "imgui-vertex");
            byte[] fragmentShaderBytes = LoadEmbeddedShaderCode(GraphicsDevice.ResourceFactory, "imgui-frag");
            _vertexShader   = _factory.CreateShader(new ShaderDescription(ShaderStages.Vertex, vertexShaderBytes, GraphicsDevice.BackendType == GraphicsBackend.Vulkan ? "main" : "VS"));
            _fragmentShader = _factory.CreateShader(new ShaderDescription(ShaderStages.Fragment, fragmentShaderBytes, GraphicsDevice.BackendType == GraphicsBackend.Vulkan ? "main" : "FS"));

            VertexLayoutDescription[] vertexLayouts = new VertexLayoutDescription[]
            {
                new VertexLayoutDescription(
                    new VertexElementDescription("in_position", VertexElementSemantic.Position, VertexElementFormat.Float2),
                    new VertexElementDescription("in_texCoord", VertexElementSemantic.TextureCoordinate, VertexElementFormat.Float2),
                    new VertexElementDescription("in_color", VertexElementSemantic.Color, VertexElementFormat.Byte4_Norm))
            };

            _layout = _factory.CreateResourceLayout(new ResourceLayoutDescription(
                                                        new ResourceLayoutElementDescription("ProjectionMatrixBuffer", ResourceKind.UniformBuffer, ShaderStages.Vertex),
                                                        new ResourceLayoutElementDescription("MainSampler", ResourceKind.Sampler, ShaderStages.Fragment)));
            _textureLayout = _factory.CreateResourceLayout(new ResourceLayoutDescription(
                                                               new ResourceLayoutElementDescription("MainTexture", ResourceKind.TextureReadOnly, ShaderStages.Fragment)));

            GraphicsPipelineDescription pd = new GraphicsPipelineDescription(
                BlendStateDescription.SingleAlphaBlend,
                new DepthStencilStateDescription(false, false, ComparisonKind.Always),
                new RasterizerStateDescription(FaceCullMode.None, PolygonFillMode.Solid, FrontFace.Clockwise, true, true),
                PrimitiveTopology.TriangleList,
                new ShaderSetDescription(
                    vertexLayouts,
                    new[] { _vertexShader, _fragmentShader },
                    new[]
            {
                new SpecializationConstant(0, GraphicsDevice.IsClipSpaceYInverted),
                new SpecializationConstant(1, true),
            }),
                new ResourceLayout[] { _layout, _textureLayout },
                _frameBuffer.OutputDescription,
                ResourceBindingModel.Improved);

            _pipeline = _factory.CreateGraphicsPipeline(ref pd);

            _mainResourceSet = _factory.CreateResourceSet(new ResourceSetDescription(_layout,
                                                                                     _projMatrixBuffer,
                                                                                     GraphicsDevice.PointSampler));

            RecreateFontDeviceTexture(GraphicsDevice);
        }
Exemplo n.º 4
0
        public override void CreateResources(SceneRuntimeDescriptor mainSceneRuntimeDescriptor,
                                             ModelRuntimeDescriptor <VertexPositionNormalTextureTangentBitangent>[] modelPNTTBDescriptorArray,
                                             ModelRuntimeDescriptor <VertexPositionNormal>[] modelPNDescriptorArray,
                                             ModelRuntimeDescriptor <VertexPositionTexture>[] modelPTDescriptorArray,
                                             ModelRuntimeDescriptor <VertexPositionColor>[] modelPCDescriptorArray)
        {
            _modelPNTTBDescriptorArray = modelPNTTBDescriptorArray;
            _modelPNDescriptorArray    = modelPNDescriptorArray;
            _modelPTDescriptorArray    = modelPTDescriptorArray;
            _modelPCDescriptorArray    = modelPCDescriptorArray;

            _sceneRuntimeDescriptor.Light = mainSceneRuntimeDescriptor.Light;
        }