Esempio n. 1
0
        public static void Render <TVertexShaderIn, TPixelShaderIn>(
            TVertexShaderIn[] vertices,
            int[] indices,
            MemoryResources resources,
            InputAssembler inputAssembler,
            OutputMerger outputMerger,
            IVertexShader <TVertexShaderIn, TPixelShaderIn> vertexShader,
            IGeometryProcessor <TPixelShaderIn> geometryProcessor,
            IRasterizer <TPixelShaderIn> rasterizer,
            IPixelShader <TPixelShaderIn> pixelShader,
            Bitmap output)
            where TVertexShaderIn : struct, IVertexShaderInput
            where TPixelShaderIn : struct, IPixelShaderInput
        {
            if (vertices.Length == 0 || indices.Length == 0)
            {
                return;
            }

            (vertices, indices) = inputAssembler.Assemble(vertices, indices);

            var vertexShaderOutput = new TPixelShaderIn[vertices.Length];

            for (var i = 0; i < vertices.Length; ++i)
            {
                vertexShaderOutput[i] = vertexShader.Transform(resources, vertices[i]);
            }

            (vertexShaderOutput, indices) = geometryProcessor.Process(vertexShaderOutput, indices);

            var pixelShaderOutput = rasterizer.Rasterize(resources, vertexShaderOutput, indices, pixelShader, outputMerger, output.Width, output.Height, _outputBuffer, _wBuffer);

            Helper.SetPixels(pixelShaderOutput, output);
        }
Esempio n. 2
0
        private void ClearStates()
        {
            VertexShader.ClearCurrentState();
            VertexShader.ClearDesiredState();

            PixelShader.ClearCurrentState();
            PixelShader.ClearDesiredState();

            OutputMerger.ClearCurrentState();
            OutputMerger.ClearDesiredState();

            InputAssembler.ClearCurrentState();
            InputAssembler.ClearDesiredState();

            Rasterizer.ClearCurrentState();
            Rasterizer.ClearDesiredState();
        }
Esempio n. 3
0
        public void ApplyShaderResources()
        {
            var vs = (CargoEngine.Shader.VertexShader)VertexShader.Shader;

            if (vs != null && InputAssembler.DesiredState.InputElements.NeedUpdate)
            {
                var il = vs.GetInputLayout(InputAssembler.InputElements);
                DevContext.InputAssembler.InputLayout           = il;
                InputAssembler.CurrentState.InputElements.State = InputAssembler.DesiredState.InputElements.State;
                InputAssembler.DesiredState.InputElements.ResetTracking();
            }

            InputAssembler.ApplyDesiredState(DevContext, ParameterManager);

            VertexShader.ApplyDesiredState(DevContext, ParameterManager);

            PixelShader.ApplyDesiredState(DevContext, ParameterManager);

            Rasterizer.ApplyDesiredState(DevContext, ParameterManager);
        }
Esempio n. 4
0
 protected virtual void CreateObjects()
 {
     _memoryResources = new MemoryResources();
     _inputAssembler  = new InputAssembler();
     _outputMerger    = new OutputMerger();
 }