private static void CreateRenderElementShadow(List<MyRenderElement> renderElements, MyEntity entity, MyModel model, out MyRenderElement renderElement) { //AddRenderElement(renderElements, out renderElement); AllocateRenderElement(out renderElement); if (!IsRenderOverloaded) { renderElement.Entity = entity; renderElement.VertexBuffer = model.VertexBuffer; renderElement.IndexBuffer = model.IndexBuffer; renderElement.VertexCount = model.GetVerticesCount(); renderElement.VertexDeclaration = model.GetVertexDeclaration(); renderElement.VertexStride = model.GetVertexStride(); renderElement.IndexStart = 0; if (renderElement.IndexBuffer != null) { renderElement.TriCount = model.GetTrianglesCount(); } //renderElement.DebugName = entity.Name; renderElement.WorldMatrix = entity.WorldMatrix; renderElements.Add(renderElement); } }
public static void CollectRenderElements(List<MyRenderElement> renderElements, List<MyRenderElement> transparentRenderElements, MyEntity entity, MyModel model, bool collectTransparentElements) { // MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().StartProfilingBlock("LoadInDraw"); if (model.LoadState == LoadState.Unloaded) { //model.LoadInDraw(LoadingMode.Background); model.LoadInDraw(LoadingMode.Immediate); return; } if (model.LoadState == LoadState.Loading) return; // MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().EndProfilingBlock(); var drawMatrix = entity.GetWorldMatrixForDraw(); int meshCount = model.GetMeshList().Count; for (int i = 0; i < meshCount; i++) { MyMesh mesh = model.GetMeshList()[i]; // MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().StartProfilingBlock("Add render element"); //if (mesh.Materials[entity.MaterialIndex].DrawTechnique == MyMeshDrawTechnique.DECAL || // mesh.Materials[entity.MaterialIndex].DrawTechnique == MyMeshDrawTechnique.HOLO) // continue; MyMeshMaterial material = entity.GetMaterial(mesh); bool createElement = true; if (createElement) { MyRenderElement renderElement; AllocateRenderElement(out renderElement); //renderElement.DebugName = entity.Name; renderElement.Entity = entity; renderElement.VertexBuffer = model.VertexBuffer; renderElement.IndexBuffer = model.IndexBuffer; renderElement.VertexCount = model.GetVerticesCount(); renderElement.VertexDeclaration = model.GetVertexDeclaration(); renderElement.VertexStride = model.GetVertexStride(); renderElement.IndexStart = mesh.IndexStart; renderElement.TriCount = mesh.TriCount; //renderElement.UseChannels = model.UseChannels; //renderElement.MaskTexture = model.MaskTexture; renderElement.WorldMatrixForDraw = drawMatrix; renderElement.WorldMatrix = entity.WorldMatrix; renderElement.Material = material; renderElement.DrawTechnique = material.DrawTechnique; renderElement.VoxelBatch = null; Debug.Assert(renderElement.VertexBuffer != null, "Vertex buffer cannot be null!"); Debug.Assert(renderElement.IndexBuffer != null, "Index buffer cannot be null!"); if (material.DrawTechnique == MyMeshDrawTechnique.HOLO) { if (collectTransparentElements) transparentRenderElements.Add(renderElement); } else { renderElements.Add(renderElement); } } //MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().EndProfilingBlock(); } }