public void DrawCatalogTile(RenderContext renderContext, double opacity) { RenderedGeneration = CurrentRenderGeneration; TilesTouched++; InViewFrustum = true; bool onlyDrawChildren = false; if (!ReadyToRender) { if (!errored) { TileCache.AddTileToQueue(this); return; } if (errored && Level < 3) //Level 0-2 sometimes deleted in favor of allsky.jpg/tsv { onlyDrawChildren = true; } else { return; } } bool anyChildInFrustum = false; int childIndex = 0; for (int y1 = 0; y1 < 2; y1++) { for (int x1 = 0; x1 < 2; x1++) { if (Level < dataset.Levels) { if (children[childIndex] == null) { children[childIndex] = TileCache.GetTile(Level + 1, x1, y1, dataset, this); } if (children[childIndex].IsTileInFrustum(renderContext.Frustum)) { InViewFrustum = true; anyChildInFrustum = true; if (children[childIndex].IsTileBigEnough(renderContext) || onlyDrawChildren) { ((HealpixTile)children[childIndex]).DrawCatalogTile(renderContext, opacity); } else { ((HealpixTile)children[childIndex]).RemoveCatalogTile(); } } else { ((HealpixTile)children[childIndex]).RemoveCatalogTile(); } } childIndex++; } } if (Level == 0 && !anyChildInFrustum && !onlyDrawChildren) { RemoveCatalogTile(); } else if (anyChildInFrustum) { TilesInView++; AddCatalogTile(); } }
public virtual bool Draw3D(RenderContext renderContext, double opacity) { // CanvasContext2D device = renderContext.Device; RenderedGeneration = CurrentRenderGeneration; TilesTouched++; AccessCount = TileCache.AccessID++; if (errored) { return(false); } int xMax = 2; InViewFrustum = true; if (!ReadyToRender) { TileCache.AddTileToQueue(this); //RequestImage(); return(false); } bool transitioning = false; int childIndex = 0; int yOffset = 0; if (dataset.Mercator || dataset.BottomsUp) { yOffset = 1; } int xOffset = 0; // try { bool anythingToRender = false; bool childRendered = false; for (int y1 = 0; y1 < 2; y1++) { for (int x1 = 0; x1 < xMax; x1++) { // if (level < (demEnabled ? 12 : dataset.Levels)) if (Level < dataset.Levels) { // make children if (children[childIndex] == null) { children[childIndex] = TileCache.GetTile(Level + 1, tileX * 2 + ((x1 + xOffset) % 2), tileY * 2 + ((y1 + yOffset) % 2), dataset, this); } if (children[childIndex].IsTileInFrustum(renderContext.Frustum)) { InViewFrustum = true; if (children[childIndex].IsTileBigEnough(renderContext)) { renderChildPart[childIndex].TargetState = !children[childIndex].Draw3D(renderContext, opacity); if (renderChildPart[childIndex].TargetState) { childRendered = true; } } else { renderChildPart[childIndex].TargetState = true; } } else { renderChildPart[childIndex].TargetState = renderChildPart[childIndex].State = false; } //if (renderChildPart[childIndex].TargetState == true || !blendMode) //{ // renderChildPart[childIndex].State = renderChildPart[childIndex].TargetState; //} if (renderChildPart[childIndex].TargetState != renderChildPart[childIndex].State) { transitioning = true; } } else { renderChildPart[childIndex].State = true; } if (renderChildPart[childIndex].State == true) { anythingToRender = true; } childIndex++; } } if (childRendered || anythingToRender) { RenderedAtOrBelowGeneration = CurrentRenderGeneration; if (Parent != null) { Parent.RenderedAtOrBelowGeneration = RenderedAtOrBelowGeneration; } } if (!anythingToRender) { return(true); } if (!CreateGeometry(renderContext)) { return(false); } TilesInView++; accomidation = ComputeAccomidation(); for (int i = 0; i < 4; i++) { if (renderChildPart[i].TargetState) { RenderPart(renderContext, i, (opacity / 100), false); } } } // catch { } return(true); }
public override bool Draw3D(RenderContext renderContext, double opacity) { if (IsCatalogTile) { DrawCatalogTile(renderContext, opacity); return(true); } RenderedGeneration = CurrentRenderGeneration; TilesTouched++; InViewFrustum = true; bool onlyDrawChildren = false; if (!ReadyToRender) { if (!errored) { TileCache.AddTileToQueue(this); return(false); } if (errored && Level < 3) //Level 0-2 sometimes deleted in favor of allsky.jpg/tsv { onlyDrawChildren = true; } else { return(false); } } //if (!CreateGeometry(renderContext)) //{ // if (Level > 2) // { // return false; // } //} int partCount = this.TriangleCount; TrianglesRendered += partCount; bool anythingToRender = false; bool childRendered = false; int childIndex = 0; for (int y1 = 0; y1 < 2; y1++) { for (int x1 = 0; x1 < 2; x1++) { if (Level < dataset.Levels) { // make children if (children[childIndex] == null) { children[childIndex] = TileCache.GetTile(Level + 1, x1, y1, dataset, this); } if (children[childIndex].IsTileInFrustum(renderContext.Frustum)) { InViewFrustum = true; if (children[childIndex].IsTileBigEnough(renderContext) || onlyDrawChildren) { //renderChildPart[childIndex].TargetState = true; renderChildPart[childIndex].TargetState = !children[childIndex].Draw3D(renderContext, opacity); if (renderChildPart[childIndex].TargetState) { childRendered = true; } } else { renderChildPart[childIndex].TargetState = true; } } else { renderChildPart[childIndex].TargetState = renderChildPart[childIndex].State = false; } } else { renderChildPart[childIndex].State = true; } ////if(childIndex != 0) ////{ //// renderChildPart[childIndex].TargetState = true; //// anythingToRender = true; ////} if (renderChildPart[childIndex].State == true) { anythingToRender = true; } childIndex++; } } if (childRendered || anythingToRender) { RenderedAtOrBelowGeneration = CurrentRenderGeneration; if (Parent != null) { Parent.RenderedAtOrBelowGeneration = RenderedAtOrBelowGeneration; } } if (!anythingToRender) { return(true); } if (!CreateGeometry(renderContext)) { return(false); } if (onlyDrawChildren) { return(true); } TilesInView++; for (int i = 0; i < 4; i++) { if (renderChildPart[i].TargetState) { RenderPart(renderContext, i, opacity / 100, false); } } return(true); }