Always use a non-sRGB texture as the render target so that color
and alpha blending are in sRGB space, matching Flash behavior.
If the surface format requires sRGB, render to an intermediate
linear buffer and copy to the surface as a final render step.
naga is currently lenient about some things which are invalid by
the WGSL spec. The Tint WGSL compiler disagreed, so these shaders
failed to compile in Chrome.
* #[derive(Collect)] should be before #[collect]
* Replace redunant `&buf[..]` with `buf`
* Changes most cases of UPPERCase to UpperCase
* Allow upper_case_acronym on most SWF types, as they are from
SWF spec/more annoying to change.
Switch to a single render pass for the whole frame, as opposed to
a render pass per draw call. This should be a large improvement to
performance. This currently requires some unsafe to work around a
self-reference between RenderPass and CommandEncoder in Frame;
this could eventually be cleaned up by changing RenderBackend
to return a Frame object instead of using begin_frame/end_frame
pairs.
Also switch to using push constants for the transform/color
uniforms.
Change the usage of the stencil buffer to avoid running out of
stencil bits when too many nested masks are active.
This also cleans things up on wgpu which requires us to make
pipeline states in advice; now we only need a few stencil states
for masking as opposed to hundreds.