X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fobjectrenderer.cpp;h=9b84ec260bf8deca0fef6a7be3aee4e9f8083c6f;hp=21c9648c49629ca1526c69e02988f12a0a712b44;hb=d68c91a7a2a3a4b3a312a50cbab5a7539d4cd7d5;hpb=ef0af5fd0129161a9e079bd3cd1298b53f1fe11a diff --git a/src/objectrenderer.cpp b/src/objectrenderer.cpp index 21c9648..9b84ec2 100644 --- a/src/objectrenderer.cpp +++ b/src/objectrenderer.cpp @@ -243,7 +243,7 @@ void BezierRenderer::RenderBezierOnCPU(const Bezier & relative, const Rect & bou ObjectRenderer::RenderLineOnCPU(pix_bounds.x+pix_bounds.w, pix_bounds.y, pix_bounds.x+pix_bounds.w, pix_bounds.y+pix_bounds.h, target, Colour(0,255,0,0)); } - int64_t blen = min(50L,pix_bounds.w);//min(max(2U, (unsigned)Int64(Real(target.w)/view.GetBounds().w)), + int64_t blen = min((int64_t)50,pix_bounds.w);//min(max(2U, (unsigned)Int64(Real(target.w)/view.GetBounds().w)), //min((unsigned)(pix_bounds.w+pix_bounds.h)/4 + 1, 100U)); // DeCasteljau Divide the Bezier @@ -382,7 +382,14 @@ void BezierRenderer::RenderUsingGPU(unsigned first_obj_id, unsigned last_obj_id) if (m_indexes.empty()) return; unsigned first_index = 0; - while (m_indexes.size() > first_index && m_indexes[first_index] < first_obj_id) first_index ++; + while (m_indexes.size() > first_index && m_indexes[first_index] < first_obj_id) + { + unsigned new_index = (first_index + first_obj_id) / 2; + if (new_index < m_indexes.size() && m_indexes[new_index] < first_obj_id) + first_index = new_index; + else + first_index ++; + } unsigned last_index = first_index; while (m_indexes.size() > last_index && m_indexes[last_index] < last_obj_id) last_index ++; @@ -390,6 +397,12 @@ void BezierRenderer::RenderUsingGPU(unsigned first_obj_id, unsigned last_obj_id) glUniform1i(m_shader_program.GetUniformLocation("bezier_buffer_texture"), 0); glUniform1i(m_shader_program.GetUniformLocation("bezier_id_buffer_texture"), 1); m_ibo.Bind(); + + // To antialias the line... causes SIGFPE because why would anything make sense + //glEnable(GL_BLEND); + //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + //glEnable(GL_LINE_SMOOTH); + //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glDrawElements(GL_LINES, (last_index-first_index)*2, GL_UNSIGNED_INT, (GLvoid*)(2*first_index*sizeof(uint32_t))); } @@ -429,7 +442,7 @@ void PathRenderer::RenderUsingCPU(Objects & objects, const View & view, const CP continue; for (unsigned b = path.m_start; b <= path.m_end; ++b) { - Rect & bbounds = objects.bounds[b]; + Rect bbounds = view.TransformToViewCoords(objects.bounds[b]); Bezier & bez = objects.beziers[objects.data_indices[b]]; BezierRenderer::RenderBezierOnCPU(bez,bbounds,view,target,path.m_stroke); }