Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaClient/ClientSource/Utils/GraphicsQuad.cs
2023-12-14 16:11:27 +02:00

68 lines
2.3 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.Text;
namespace Barotrauma
{
static class GraphicsQuad
{
private static VertexBuffer vertexBuffer = null;
private static IndexBuffer indexBuffer = null;
private static BasicEffect basicEffect = null;
private static GraphicsDevice graphicsDevice = null;
public static void Init(GraphicsDevice graphics)
{
if (graphicsDevice != null) { return; }
graphicsDevice = graphics;
vertexBuffer = new VertexBuffer(graphics, VertexPositionTexture.VertexDeclaration, 4, BufferUsage.WriteOnly);
indexBuffer = new IndexBuffer(graphics, IndexElementSize.SixteenBits, 4, BufferUsage.WriteOnly);
InitVertexData();
indexBuffer.SetData(new ushort[] { 0, 1, 2, 3 });
basicEffect = new BasicEffect(graphics) { TextureEnabled = true };
GameMain.Instance.ResolutionChanged += () =>
{
InitVertexData();
};
}
private static void InitVertexData()
{
Vector2 halfPixelOffset = Vector2.Zero;
#if LINUX || OSX
halfPixelOffset = new Vector2(0.5f / GameMain.GraphicsWidth, 0.5f / GameMain.GraphicsHeight);
#endif
VertexPositionTexture[] vertices =
{
new VertexPositionTexture(new Vector3(-1f, -1f, 1f), new Vector2(0f, 1f) + halfPixelOffset),
new VertexPositionTexture(new Vector3(-1f, 1f, 1f), new Vector2(0f, 0f) + halfPixelOffset),
new VertexPositionTexture(new Vector3(1f, -1f, 1f), new Vector2(1f, 1f) + halfPixelOffset),
new VertexPositionTexture(new Vector3(1f, 1f, 1f), new Vector2(1f, 0f) + halfPixelOffset)
};
vertexBuffer.SetData(vertices);
}
public static void UseBasicEffect(Texture2D texture)
{
basicEffect.Texture = texture;
basicEffect.CurrentTechnique.Passes[0].Apply();
}
public static void Render()
{
graphicsDevice.SetVertexBuffer(vertexBuffer);
graphicsDevice.Indices = indexBuffer;
graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleStrip, 0, 0, 2);
}
}
}