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 ); }
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 ); }
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); } } }
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 ); }
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 ); }
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(); } }