2025-08-12 19:30:40 +02:00

41 lines
1.2 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace skyscraper8.UI.MonoGame.Bridge;
public class IqWindow : TextureDisplayWindow
{
public IqWindow(GraphicsDevice graphicsDevice, ImGuiRenderer renderer, string name = "IQ", bool closeable = false)
: base(renderer, new Texture2D(graphicsDevice,256,256), name, closeable)
{
sampleQueue = new Queue<Tuple<byte, byte>>();
colorBuffer = new Color[256 * 256];
zBuffer = new byte[256 * 256];
_texture.GetData(colorBuffer);
Array.Fill(colorBuffer, Color.Transparent);
}
private Queue<Tuple<byte, byte>> sampleQueue;
public void EnqueueSample(byte i, byte q)
{
sampleQueue.Enqueue(new Tuple<byte, byte>(i, q));
}
private byte[] zBuffer;
private Color[] colorBuffer;
public override void Update()
{
while (sampleQueue.Count > 0)
{
Tuple<byte, byte> dequeue = sampleQueue.Dequeue();
int offset = dequeue.Item2 * 256;
offset += dequeue.Item1;
byte z = zBuffer[offset]++;
colorBuffer[offset] = new Color(z, 0, 255 - z, 255);
}
_texture.SetData(colorBuffer);
base.Update();
}
}