public static void CreateVertexBuffers(ref Device device, ref BSPModel bsp)
{
bsp.Display.vertexBuffer = new VertexBuffer[bsp.BSPRawDataMetaChunks.Length];
for (int x = 0; x < bsp.BSPRawDataMetaChunks.Length; x++)
{
int rawindex = x;
if (bsp.BSPRawDataMetaChunks[rawindex].RawDataChunkInfo.Length == 0)
{
continue;
}
bsp.Display.vertexBuffer[rawindex] = new VertexBuffer(
typeof(HaloBSPVertex),
bsp.BSPRawDataMetaChunks[rawindex].VerticeCount,
device,
Usage.WriteOnly,
HaloBSPVertex.FVF,
Pool.Managed);
HaloBSPVertex[] verts = (HaloBSPVertex[])bsp.Display.vertexBuffer[rawindex].Lock(0, 0);
// Lock the buffer (which will return our structs)
for (int i = 0; i < bsp.BSPRawDataMetaChunks[rawindex].VerticeCount; i++)
{
verts[i].Position = new Vector3(
bsp.BSPRawDataMetaChunks[rawindex].Vertices[i].X,
bsp.BSPRawDataMetaChunks[rawindex].Vertices[i].Y,
bsp.BSPRawDataMetaChunks[rawindex].Vertices[i].Z);
verts[i].Tu0 = bsp.BSPRawDataMetaChunks[rawindex].UVs[i].X;
verts[i].Tv0 = bsp.BSPRawDataMetaChunks[rawindex].UVs[i].Y;
verts[i].Normal = bsp.BSPRawDataMetaChunks[rawindex].Normals[i];
// verts[i].specular = 1;
verts[i].diffuse = 1;
verts[i].Tu1 = verts[i].Tu0;
verts[i].Tv1 = verts[i].Tv0;
if (bsp.BSPRawDataMetaChunks[rawindex].LightMapUVs.Count != 0)
{
verts[i].Tu2 = bsp.BSPRawDataMetaChunks[rawindex].LightMapUVs[i].X;
verts[i].Tv2 = bsp.BSPRawDataMetaChunks[rawindex].LightMapUVs[i].Y;
}
else
{
verts[i].Tu2 = verts[i].Tu0;
verts[i].Tv2 = verts[i].Tv0;
}
verts[i].Tu3 = verts[i].Tu0;
verts[i].Tv3 = verts[i].Tv0;
}
bsp.Display.vertexBuffer[rawindex].Unlock();
}
bsp.Display.permvertexBuffer = new VertexBuffer[bsp.BSPPermutationRawDataMetaChunks.Length];
for (int x = 0; x < bsp.BSPPermutationRawDataMetaChunks.Length; x++)
{
int rawindex = x;
if (bsp.BSPPermutationRawDataMetaChunks[rawindex].RawDataChunkInfo.Length == 0)
{
continue;
}
bsp.Display.permvertexBuffer[rawindex] = new VertexBuffer(
typeof(HaloBSPVertex),
bsp.BSPPermutationRawDataMetaChunks[rawindex].VerticeCount,
device,
Usage.WriteOnly,
HaloBSPVertex.FVF,
Pool.Managed);
HaloBSPVertex[] verts = (HaloBSPVertex[])bsp.Display.permvertexBuffer[rawindex].Lock(0, 0);
// Lock the buffer (which will return our structs)
for (int i = 0; i < bsp.BSPPermutationRawDataMetaChunks[rawindex].VerticeCount; i++)
{
verts[i].Position = new Vector3(
bsp.BSPPermutationRawDataMetaChunks[rawindex].Vertices[i].X,
bsp.BSPPermutationRawDataMetaChunks[rawindex].Vertices[i].Y,
bsp.BSPPermutationRawDataMetaChunks[rawindex].Vertices[i].Z);
verts[i].Tu0 = bsp.BSPPermutationRawDataMetaChunks[rawindex].UVs[i].X;
verts[i].Tv0 = bsp.BSPPermutationRawDataMetaChunks[rawindex].UVs[i].Y;
verts[i].Normal = bsp.BSPPermutationRawDataMetaChunks[rawindex].Normals[i];
// verts[i].specular = 1;
verts[i].diffuse = 1;
verts[i].Tu1 = verts[i].Tu0;
verts[i].Tv1 = verts[i].Tv0;
if (bsp.BSPPermutationRawDataMetaChunks[rawindex].LightMapUVs.Count != 0)
{
verts[i].Tu2 = bsp.BSPPermutationRawDataMetaChunks[rawindex].LightMapUVs[i].X;
verts[i].Tv2 = bsp.BSPPermutationRawDataMetaChunks[rawindex].LightMapUVs[i].Y;
}
else
{
verts[i].Tu2 = verts[i].Tu0;
verts[i].Tv2 = verts[i].Tv0;
}
verts[i].Tu3 = verts[i].Tu0;
verts[i].Tv3 = verts[i].Tv0;
}
bsp.Display.permvertexBuffer[rawindex].Unlock();
}
}