Go to the documentation of this file.00001 #include "../pch.h"
00002
00003 MeshData::MeshData()
00004 {
00005 vertexSize = 0;
00006 vertexCount = 0;
00007 indexCount = 0;
00008 vertices = 0;
00009 indices = 0;
00010 }
00011
00012 MeshData::~MeshData()
00013 {
00014 free();
00015 }
00016
00017 void MeshData::free()
00018 {
00019 vertexSize = 0;
00020 vertexCount = 0;
00021 indexCount = 0;
00022 if(vertices)
00023 {
00024 ::free(vertices);
00025 vertices = 0;
00026 }
00027 indices = 0;
00028 }
00029
00030 struct rvgHeader
00031 {
00032 uint headUInt;
00033 int version;
00034 int vertexSize;
00035 int vertexCount;
00036 int indexCount;
00037 };
00038
00039 bool loadMeshData(wchar* filename, MeshData& meshData)
00040 {
00041 FILE* file;
00042 rvgHeader header;
00043 const char rvgHead[] = "RVG ";
00044
00045
00046 if(_wfopen_s(&file, filename, TEXT("rb")) != 0)
00047 return false;
00048
00049
00050 if(fread(&header, sizeof(rvgHeader), 1, file) != 1)
00051 return fclose(file), false;
00052
00053
00054 if(header.headUInt != *(uint*)rvgHead)
00055 return fclose(file), false;
00056 if(header.version != 1)
00057 return fclose(file), false;
00058 if(header.vertexSize != int(sizeof(Vertex)))
00059 return fclose(file), false;
00060 if(header.vertexCount < 3)
00061 return fclose(file), false;
00062 if((header.indexCount < 3) || ((header.indexCount % 3) != 0))
00063 return fclose(file), false;
00064
00065
00066 void* memory = malloc(header.vertexSize*header.vertexCount + 2*header.indexCount);
00067 Vertex* vertices = (Vertex*)memory;
00068 ushort* indices = (ushort*)&vertices[header.vertexCount];
00069
00070
00071 if(fread(vertices, sizeof(Vertex), header.vertexCount, file) != header.vertexCount)
00072 return fclose(file), false;
00073
00074 if(fread(indices, sizeof(ushort), header.indexCount, file) != header.indexCount)
00075 return fclose(file), false;
00076
00077
00078 fclose(file);
00079
00080
00081
00082
00083
00084
00085
00086
00087 meshData.vertexSize = header.vertexSize;
00088 meshData.vertexCount = header.vertexCount;
00089 meshData.indexCount = header.indexCount;
00090 meshData.vertices = vertices;
00091 meshData.indices = indices;
00092 return true;
00093 }