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));
}
- unsigned blen = 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
#ifdef BEZIER_CPU_DECASTELJAU
queue<Bezier> divisions;
divisions.push(control);
- while(divisions.size() < blen)
+ while(divisions.size() < (uint64_t)(blen))
{
Bezier & current = divisions.front();
//if (current.GetType() == Bezier::LINE)
break;
}
}
- Rect & bounds = objects.bounds[m_indexes[i]];
+ Rect bounds = view.TransformToViewCoords(objects.bounds[m_indexes[i]]);
Bezier & bez = objects.beziers[objects.data_indices[m_indexes[i]]];
RenderBezierOnCPU(bez, bounds, view, target, c);
}
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 != first_index && 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 ++;
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)));
}
if (m_indexes[i] >= last_obj_id) continue;
- Rect bounds(CPURenderBounds(objects.bounds[m_indexes[i]], view, target));
- PixelBounds pix_bounds(bounds);
+
Path & path = objects.paths[objects.data_indices[m_indexes[i]]];
+ Rect bounds(CPURenderBounds(path.GetBounds(objects), view, target));
+ PixelBounds pix_bounds(bounds);
if (view.ShowingFillPoints())
{
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);
}
}
}
+ObjectRenderer::PixelBounds::PixelBounds(const Rect & bounds)
+{
+ x = Int64(Double(bounds.x));
+ y = Int64(Double(bounds.y));
+ w = Int64(Double(bounds.w));
+ h = Int64(Double(bounds.h));
+}
+
}