#ifndef LLMR_RENDERER_PAINTER #define LLMR_RENDERER_PAINTER #include #include #include #include #include #include #include #include #include namespace llmr { class Transform; class Settings; class Style; class Tile; class FillBucket; class LineBucket; class Painter : private util::noncopyable { public: Painter(Transform& transform, Settings& settings, Style& style); void setup(); void clear(); void changeMatrix(const Tile::ID& id); void render(const std::shared_ptr& tile); void renderMatte(); void renderBackground(); void renderFill(FillBucket& bucket, const std::string& layer_name, const Tile::ID& id); void renderLine(LineBucket& bucket, const std::string& layer_name, const Tile::ID& id); private: void setupShaders(); void drawClippingMask(); void renderLayers(const std::shared_ptr& tile, const std::vector& layers); void renderDebug(const std::shared_ptr& tile); private: Transform& transform; Settings& settings; Style& style; mat4 nativeMatrix; mat4 matrix; mat4 exMatrix; std::unique_ptr plainShader; std::unique_ptr outlineShader; std::unique_ptr lineShader; std::unique_ptr patternShader; // Set up the stencil quad we're using to generate the stencil mask. VertexBuffer tileStencilBuffer = { // top left triangle 0, 0, 4096, 0, 0, 4096, // bottom right triangle 4096, 0, 0, 4096, 4096, 4096 }; VertexArrayObject coveringPlainArray; VertexArrayObject coveringPatternArray; // Set up the tile boundary lines we're using to draw the tile outlines. VertexBuffer tileBorderBuffer = { 0, 0, 4096, 0, 4096, 4096, 0, 4096, 0, 0 }; VertexArrayObject tileBorderArray; // Set up the matte buffer we're using to draw the filling background. VertexBuffer matteBuffer = { // top left triangle 0, 0, 16384, 0, 0, 16384, // bottom right triangle 16384, 0, 0, 16384, 16384, 16384 }; VertexArrayObject matteArray; }; } #endif