internal void LoadFromData(byte[] data, string name, bool isCompressed) { if (isCompressed) { try { ImageDDS.LoadFromData(data, name, out Id, out textureTarget, out pixelFormat, out pixelType); }catch (Exception e) { RLog.Error("Error loading texture for: " + name); RLog.Error(e.Message); RLog.Error(e); } } else { try { ImageGDI.LoadFromData(data, out Id, out textureTarget, out pixelFormat, out pixelType); }catch (Exception e) { RLog.Error("Error loading texture for: " + name); RLog.Error(e.Message); RLog.Error(e); } } if (Id == 0 || textureTarget == 0) { RLog.Error("Error generating OpenGL texture for: " + name); } // load succeeded, Texture can be used. Bind(); GL.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, (int)RTextureMagFilter.Linear); int MipMapCount; GL.GetTexParameter(textureTarget, GetTextureParameter.TextureMaxLevel, out MipMapCount); if (MipMapCount == 0) // if no MipMaps are present, use linear Filter { GL.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, (int)RTextureMinFilter.Linear); } else // MipMaps are present, use trilinear Filter { GL.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, (int)RTextureMinFilter.LinearMipmapLinear); } int height, width; GL.GetTexParameter(textureTarget, GetTextureParameter.TextureHeight, out height); GL.GetTexParameter(textureTarget, GetTextureParameter.TextureWidth, out width); Bounds = new Reactor.Math.Rectangle(0, 0, width, height); RLog.Info("Texture loaded for: " + name); }