public PipelineKey( FaceCullMode cullMode, bool depthWriteEnabled, ComparisonKind depthComparison, bool blendEnabled, BlendFactor sourceFactor, BlendFactor destinationColorFactor, BlendFactor destinationAlphaFactor) { CullMode = cullMode; DepthWriteEnabled = depthWriteEnabled; DepthComparison = depthComparison; BlendEnabled = blendEnabled; SourceFactor = sourceFactor; DestinationColorFactor = destinationColorFactor; DestinationAlphaFactor = destinationAlphaFactor; _hashCode = HashCode.Combine( CullMode, DepthWriteEnabled, DepthComparison, BlendEnabled, SourceFactor, DestinationColorFactor, DestinationAlphaFactor); }
public Pipeline CreateAPipeline(ResourceLayout[] resourceLayouts, ShaderSetDescription shaderSetDescription, OutputDescription outputDescription, BlendStateDescription blendStateDescription, bool depthTest, FaceCullMode faceCullMode = FaceCullMode.None, PolygonFillMode polygonFillMode = PolygonFillMode.Solid, FrontFace frontFaceWindingOrder = FrontFace.Clockwise) { var pipelineDescription = new GraphicsPipelineDescription() { BlendState = blendStateDescription, DepthStencilState = new DepthStencilStateDescription( depthTestEnabled: depthTest, depthWriteEnabled: depthTest, comparisonKind: ComparisonKind.LessEqual), RasterizerState = new RasterizerStateDescription( cullMode: faceCullMode, fillMode: polygonFillMode, frontFace: frontFaceWindingOrder, depthClipEnabled: depthTest, scissorTestEnabled: false ), PrimitiveTopology = PrimitiveTopology.TriangleList, ResourceLayouts = resourceLayouts, ShaderSet = shaderSetDescription, Outputs = outputDescription }; return(_components.Factory.CreateGraphicsPipeline(pipelineDescription)); }
/// <summary> /// Constructs a new RasterizerStateDescription. /// </summary> /// <param name="cullMode">Controls which face will be culled.</param> /// <param name="fillMode">Controls how the rasterizer fills polygons.</param> /// <param name="frontFace">Controls the winding order used to determine the front face of primitives.</param> /// <param name="depthClipEnabled">Controls whether depth clipping is enabled.</param> /// <param name="scissorTestEnabled">Controls whether the scissor test is enabled.</param> public RasterizerStateDescription( FaceCullMode cullMode, PolygonFillMode fillMode, FrontFace frontFace, bool depthClipEnabled, bool scissorTestEnabled) { CullMode = cullMode; FillMode = fillMode; FrontFace = frontFace; DepthClipEnabled = depthClipEnabled; ScissorTestEnabled = scissorTestEnabled; }
public Pipeline GetCachedPipeline( FaceCullMode cullMode, bool depthWriteEnabled, ComparisonKind depthComparison, bool blendEnabled, BlendFactor sourceFactor, BlendFactor destinationColorFactor, BlendFactor destinationAlphaFactor) { var key = new PipelineKey( cullMode, depthWriteEnabled, depthComparison, blendEnabled, sourceFactor, destinationColorFactor, destinationAlphaFactor); if (!_pipelines.TryGetValue(key, out var result)) { var blendState = new BlendStateDescription( RgbaFloat.White, new BlendAttachmentDescription( blendEnabled, sourceFactor, destinationColorFactor, BlendFunction.Add, sourceFactor, destinationAlphaFactor, BlendFunction.Add)); var depthState = DepthStencilStateDescription.DepthOnlyLessEqual; depthState.DepthWriteEnabled = depthWriteEnabled; depthState.DepthComparison = depthComparison; var rasterizerState = RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise; rasterizerState.CullMode = cullMode; _pipelines.Add(key, result = AddDisposable(GraphicsDevice.ResourceFactory.CreateGraphicsPipeline( new GraphicsPipelineDescription( blendState, depthState, rasterizerState, PrimitiveTopology.TriangleList, ShaderSet.Description, _resourceLayouts, RenderPipeline.GameOutputDescription)))); } return(result); }
internal static CullFaceMode VdToGLCullFaceMode(FaceCullMode cullMode) { switch (cullMode) { case FaceCullMode.Back: return(CullFaceMode.Back); case FaceCullMode.Front: return(CullFaceMode.Front); default: throw Illegal.Value <FaceCullMode>(); } }
internal static VkCullModeFlags VdToVkCullMode(FaceCullMode cullMode) { switch (cullMode) { case FaceCullMode.Back: return VkCullModeFlags.Back; case FaceCullMode.Front: return VkCullModeFlags.Front; case FaceCullMode.None: return VkCullModeFlags.None; default: throw Illegal.Value<FaceCullMode>(); } }
internal static CullMode ToD3D11CullMode(FaceCullMode cullingMode) { switch (cullingMode) { case FaceCullMode.Back: return(CullMode.Back); case FaceCullMode.Front: return(CullMode.Front); case FaceCullMode.None: return(CullMode.None); default: throw Illegal.Value <FaceCullMode>(); } }
internal void SetCullMode(FaceCullMode cullMode) { if (cullMode == FaceCullMode.Disable && faceCullEnable) { if (faceCullEnable) { faceCullEnable = false; GL.Disable(EnableCap.CullFace); } } else if (cullMode == FaceCullMode.Back) { if (faceCullFront) { GL.CullFace(CullFaceMode.Back); faceCullFront = false; } if (!faceCullEnable) { GL.Enable(EnableCap.CullFace); faceCullEnable = true; } } else if (cullMode == FaceCullMode.Front) { if (!faceCullFront) { GL.CullFace(CullFaceMode.Front); faceCullFront = true; } if (!faceCullEnable) { GL.Enable(EnableCap.CullFace); faceCullEnable = true; } } }
static EtmPipeline BuildPipeline(string name, FaceCullMode cullMode, IFramebufferHolder framebuffer) => new()
public IPipelineBuilder With(FaceCullMode faceCullMode) { rasterizer.CullMode = faceCullMode; return(this); }