public RenderItem(Material material, RenderPrimitive renderPrimitive, ref Matrix xnaMatrix, ShapeFlags flags, object itemData = null) { Material = material; RenderPrimitive = renderPrimitive; XNAMatrix = xnaMatrix; Flags = flags; ItemData = itemData; }
void AddShadowPrimitive(int shadowMapIndex, Material material, RenderPrimitive primitive, ref Matrix xnaMatrix, ShapeFlags flags) { if (material is SceneryMaterial) { RenderShadowSceneryItems[shadowMapIndex].Add(new RenderItem(material, primitive, ref xnaMatrix, flags)); } else if (material is ForestMaterial) { RenderShadowForestItems[shadowMapIndex].Add(new RenderItem(material, primitive, ref xnaMatrix, flags)); } else if (material is TerrainMaterial) { RenderShadowTerrainItems[shadowMapIndex].Add(new RenderItem(material, primitive, ref xnaMatrix, flags)); } else { Debug.Fail("Only scenery, forest and terrain materials allowed in shadow map."); } }
public void AddPrimitive(Material material, RenderPrimitive primitive, RenderPrimitiveGroup group, ref Matrix xnaMatrix, ShapeFlags flags, object itemData) { var getBlending = material.GetBlending(); var blending = getBlending && material is SceneryMaterial ? PrimitiveBlendedScenery : getBlending ? PrimitiveBlended : PrimitiveNotBlended; RenderItemCollection items; foreach (var blended in blending) { var sortingMaterial = blended ? DummyBlendedMaterial : material; var sequence = RenderItems[(int)GetRenderSequence(group, blended)]; if (!sequence.TryGetValue(sortingMaterial, out items)) { items = new RenderItemCollection(); sequence.Add(sortingMaterial, items); } items.Add(new RenderItem(material, primitive, ref xnaMatrix, flags, itemData)); } if (((flags & ShapeFlags.AutoZBias) != 0) && (primitive.ZBias == 0)) { primitive.ZBias = 1; } }
public void AddPrimitive(Material material, RenderPrimitive primitive, RenderPrimitiveGroup group, ref Matrix xnaMatrix, ShapeFlags flags) { AddPrimitive(material, primitive, group, ref xnaMatrix, flags, null); }
public void AddAutoPrimitive(Vector3 mstsLocation, float objectRadius, float objectViewingDistance, Material material, RenderPrimitive primitive, RenderPrimitiveGroup group, ref Matrix xnaMatrix, ShapeFlags flags) { if (float.IsPositiveInfinity(objectViewingDistance) || (Camera != null && Camera.InRange(mstsLocation, objectRadius, objectViewingDistance))) { if (Camera != null && Camera.InFov(mstsLocation, objectRadius)) { AddPrimitive(material, primitive, group, ref xnaMatrix, flags); } } if (Game.Settings.DynamicShadows && (RenderProcess.ShadowMapCount > 0) && ((flags & ShapeFlags.ShadowCaster) != 0)) { for (var shadowMapIndex = 0; shadowMapIndex < RenderProcess.ShadowMapCount; shadowMapIndex++) { if (IsInShadowMap(shadowMapIndex, mstsLocation, objectRadius, objectViewingDistance)) { AddShadowPrimitive(shadowMapIndex, material, primitive, ref xnaMatrix, flags); } } } }