X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fobjectrenderer.h;fp=src%2Fobjectrenderer.h;h=4ebb66a2186e9d0669c410893da8c7febebec42c;hp=4dd7fe1ec9e8a3ae5cbb8f13545a85da09b510da;hb=09fc4981be389620d3c269beacf0630de45871bb;hpb=17fe4372c6e26fbfa109036b64fa0729153b402a diff --git a/src/objectrenderer.h b/src/objectrenderer.h index 4dd7fe1..4ebb66a 100644 --- a/src/objectrenderer.h +++ b/src/objectrenderer.h @@ -108,14 +108,24 @@ namespace IPDF class BezierRenderer : public ObjectRenderer { public: - BezierRenderer() : ObjectRenderer(BEZIER, "shaders/rect_vert.glsl", "shaders/rect_frag.glsl", "shaders/rect_outline_geom.glsl") {} + BezierRenderer() : ObjectRenderer(BEZIER, "shaders/rect_vert.glsl", "shaders/rect_frag.glsl", "shaders/bezier_texbuf_geom.glsl") {} virtual ~BezierRenderer() {} - virtual void RenderUsingGPU() - { - Error("Cannot render beziers on the GPU; they will appear as outlined rectangles."); - ObjectRenderer::RenderUsingGPU(); - } + virtual void RenderUsingGPU(); virtual void RenderUsingCPU(const Objects & objects, const View & view, const CPURenderTarget & target); + void PrepareBezierGPUBuffer(const Objects & objects); + private: + GraphicsBuffer m_bezier_coeffs; + GraphicsBuffer m_bezier_ids; + struct GPUBezierCoeffs + { + float x0, y0; + float x1, y1; + float x2, y2; + }; + + GLuint m_bezier_buffer_texture; + GLuint m_bezier_id_buffer_texture; + }; }