X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fobjectrenderer.cpp;h=ac25c4ac04ef96d33b926396b3bee57d104cfe8a;hp=755df98152a50f60d507086aadba38c3688444d0;hb=35e78b378435e37ffdb6e53a97f6fa0998999f67;hpb=09fc4981be389620d3c269beacf0630de45871bb diff --git a/src/objectrenderer.cpp b/src/objectrenderer.cpp index 755df98..ac25c4a 100644 --- a/src/objectrenderer.cpp +++ b/src/objectrenderer.cpp @@ -13,7 +13,9 @@ namespace IPDF /** * ObjectRenderer constructor - * Note we cannot compile the shaders in the constructor because the Screen class needs to initialise GL and it has a ShaderProgram member + * Note we cannot compile the shaders in the ShaderProgram constructor + * because the Screen class needs to initialise GL first and it has a + * ShaderProgram member */ ObjectRenderer::ObjectRenderer(const ObjectType & type, const char * vert_glsl_file, const char * frag_glsl_file, const char * geom_glsl_file) @@ -225,10 +227,13 @@ void BezierRenderer::RenderUsingCPU(const Objects & objects, const View & view, Real x[2]; Real y[2]; control.Evaluate(x[0], y[0], Real(0)); - for (unsigned j = 1; j <= 100; ++j) + int64_t blen = max(2L, min(100L, pix_bounds.w)); + Real invblen(1); invblen /= blen; + Debug("Using %li lines, inverse %f", blen, Double(invblen)); + for (int64_t j = 1; j <= blen; ++j) { - control.Evaluate(x[j % 2],y[j % 2], Real(0.01)*j); - ObjectRenderer::RenderLineOnCPU((int64_t)x[0],(int64_t)y[0], (int64_t)x[1],(int64_t)y[1], target); + control.Evaluate(x[j % 2],y[j % 2], invblen*j); + ObjectRenderer::RenderLineOnCPU((int64_t)Double(x[0]),(int64_t)Double(y[0]), (int64_t)Double(x[1]),(int64_t)Double(y[1]), target); } /* @@ -261,9 +266,9 @@ void BezierRenderer::PrepareBezierGPUBuffer(const Objects& objects) for (auto bez : objects.beziers) { GPUBezierCoeffs coeffs = { - (float)bez.x0, (float)bez.y0, - (float)bez.x1 - (float)bez.x0, (float)bez.y1 - (float)bez.y0, - (float)bez.x2 - (float)bez.x0, (float)bez.y2 - (float)bez.y0 + Float(bez.x0), Float(bez.y0), + Float(bez.x1 - bez.x0), Float(bez.y1 - bez.y0), + Float(bez.x2 - bez.x0), Float(bez.y2 - bez.y0) }; builder.Add(coeffs); }