本文整理汇总了C#中System.IO.BinaryReader.ReadStruct方法的典型用法代码示例。如果您正苦于以下问题:C# System.IO.BinaryReader.ReadStruct方法的具体用法?C# System.IO.BinaryReader.ReadStruct怎么用?C# System.IO.BinaryReader.ReadStruct使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.IO.BinaryReader
的用法示例。
在下文中一共展示了System.IO.BinaryReader.ReadStruct方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: vglLoadDDS
public static void vglLoadDDS(string filename, ref vglImageData image)
{
System.IO.FileStream f = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader br = new System.IO.BinaryReader(f);
//DDS_FILE_HEADER file_header = { 0, };
DDS_FILE_HEADER file_header = new DDS_FILE_HEADER();
//fread(&file_header, sizeof(file_header.magic) + sizeof(file_header.std_header), 1, f);
file_header = br.ReadStruct<DDS_FILE_HEADER>();
file_header.dxt10_header.format = 0;
file_header.dxt10_header.array_size = 0;
f.Position = Marshal.SizeOf(file_header.magic) + Marshal.SizeOf(file_header.std_header);
if (file_header.magic != DDSSignal.DDS_MAGIC)
{
goto done_close_file;
}
if (file_header.std_header.ddspf.dwFourCC == DDSSignal.DDS_FOURCC_DX10)
{
//fread(&file_header.dxt10_header, sizeof(file_header.dxt10_header), 1, f);
f.Position = Marshal.SizeOf(file_header.magic) + Marshal.SizeOf(file_header.std_header);
file_header.dxt10_header = br.ReadStruct<DDS_HEADER_DXT10>();
}
if (!vgl_DDSHeaderToImageDataHeader(ref file_header, ref image))
goto done_close_file;
image.target = vgl_GetTargetFromDDSHeader(ref file_header);
if (image.target == GL.GL_NONE)
goto done_close_file;
//int current_pos = ftell(f);
long current_pos = f.Position;
long file_size = f.Length;
image.totalDataSize = (int)(file_size - current_pos);
var data = new UnmanagedArray<byte>(image.totalDataSize);
if (image.mip == null) { image.mip = new vglImageMipData[vermilion.MAX_TEXTURE_MIPS]; }
image.mip[0].data = data.Header;
//image.mip[0].data = new byte[image.totalDataSize];
//fread(image.mip[0].data, file_size - current_pos, 1, f);
for (int i = 0; i < image.totalDataSize; i++)
{
data[i] = br.ReadByte();
}
int level;
IntPtr ptr = image.mip[0].data;
uint width = file_header.std_header.width;
uint height = file_header.std_header.height;
uint depth = file_header.std_header.depth;
image.sliceStride = 0;
if (image.mipLevels == 0)
{
image.mipLevels = 1;
}
for (level = 0; level < image.mipLevels; ++level)
{
image.mip[level].data = ptr;
image.mip[level].width = (int)width;
image.mip[level].height = (int)height;
image.mip[level].depth = (int)depth;
image.mip[level].mipStride = (int)(vgl_GetDDSStride(ref file_header, (int)width) * height);
image.sliceStride += image.mip[level].mipStride;
ptr += image.mip[level].mipStride;
width >>= 1;
height >>= 1;
depth >>= 1;
}
done_close_file:
f.Close();
}