Esempio n. 1
0
        public void DrawBuffer(CommandBuffer buffer, VMeshData data, int vertexOffset, ushort startVertex, int startIndex, Matrix4 world, ref Lighting light, MaterialAnimCollection mc, Material overrideMat = null)
        {
            if (MaterialCrc == 0)
            {
                return;
            }

            var mat = Material;

            if (mat == null)
            {
                mat = defaultMaterial;
            }
            if (overrideMat != null)
            {
                mat = overrideMat;
            }
            if (lastmc != mc)
            {
                if (mc != null)
                {
                    mc.Anims.TryGetValue(mat.Name, out ma);
                    lastmc = mc;
                }
                else
                {
                    ma = null;
                }
            }
            float z = 0;

            if (mat.Render.IsTransparent)
            {
                z = RenderHelpers.GetZ(world, mat.Render.Camera.Position, CalculateAvg(data, startVertex));
            }

            buffer.AddCommand(
                mat.Render,
                ma,
                world,
                light,
                data.VertexBuffer,
                PrimitiveTypes.TriangleList,
                startVertex + vertexOffset + StartVertex,
                startIndex + TriangleStart,
                primitiveCount,
                SortLayers.OBJECT,
                z
                );
        }
Esempio n. 2
0
 public void DrawBuffer(CommandBuffer buffer, VertexBuffer vbo, int vertexCount, Matrix4 world, Lighting lights, Material overrideMat)
 {
     buffer.AddCommand(
         (overrideMat ?? Material).Render,
         null,
         world,
         lights,
         vbo,
         PrimitiveTypes.TriangleStrip,
         0,
         StartIndex,
         TriangleStripIndices.Length - 2,
         SortLayers.OPAQUE,
         0
         );
 }
Esempio n. 3
0
 public void DrawBuffer(CommandBuffer buffer, Matrix4 world, ref Lighting light, MaterialAnimCollection mc, Material overrideMat = null)
 {
     if (ready)
     {
         if (needsOptimize)
         {
             Optimize();
         }
         if (optimized != null)
         {
             for (int i = 0; i < optimized.Optimized.Length; i++)
             {
                 var m = optimized.Optimized[i].Material;
                 if (m == null)
                 {
                     m = vMeshLibrary.FindMaterial(0);
                 }
                 MaterialAnim ma = null;
                 if (mc != null)
                 {
                     mc.Anims.TryGetValue(m.Name, out ma);
                 }
                 buffer.AddCommand(
                     m.Render,
                     ma,
                     world,
                     light,
                     Mesh.VertexBuffer,
                     PrimitiveTypes.TriangleList,
                     optimized.Optimized[i].VertexOffset,
                     optimized.Optimized[i].StartIndex,
                     optimized.Optimized[i].PrimitiveCount,
                     SortLayers.OBJECT,
                     0
                     );
             }
             for (int i = 0; i < optimized.NormalDraw.Length; i++)
             {
                 Mesh.Meshes[optimized.NormalDraw[i]].DrawBuffer(buffer, Mesh, Mesh.VertexOffset, StartVertex, Mesh.IndexOffset, world, ref light, mc, overrideMat);
             }
         }
         else
         {
             Mesh.DrawBuffer(buffer, StartMesh, endMesh, StartVertex, world, ref light, Center, mc, overrideMat);
         }
     }
 }
Esempio n. 4
0
 public void DrawBuffer(DfmSkinning skinning, CommandBuffer buffer, VertexBuffer vbo, WorldMatrixHandle world, Lighting lights, Material overrideMat)
 {
     buffer.AddCommand(
         (overrideMat ?? Material).Render,
         null,
         world,
         lights,
         vbo,
         PrimitiveTypes.TriangleStrip,
         0,
         StartIndex,
         TriangleStripIndices.Length - 2,
         SortLayers.OPAQUE,
         0,
         skinning
         );
 }
Esempio n. 5
0
        public void DrawBuffer(CommandBuffer buffer, VMeshData data, ushort startVertex, Matrix4 world, Lighting light, MaterialAnimCollection mc)
        {
            if (Material == null)
            {
                return;
            }
            if (lastmc != mc)
            {
                if (mc != null)
                {
                    mc.Anims.TryGetValue(Material.Name, out ma);
                    lastmc = mc;
                }
                else
                {
                    ma = null;
                }
            }
            float z = 0;

            if (Material.Render.IsTransparent)
            {
                z = RenderHelpers.GetZ(world, Material.Render.Camera.Position, CalculateAvg(data, startVertex));
            }

            buffer.AddCommand(
                Material.Render,
                ma,
                world,
                light,
                data.VertexBuffer,
                PrimitiveTypes.TriangleList,
                startVertex + StartVertex,
                TriangleStart,
                primitiveCount,
                SortLayers.OBJECT,
                z
                );
        }
Esempio n. 6
0
 public void DrawBuffer(CommandBuffer buffer, Matrix4 world, ref Lighting lighting, Material overrideMat = null)
 {
     if (SideMaterials.Length < 6)
     {
         return;
     }
     if (ready)
     {
         for (int i = 0; i < SideMaterials.Length; i++)
         {
             if (SideMaterials[i] != null && !SideMaterials[i].Loaded)
             {
                 SideMaterials[i].Loaded = false;
             }
         }
         for (int i = 0; i < 6; i++)
         {
             int     start, count;
             Vector3 pos;
             sphere.GetDrawParameters(faces[i], out start, out count, out pos);
             if (SideMaterials[i] == null)
             {
                 SideMaterials[i] = library.FindMaterial(CrcTool.FLModelCrc(sideMaterialNames[i]));
             }
             var mat = SideMaterials[i] ?? defaultMaterial;
             mat = overrideMat ?? mat;
             mat.Render.Camera = _camera;
             var transform = Matrix4.CreateScale(Radius) * world;
             buffer.AddCommand(
                 mat.Render,
                 null,
                 transform,
                 lighting,
                 sphere.VertexBuffer,
                 PrimitiveTypes.TriangleList,
                 0,
                 start,
                 count,
                 SortLayers.OBJECT
                 );
         }
         //Draw atmosphere
         if (SideMaterials.Length > 6 && overrideMat == null)
         {
             if (SideMaterials[6] == null)
             {
                 SideMaterials[6] = library.FindMaterial(CrcTool.FLModelCrc(sideMaterialNames[6]));
                 if (SideMaterials[6] == null)
                 {
                     return;
                 }
             }
             var mat       = (AtmosphereMaterial)SideMaterials[6].Render;
             var transform = Matrix4.CreateScale(Radius * mat.Scale) * world;
             for (int i = 0; i < 6; i++)
             {
                 int     start, count;
                 Vector3 pos;
                 sphere.GetDrawParameters(faces[i], out start, out count, out pos);
                 SideMaterials[6].Render.Camera = _camera;
                 buffer.AddCommand(
                     SideMaterials[6].Render,
                     null,
                     transform,
                     lighting,
                     sphere.VertexBuffer,
                     PrimitiveTypes.TriangleList,
                     0,
                     start,
                     count,
                     SortLayers.OBJECT,
                     RenderHelpers.GetZ(transform, _camera.Position, pos)
                     );
             }
         }
     }
     else
     {
         throw new Exception();
     }
 }