private static void LoadTextureRGBforOpenGl(int TextureIndex)
{
// apply to opengl
int[] a = new int[1];
GL.GenTextures(1, a);
if (a[0] > 0)
{
Textures[TextureIndex].OpenGlTextureIndex = a[0];
GL.BindTexture(TextureTarget.Texture2D, a[0]);
switch (Interface.CurrentOptions.Interpolation)
{
case InterpolationMode.NearestNeighbor:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
break;
case InterpolationMode.Bilinear:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
break;
case InterpolationMode.NearestNeighborMipmapped:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.NearestMipmapNearest);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
break;
case InterpolationMode.BilinearMipmapped:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.NearestMipmapLinear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
break;
case InterpolationMode.TrilinearMipmapped:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
break;
default:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
break;
}
if (Interface.CurrentOptions.AnisotropicFilteringLevel > 0)
{
GL.TexParameter(TextureTarget.Texture2D, (TextureParameterName)ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, Interface.CurrentOptions.AnisotropicFilteringLevel);
}
if (Textures[TextureIndex].WrapModeX == TextureWrapMode.Repeat)
{
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat);
}
else
{
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)OpenTK.Graphics.OpenGL.TextureWrapMode.ClampToEdge);
}
if (Textures[TextureIndex].WrapModeY == TextureWrapMode.Repeat)
{
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat);
}
else
{
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)OpenTK.Graphics.OpenGL.TextureWrapMode.ClampToEdge);
}
byte[] Data = Textures[TextureIndex].Data;
int Width = Textures[TextureIndex].Width;
int Height = Textures[TextureIndex].Height;
bool generateMipmap = Interface.CurrentOptions.Interpolation != InterpolationMode.NearestNeighbor && Interface.CurrentOptions.Interpolation != InterpolationMode.Bilinear;
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.GenerateMipmap, generateMipmap ? 1 : 0);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, Width, Height, 0, GLPixelFormat.Bgr, PixelType.UnsignedByte, Data);
}
Textures[TextureIndex].Loaded = true;
Textures[TextureIndex].Data = null;
}