-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTexture.cs
More file actions
30 lines (28 loc) · 1.32 KB
/
Texture.cs
File metadata and controls
30 lines (28 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using OpenTK.Graphics.OpenGL;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
namespace SampleRenderer;
public static class Texture
{
public static unsafe int Load(Stream stream)
{
using (var image = Image.Load(stream))
{
var texture = GL.GenTexture();
GL.BindTexture(TextureTarget.Texture2D, texture);
using var rgba32 = image.CloneAs<Rgba32>();
Span<Rgba32> pixels = new Rgba32[image.Width * image.Height];
rgba32.CopyPixelDataTo(pixels);
fixed (Rgba32* ptr = &pixels.GetPinnableReference())
{
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, image.Width, image.Height, 0,
PixelFormat.Rgba, PixelType.UnsignedByte, (IntPtr)ptr);
}
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Clamp);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Clamp);
return texture;
}
}
}