public override unsafe void GenerateSortKey(RenderView renderView, RenderViewStage renderViewStage, SortKey *sortKeys) { Matrix viewInverse = renderView.View; viewInverse.Invert(); var plane = new Plane(viewInverse.Forward, Vector3.Dot(viewInverse.TranslationVector, viewInverse.Forward)); // TODO: Point-normal-constructor seems wrong. Check. var renderNodes = renderViewStage.RenderNodes; int distanceShift = 32 - distancePrecision; int stateShift = 32 - statePrecision; for (int i = 0; i < renderNodes.Count; ++i) { var renderNode = renderNodes[i]; var renderObject = renderNode.RenderObject; var distance = CollisionHelper.DistancePlanePoint(ref plane, ref renderObject.BoundingBox.Center); var distanceI = ComputeDistance(distance); if (reverseDistance) { distanceI = ~distanceI; } // Compute sort key sortKeys[i] = new SortKey { Value = ((ulong)renderNode.RootRenderFeature.SortKey << 56) | ((ulong)(distanceI >> distanceShift) << distancePosition) | ((ulong)(renderObject.StateSortKey >> stateShift) << statePosition), Index = i, StableIndex = renderObject.Index }; } }
public abstract unsafe void GenerateSortKey(RenderView renderView, RenderViewStage renderViewStage, SortKey *sortKeys);