public void SetData <T>( CubeMapFace cubeMapFace, int level, Rectangle?rect, T[] data, int startIndex, int elementCount ) where T : struct { if (data == null) { throw new ArgumentNullException("data"); } int xOffset, yOffset, width, height; if (rect.HasValue) { xOffset = rect.Value.X; yOffset = rect.Value.Y; width = rect.Value.Width; height = rect.Value.Height; } else { xOffset = 0; yOffset = 0; width = Math.Max(1, Size >> level); height = Math.Max(1, Size >> level); } int elementSizeInBytes = Marshal.SizeOf(typeof(T)); GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); FNA3D.FNA3D_SetTextureDataCube( GraphicsDevice.GLDevice, texture, xOffset, yOffset, width, height, cubeMapFace, level, handle.AddrOfPinnedObject() + startIndex * elementSizeInBytes, elementCount * elementSizeInBytes ); handle.Free(); }
public void SetDataPointerEXT( CubeMapFace cubeMapFace, int level, Rectangle?rect, IntPtr data, int dataLength ) { if (data == IntPtr.Zero) { throw new ArgumentNullException("data"); } int xOffset, yOffset, width, height; if (rect.HasValue) { xOffset = rect.Value.X; yOffset = rect.Value.Y; width = rect.Value.Width; height = rect.Value.Height; } else { xOffset = 0; yOffset = 0; width = Math.Max(1, Size >> level); height = Math.Max(1, Size >> level); } FNA3D.FNA3D_SetTextureDataCube( GraphicsDevice.GLDevice, texture, xOffset, yOffset, width, height, cubeMapFace, level, data, dataLength ); }