Quadtree Rendering for CPU transorm+render
authorDavid Gow <[email protected]>
Wed, 16 Jul 2014 06:48:11 +0000 (14:48 +0800)
committerDavid Gow <[email protected]>
Wed, 16 Jul 2014 06:48:11 +0000 (14:48 +0800)
src/objectrenderer.cpp
src/view.cpp

index 1e04588..f5202cb 100644 (file)
@@ -115,7 +115,7 @@ void RectFilledRenderer::RenderUsingCPU(const Objects & objects, const View & vi
        for (unsigned i = 0; i < m_indexes.size(); ++i)
        {
                if (m_indexes[i] < first_obj_id) continue;
        for (unsigned i = 0; i < m_indexes.size(); ++i)
        {
                if (m_indexes[i] < first_obj_id) continue;
-               if (m_indexes[i] > last_obj_id) continue;
+               if (m_indexes[i] >= last_obj_id) continue;
                PixelBounds bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
                for (int64_t x = max(0L, bounds.x); x <= min(bounds.x+bounds.w, target.w-1); ++x)
                {
                PixelBounds bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
                for (int64_t x = max(0L, bounds.x); x <= min(bounds.x+bounds.w, target.w-1); ++x)
                {
@@ -140,7 +140,7 @@ void RectOutlineRenderer::RenderUsingCPU(const Objects & objects, const View & v
        for (unsigned i = 0; i < m_indexes.size(); ++i)
        {
                if (m_indexes[i] < first_obj_id) continue;
        for (unsigned i = 0; i < m_indexes.size(); ++i)
        {
                if (m_indexes[i] < first_obj_id) continue;
-               if (m_indexes[i] > last_obj_id) continue;
+               if (m_indexes[i] >= last_obj_id) continue;
                PixelBounds bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
                
                // Using bresenham's lines now mainly because I want to see if they work
                PixelBounds bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
                
                // Using bresenham's lines now mainly because I want to see if they work
@@ -167,7 +167,7 @@ void CircleFilledRenderer::RenderUsingCPU(const Objects & objects, const View &
        for (unsigned i = 0; i < m_indexes.size(); ++i)
        {
                if (m_indexes[i] < first_obj_id) continue;
        for (unsigned i = 0; i < m_indexes.size(); ++i)
        {
                if (m_indexes[i] < first_obj_id) continue;
-               if (m_indexes[i] > last_obj_id) continue;
+               if (m_indexes[i] >= last_obj_id) continue;
                PixelBounds bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
                int64_t centre_x = bounds.x + bounds.w / 2;
                int64_t centre_y = bounds.y + bounds.h / 2;
                PixelBounds bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
                int64_t centre_x = bounds.x + bounds.w / 2;
                int64_t centre_y = bounds.y + bounds.h / 2;
@@ -217,7 +217,7 @@ void BezierRenderer::RenderUsingCPU(const Objects & objects, const View & view,
        for (unsigned i = 0; i < m_indexes.size(); ++i)
        {
                if (m_indexes[i] < first_obj_id) continue;
        for (unsigned i = 0; i < m_indexes.size(); ++i)
        {
                if (m_indexes[i] < first_obj_id) continue;
-               if (m_indexes[i] > last_obj_id) continue;
+               if (m_indexes[i] >= last_obj_id) continue;
                Rect bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
                PixelBounds pix_bounds(bounds);
 
                Rect bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
                PixelBounds pix_bounds(bounds);
 
index ec8bbbe..ffcee56 100644 (file)
@@ -206,7 +206,7 @@ void View::RenderRange(int width, int height, unsigned first_obj, unsigned last_
        if (m_render_dirty) // document has changed
                PrepareRender();
 
        if (m_render_dirty) // document has changed
                PrepareRender();
 
-       if (m_buffer_dirty) // object bounds have changed
+       if (m_buffer_dirty || (m_bounds_dirty && !m_use_gpu_transform)) // object bounds have changed
                UpdateObjBoundsVBO();
 
        if (m_use_gpu_transform)
                UpdateObjBoundsVBO();
 
        if (m_use_gpu_transform)

UCC git Repository :: git.ucc.asn.au