示例#1
0
        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();
        }
示例#2
0
        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
                );
        }