sbox-issues icon indicating copy to clipboard operation
sbox-issues copied to clipboard

Gizmo.Draw.Sprite isn't visible under ~0.1 alpha

Open ryleigh opened this issue 7 months ago • 1 comments

  • when drawing with Gizmo.Draw.Sprite, the texture becomes invisible under any alpha around 0.101
  • when using Gizmo.Draw.Line, it smoothly fades as expected all the way to alpha=0

repro project: sprite_alpha_bug.zip

https://github.com/user-attachments/assets/b76987e1-57a8-42c3-83ce-7f8475bcc91a

public sealed class Manager : Component
{
	[Property] public Texture SmileyTexture { get; set; }

	protected override void OnUpdate()
	{
		DrawSmiley( pos: new Vector3( -30f, 30f, 0f ), alpha: 0.1015628599999999f );
		DrawSmiley( pos: new Vector3( 0f, 30f, 0f ), alpha: 0.1015629f );
		DrawSmiley( pos: new Vector3( 30f, 30f, 0f ), alpha: 0.5f + MathF.Sin(Time.Now * 0.5f) * 0.5f );

		DrawLine( pos: new Vector3( -30f, -30f, 0f ), alpha: 0.1015628599999999f );
		DrawLine( pos: new Vector3( 0f, -30f, 0f ), alpha: 0.1015629f );
		DrawLine( pos: new Vector3( 30f, -30f, 0f ), alpha: 0.5f + MathF.Sin( Time.Now * 0.5f ) * 0.5f );

		Gizmo.Draw.Color = Color.Red;
		Gizmo.Draw.Text( $"Gizmo.Draw.Sprite", new global::Transform( new Vector3( -80f, 30f, 0f ) ), size: 36f );
		Gizmo.Draw.Color = Color.Blue;
		Gizmo.Draw.Text( $"Gizmo.Draw.Line", new global::Transform( new Vector3( -80f, -30f, 0f ) ), size: 36f );
	}

	void DrawSmiley(Vector3 pos, float alpha)
	{
		Gizmo.Draw.Color = Color.White.WithAlpha( alpha );
		Gizmo.Draw.Sprite( pos, 20f, SmileyTexture, worldspace: true );

		Gizmo.Draw.Color = Color.White;
		Gizmo.Draw.Text( $"alpha: {alpha.ToString("N9")}", new global::Transform( pos + new Vector3(0f, -13f, 0f) ) );
	}

	void DrawLine( Vector3 pos, float alpha )
	{
		Gizmo.Draw.Color = Color.White.WithAlpha( alpha );
		Gizmo.Draw.LineThickness = 10f;
		Gizmo.Draw.Line( pos + new Vector3( -10f, 10f, 0f), pos + new Vector3(10f, -10f, 0f) );

		Gizmo.Draw.Color = Color.White;
		Gizmo.Draw.Text( $"alpha: {alpha.ToString( "N9" )}", new global::Transform( pos + new Vector3( 0f, -13f, 0f ) ) );
	}
}

ryleigh avatar May 12 '25 19:05 ryleigh

Seems it's being both translucent and alpha tested at same time?

sampavlovic avatar May 14 '25 02:05 sampavlovic