private unsafe void SetFaceData(RenderContext renderContext, CubeMapDirection direction, Image <Rgba32> image) { fixed(void *data = &MemoryMarshal.GetReference(ImageHelper.GetPixelSpan(image))) { var previousTexture = renderContext.GetCurrentTexture(0); renderContext.BindTextureCubeMap(0, this); GL.TexImage2D(GetTextureTarget(direction), 0, PixelInternalFormat.Rgba, image.Width, image.Height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, new IntPtr(data)); if (previousTexture != null) { previousTexture.Bind(0, renderContext); } else { renderContext.UnbindTextureCubeMap(0); } } }
private TextureTarget GetTextureTarget(CubeMapDirection dir) { switch (dir) { case CubeMapDirection.Front: return(TextureTarget.TextureCubeMapPositiveX); case CubeMapDirection.Back: return(TextureTarget.TextureCubeMapNegativeX); case CubeMapDirection.Up: return(TextureTarget.TextureCubeMapPositiveY); case CubeMapDirection.Down: return(TextureTarget.TextureCubeMapNegativeY); case CubeMapDirection.Right: return(TextureTarget.TextureCubeMapPositiveZ); case CubeMapDirection.Left: return(TextureTarget.TextureCubeMapNegativeZ); default: throw new ArgumentOutOfRangeException(nameof(dir), dir, null); } }