Test array texture

This commit is contained in:
Troispoils 2024-03-01 14:03:04 +01:00
parent 2b62d3b9e4
commit 51325d8650
4 changed files with 80 additions and 22 deletions

View file

@ -68,6 +68,42 @@ namespace Map3DRendering {
return new Texture(handle);
}
public static Texture LoadFromArray(string[] paths) {
// Générer un identifiant de texture
int handle = GL.GenTexture();
// Activer la texture
GL.ActiveTexture(TextureUnit.Texture0);
GL.BindTexture(TextureTarget.Texture2DArray, handle);
// Ici, nous supposons que toutes les images ont les mêmes dimensions et le même format
// Charger la première image pour obtenir les dimensions
ImageResult firstImage = ImageResult.FromStream(File.OpenRead(paths[0]), ColorComponents.RedGreenBlueAlpha);
int width = firstImage.Width;
int height = firstImage.Height;
// Initialiser la texture 2D array sans lui passer de données pour l'instant
GL.TexImage3D(TextureTarget.Texture2DArray, 0, PixelInternalFormat.Rgba, width, height, paths.Length, 0, PixelFormat.Rgba, PixelType.UnsignedByte, IntPtr.Zero);
// Charger chaque texture dans l'array
for (int i = 0; i < paths.Length; i++) {
using (Stream stream = File.OpenRead(paths[i])) {
ImageResult image = ImageResult.FromStream(stream, ColorComponents.RedGreenBlueAlpha);
GL.TexSubImage3D(TextureTarget.Texture2DArray, 0, 0, 0, i, width, height, 1, PixelFormat.Rgba, PixelType.UnsignedByte, image.Data);
}
}
// Paramètres de texture
GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge);
GL.TexParameter(TextureTarget.Texture2DArray, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge);
// Générer des mipmaps pour la texture array
GL.GenerateMipmap(GenerateMipmapTarget.Texture2DArray);
return new Texture(handle);
}
public Texture(int glHandle) {
Handle = glHandle;
@ -81,5 +117,9 @@ namespace Map3DRendering {
GL.ActiveTexture(unit);
GL.BindTexture(TextureTarget.Texture2D, Handle);
}
public void UseArray(TextureUnit unit) {
GL.ActiveTexture(unit);
GL.BindTexture(TextureTarget.Texture2DArray, Handle);
}
}
}