X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fview.cpp;h=02859c5abbd09642b1bdd634ca2003f4c095ada0;hp=73331ef3c7bc76ba9df43aa762cfef3d3e26f94d;hb=2db1211c9a24a0cd22da1d3ddcddf564f814fc0a;hpb=bf91437612eb9f28fce17553d41a61b39b19b3fc;ds=sidebyside diff --git a/src/view.cpp b/src/view.cpp index 73331ef..02859c5 100644 --- a/src/view.cpp +++ b/src/view.cpp @@ -124,6 +124,28 @@ Rect View::TransformToViewCoords(const Rect& inp) const * @param height - Height of View to render */ void View::Render(int width, int height) +{ +#ifdef QUADTREE_DISABLED + RenderRange(width, height, 0, m_document.ObjectCount()); +#else + RenderQuadtreeNode(width, height, m_current_quadtree_node, m_quadtree_max_depth); +#endif +} + +#ifndef QUADTREE_DISABLED +void View::RenderQuadtreeNode(int width, int height, QuadTreeIndex node, int remaining_depth) +{ + if (node == QUADTREE_EMPTY) return; + if (!remaining_depth) return; + RenderRange(width, height, m_document.GetQuadTree().nodes[node].object_begin, m_document.GetQuadTree().nodes[node].object_end); + RenderQuadtreeNode(width, height, m_document.GetQuadTree().nodes[node].top_left, remaining_depth-1); + RenderQuadtreeNode(width, height, m_document.GetQuadTree().nodes[node].top_right, remaining_depth-1); + RenderQuadtreeNode(width, height, m_document.GetQuadTree().nodes[node].bottom_left, remaining_depth-1); + RenderQuadtreeNode(width, height, m_document.GetQuadTree().nodes[node].bottom_right, remaining_depth-1); +} +#endif + +void View::RenderRange(int width, int height, unsigned first_obj, unsigned last_obj) { // View dimensions have changed (ie: Window was resized) int prev_width = m_cached_display.GetWidth(); @@ -168,10 +190,6 @@ void View::Render(int width, int height) m_cached_display.Bind(); //NOTE: This is redundant; Clear already calls Bind m_cached_display.Clear(); - // When we QuadTree, this will be magic. - int first_obj = 0; - int last_obj = m_document.ObjectCount(); - // Render using GPU if (m_use_gpu_rendering) {