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); }
private void ClearStates() { VertexShader.ClearCurrentState(); VertexShader.ClearDesiredState(); PixelShader.ClearCurrentState(); PixelShader.ClearDesiredState(); OutputMerger.ClearCurrentState(); OutputMerger.ClearDesiredState(); InputAssembler.ClearCurrentState(); InputAssembler.ClearDesiredState(); Rasterizer.ClearCurrentState(); Rasterizer.ClearDesiredState(); }
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); }
protected virtual void CreateObjects() { _memoryResources = new MemoryResources(); _inputAssembler = new InputAssembler(); _outputMerger = new OutputMerger(); }