static RenderPrimitiveSequence GetRenderSequence(RenderPrimitiveGroup group, bool blended) { if (blended) { return(RenderPrimitive.SequenceForBlended[(int)group]); } return(RenderPrimitive.SequenceForOpaque[(int)group]); }
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); } } } }