Alpha to coverage support for GLES (#3187)

This commit is contained in:
Andreas Reich 2022-11-07 22:56:59 +01:00 committed by GitHub
parent b838b0871c
commit a377ae2b7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 20 additions and 0 deletions

View File

@ -68,6 +68,7 @@ Bottom level categories:
#### GLES
- Surfaces support now `TextureFormat::Rgba8Unorm` and (non-web only) `TextureFormat::Bgra8Unorm`. By @Wumpf in [#3070](https://github.com/gfx-rs/wgpu/pull/3070)
- Support alpha to coverage. By @Wumpf in [#3156](https://github.com/gfx-rs/wgpu/pull/3156)
### Bug Fixes

View File

@ -20,6 +20,7 @@ pub(super) struct State {
color_targets: ArrayVec<super::ColorTargetDesc, { crate::MAX_COLOR_ATTACHMENTS }>,
stencil: super::StencilState,
depth_bias: wgt::DepthBiasState,
alpha_to_coverage_enabled: bool,
samplers: [Option<glow::Sampler>; super::MAX_SAMPLERS],
texture_slots: [TextureSlotDesc; super::MAX_TEXTURE_SLOTS],
render_size: wgt::Extent3d,
@ -795,6 +796,14 @@ impl crate::CommandEncoder<super::Api> for super::CommandEncoder {
.commands
.push(C::ConfigureDepthStencil(aspects));
// set multisampling state
if pipeline.alpha_to_coverage_enabled != self.state.alpha_to_coverage_enabled {
self.state.alpha_to_coverage_enabled = pipeline.alpha_to_coverage_enabled;
self.cmd_buffer
.commands
.push(C::SetAlphaToCoverage(pipeline.alpha_to_coverage_enabled));
}
// set blend states
if self.state.color_targets[..] != pipeline.color_targets[..] {
if pipeline

View File

@ -1090,6 +1090,7 @@ impl crate::Device<super::Api> for super::Device {
.depth_stencil
.as_ref()
.map(|ds| conv::map_stencil(&ds.stencil)),
alpha_to_coverage_enabled: desc.multisample.alpha_to_coverage_enabled,
})
}
unsafe fn destroy_render_pipeline(&self, pipeline: super::RenderPipeline) {

View File

@ -502,6 +502,7 @@ pub struct RenderPipeline {
depth: Option<DepthState>,
depth_bias: wgt::DepthBiasState,
stencil: Option<StencilState>,
alpha_to_coverage_enabled: bool,
}
// SAFE: WASM doesn't have threads
@ -742,6 +743,7 @@ enum Command {
SetDepth(DepthState),
SetDepthBias(wgt::DepthBiasState),
ConfigureDepthStencil(crate::FormatAspects),
SetAlphaToCoverage(bool),
SetVertexAttribute {
buffer: Option<glow::Buffer>,
buffer_desc: VertexBufferDesc,

View File

@ -992,6 +992,13 @@ impl super::Queue {
gl.disable(glow::STENCIL_TEST);
}
}
C::SetAlphaToCoverage(enabled) => {
if enabled {
gl.enable(glow::SAMPLE_ALPHA_TO_COVERAGE);
} else {
gl.disable(glow::SAMPLE_ALPHA_TO_COVERAGE);
}
}
C::SetProgram(program) => {
gl.use_program(Some(program));
}