HaloMap.RawData.BSPModel.BSPDisplayedInfo.CreateVertexBuffers C# (CSharp) Method

CreateVertexBuffers() public static method

The create vertex buffers.
public static CreateVertexBuffers ( Device &device, BSPModel &bsp ) : void
device Device The device.
bsp BSPModel The bsp.
return void
            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();
                }
            }