Skip to content

Commit

Permalink
Alpha to coverage support for GLES (#3187)
Browse files Browse the repository at this point in the history
  • Loading branch information
Wumpf authored Nov 7, 2022
1 parent b838b08 commit a377ae2
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
9 changes: 9 additions & 0 deletions wgpu-hal/src/gles/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions wgpu-hal/src/gles/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
2 changes: 2 additions & 0 deletions wgpu-hal/src/gles/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -742,6 +743,7 @@ enum Command {
SetDepth(DepthState),
SetDepthBias(wgt::DepthBiasState),
ConfigureDepthStencil(crate::FormatAspects),
SetAlphaToCoverage(bool),
SetVertexAttribute {
buffer: Option<glow::Buffer>,
buffer_desc: VertexBufferDesc,
Expand Down
7 changes: 7 additions & 0 deletions wgpu-hal/src/gles/queue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
Expand Down

0 comments on commit a377ae2

Please sign in to comment.