public static HdriTexture LoadFromFile(string filePath) { var fileData = File.ReadAllBytes(filePath); var image = ImageResultFloat.FromMemory(fileData, ColorComponents.RedGreenBlue); var imageBytes = new List <byte>(); foreach (var fl in image.Data) { var imageDataByteArray = BitConverter.GetBytes(fl); imageBytes.AddRange(imageDataByteArray); } var textureDataPtr = Marshal.AllocHGlobal(imageBytes.Count); Marshal.Copy(imageBytes.ToArray(), 0, textureDataPtr, imageBytes.Count); uint texturePtr = Gl.GenTexture(); Gl.BindTexture(TextureTarget.Texture2d, texturePtr); Gl.TexImage2D(TextureTarget.Texture2d, 0, InternalFormat.Rgb16f, image.Width, image.Height, 0, PixelFormat.Rgb, PixelType.Float, textureDataPtr); Marshal.FreeHGlobal(textureDataPtr); Logging.Log($"Loaded cubemap texture {filePath}, ptr {texturePtr}"); 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.ClampToEdge); Gl.TexParameter(TextureTarget.Texture2d, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge); Gl.BindTexture(TextureTarget.Texture2d, 0); return(new HdriTexture(texturePtr)); }
public void LoadHdr(string filename, int width, int height, ColorComponents colorComponents) { ImageResultFloat result = null; using (var stream = _assembly.OpenResourceStream(filename)) { result = ImageResultFloat.FromStream(stream, ColorComponents.RedGreenBlueAlpha); } Assert.IsNotNull(result); Assert.AreEqual(result.Width, width); Assert.AreEqual(result.Height, height); Assert.AreEqual(result.Comp, ColorComponents.RedGreenBlueAlpha); Assert.AreEqual(result.SourceComp, colorComponents); Assert.IsNotNull(result.Data); Assert.AreEqual(result.Data.Length, result.Width * result.Height * 4); }