public static void RenderAllTrees(RenderSystem targetRenderSystem) { int positionParamIndex; if (!initialized) { return; } allTreeRenderMeter.Enter(); if (TerrainManager.Instance.RenderLeaves) { if (meterRenderingOfTrees) { leavesMeter.Enter(); } foreach (TreeGroup group in allGroups) { if (group.visibleLeaves.Count != 0) { targetRenderSystem.BeginProfileEvent(ColorEx.White, "Render Leaves : " + group.name); positionParamIndex = group.SetupLeafRenderMaterial(); foreach (Tree t in group.visibleLeaves) { group.RenderLeaves(targetRenderSystem, positionParamIndex, t); } // clear the constant from the previous material group.positionParameters.ClearFloatConstant(positionParamIndex); } targetRenderSystem.EndProfileEvent(); } if (meterRenderingOfTrees) { leavesMeter.Exit(); } } // // Render all fronds // if (meterRenderingOfTrees) { frondsMeter.Enter(); } foreach (TreeGroup group in allGroups) { if (group.visibleFronds.Count != 0) { targetRenderSystem.BeginProfileEvent(ColorEx.White, "Render Fronds : " + group.name); positionParamIndex = group.SetupFrondRenderMaterial(); foreach (Tree t in group.visibleFronds) { group.RenderFrond(targetRenderSystem, positionParamIndex, t); } // clear the constant from the previous material group.positionParameters.ClearFloatConstant(positionParamIndex); targetRenderSystem.EndProfileEvent(); } } if (meterRenderingOfTrees) { frondsMeter.Exit(); } // // Render all branches // if (meterRenderingOfTrees) { branchesMeter.Enter(); } foreach (TreeGroup group in allGroups) { if (group.visibleBranches.Count != 0) { targetRenderSystem.BeginProfileEvent(ColorEx.White, "Render Branches : " + group.name); positionParamIndex = group.SetupBranchRenderMaterial(); foreach (Tree t in group.visibleBranches) { group.RenderBranch(targetRenderSystem, positionParamIndex, t); } // clear the constant from the previous material group.positionParameters.ClearFloatConstant(positionParamIndex); targetRenderSystem.EndProfileEvent(); } } if (meterRenderingOfTrees) { branchesMeter.Exit(); } // // now deal with billboards // if (billboardsDirty) { if (meterRenderingOfTrees) { rebuildBillboardsMeter.Enter(); } // we need to rebuild the billboards TreeBillboardRenderer.Instance.StartRebuild(); foreach (TreeGroup group in allGroups) { foreach (Tree t in group.visibleBillboards) { if (t.Billboard0RenderArgs.Active) { TreeBillboardRenderer.Instance.AddBillboard(group.BillboardTextureName, t.Billboard0RenderArgs.AlphaTestValue, t.Billboard0); } if (t.Billboard1RenderArgs.Active) { TreeBillboardRenderer.Instance.AddBillboard(group.BillboardTextureName, t.Billboard1RenderArgs.AlphaTestValue, t.Billboard1); } } } TreeBillboardRenderer.Instance.FinishRebuild(); if (meterRenderingOfTrees) { rebuildBillboardsMeter.Exit(); } billboardsDirty = false; } if (meterRenderingOfTrees) { billboardsMeter.Enter(); } TreeBillboardRenderer.Instance.Render(targetRenderSystem); if (meterRenderingOfTrees) { billboardsMeter.Exit(); } allTreeRenderMeter.Exit(); }
public void Render(RenderSystem targetRenderSystem) { // exit early if the entire group is not visible if (!visible) { return; } int positionParamIndex; if (meterRenderingOfTrees) { renderGroupMeter.Enter(); } targetRenderSystem.BeginProfileEvent(ColorEx.White, "Render Branches : " + name); positionParamIndex = SetupBranchRenderMaterial(); foreach (Tree t in trees) { if (t.RenderFlag && t.BranchRenderArgs.Active) { RenderBranch(targetRenderSystem, positionParamIndex, t); } } // clear the constant from the previous material positionParameters.ClearFloatConstant(positionParamIndex); targetRenderSystem.EndProfileEvent(); targetRenderSystem.BeginProfileEvent(ColorEx.White, "Render Fronds : " + name); positionParamIndex = SetupFrondRenderMaterial(); foreach (Tree t in trees) { if (t.RenderFlag && t.FrondRenderArgs.Active) { RenderFrond(targetRenderSystem, positionParamIndex, t); } } // clear the constant from the previous material positionParameters.ClearFloatConstant(positionParamIndex); targetRenderSystem.EndProfileEvent(); targetRenderSystem.BeginProfileEvent(ColorEx.White, "Render Leaves : " + name); if (TerrainManager.Instance.RenderLeaves) { positionParamIndex = SetupLeafRenderMaterial(); foreach (Tree t in trees) { if (t.RenderFlag && (t.Leaf0RenderArgs.Active || t.Leaf1RenderArgs.Active)) { RenderLeaves(targetRenderSystem, positionParamIndex, t); } } // clear the constant from the previous material positionParameters.ClearFloatConstant(positionParamIndex); } targetRenderSystem.EndProfileEvent(); if (meterRenderingOfTrees) { renderGroupMeter.Exit(); } }