
// StrokerProgram.hpp - GLSL programs for stroking

#ifndef __StrokerProgram_hpp__
#define __StrokerProgram_hpp__

#include "gl_program.hpp"
#include "StrokeTessellator.hpp"
#include "StrokerShaderConfig.hpp"

class StrokerProgram : public GLSLProgram, public StrokeSettingTypes, StrokeConfigTypes {
public:
    void updateUniformsOfProgramVariant(const StrokerShaderConfig& config, const float viewport_scale[4]);

#if SUPPORT_POLAR_VISUALIZE
    void configRawGridProgramJoinStyle(StrokeTessellator::JoinEnum join_style);
    void configRawGridProgramEffectiveMiterLimit(float effective_miter_limit);
    void configRawGridProgramCapMask(StrokeTessellator::CapEnum initial_cap, StrokeTessellator::CapEnum terminal_cap,  StrokeTessellator::CapEnum initial_dash_cap, StrokeTessellator::CapEnum terminal_dash_cap);
    void configRawGridProgramCutOut(bool cut_out);

    void updateUniformSegments(int ribs);
#endif
};

#endif // __StrokerProgram_hpp__
