What's Changed
- Add DeltaDash to the list of projects using the framework by @minisbett in #5969
- Allow gravity in RigidBodySimulation to be adjustable by @hwabis in #5972
- Use SSBOs for bindless masking by @smoogipoo in #5952
- Use RectangleF for masking scissor by @smoogipoo in #5960
- Implement window flashing by @ItsShamed in #5970
- Bump Android target SDK version to 33 by @bdach in #5973
- Fix
KeyBindingContainer
propagating release events to removed drawables by @bdach in #5975
Breaking changes
Maskable vertex input layout has changed
Vertices which want to use the built-in VertexShaderDescriptor.TEXTURE
fragment shader, or the sh_Masking.h
particle, will need to adjust the vertex input slightly:
+ #include "Internal/sh_MaskingInfo.h"
layout(location = 0) in vec2 m_Position;
+ layout(location = 1) in int m_MaskingIndex;
+ layout(location = 5) flat out int v_MaskingIndex;
+ layout(location = 6) out highp vec2 v_ScissorPosition;
void main(void)
{
+ InitMasking(m_MaskingIndex);
// Transform from screen space to masking space.
- highp vec3 maskingPos = g_ToMaskingSpace * vec3(m_Position, 1.0);
+ highp vec4 maskingPos = g_MaskingInfo.ToMaskingSpace * vec4(m_Position, 1.0, 0.0);
v_MaskingPosition = maskingPos.xy / maskingPos.z;
+ // Transform from screen space to scissor space.
+ highp vec4 scissorPos = g_MaskingInfo.ToScissorSpace * vec4(m_Position, 1.0, 0.0);
+ v_ScissorPosition = scissorPos.xy / scissorPos.z;
+ v_MaskingIndex = m_MaskingIndex;
gl_Position = g_ProjMatrix * vec4(m_Position, 1.0, 1.0);
}
Likewise, the C# definition must also be updated to write the m_MaskingIndex
input, and be constructed with an IRenderer
:
[StructLayout(LayoutKind.Sequential)]
public struct MyCustomVertex : IEquatable<MyCustomVertex>, IVertex
{
[VertexMember(2, VertexAttribPointerType.Float)]
public Vector2 Position;
+ [VertexMember(1, VertexAttribPointerType.Int)]
+ private readonly int maskingIndex;
+ public MyCustomVertex(IRenderer renderer)
+ {
+ this = default;
+ maskingIndex = renderer.CurrentMaskingIndex;
+ }
public readonly bool Equals(MyCustomVertex other) =>
Position.Equals(other.Position)
+ && maskingIndex == other.maskingIndex;
}
Non-masking fragment shaders must use non-masking vertex shaders
Any usages of VertexShaderDescriptor.TEXTURE_2
as a vertex shader in-combination with a non-masking fragment shader (i.e. one that does not use the built-in sh_Masking.h
particle), should be updated to use VertexShaderDescriptor.TEXTURE_2_NO_MASKING
instead.
IRenderer.PushScissorOffset()
/IRenderer.PopScissorOffset()
have been removed
The way masking applies scissor has changed such that this no longer has any use.
MaskingInfo
layout has changed
ScreenSpaceAABB
renamed toScreenSpaceScissorArea
.MaskingRect
renamed toMaskingArea
ToScissorSpace
added. IfScreenSpaceScissorArea
truly represents a screen-space area, set this toMatrix3.Identity
, otherwise set it to convert vertex coordinate inputs to the appropriate coordinate space ofScreenSpaceScissorArea
.
New Contributors
- @minisbett made their first contribution in #5969
- @ItsShamed made their first contribution in #5970
Full Changelog: 2023.817.0...2023.822.0