# class hiro::draw::SkinnedMeshRenderer

## Overview

    #include <SkinnedMeshRenderer.h>

    class SkinnedMeshRenderer: public hiro::draw::MeshRenderer {
    public:
        // construction

        SkinnedMeshRenderer(const cogs::Armature& armature);
        SkinnedMeshRenderer(const hiro::draw::SkinnedMeshRenderer& object_ptr);
        virtual ~SkinnedMeshRenderer();

        // methods

        void SetPose(const cogs::SkeletonPose& pose);

    protected:
        // methods

        virtual void LoadRequiredShaderPrograms(glw::ProgramList* programs);
        virtual bool IsCompatibileWithStyle(const hiro::draw::Style* style);
        virtual void Render(const std::string& program);
    };

### Inherited Members

    public:
        // methods

        virtual bool IsCompatibileWithStyle(const hiro::draw::Style* style) = 0;
        ElementRenderer& operator=(const hiro::draw::ElementRenderer& source);
        ElementRenderer& operator=(hiro::draw::ElementRenderer&&);
        GeometryRenderer& operator=(const hiro::draw::GeometryRenderer& source);
        GeometryRenderer& operator=(hiro::draw::GeometryRenderer&&);
        void Set(hiro::draw::GeometryName geometry_name);
        void Set(glw::PArrayObject& vao);
        void SetInstancingEnabled(bool instancing_enabled);
        void SetInstancingTransforms(const std::vector<glm::mat4>& transformations);
        void SetPreInstancingTransform(const glm::mat4& transformation);
        virtual bool IsCompatibileWithStyle(const hiro::draw::Style* style);
        MeshRenderer& operator=(const hiro::draw::MeshRenderer& source);
        MeshRenderer& operator=(hiro::draw::MeshRenderer&&);
        void SetCustomColors(const std::vector<cogs::Color3f>& colors);
        virtual bool IsCompatibileWithStyle(const hiro::draw::Style* style);

    protected:
        // methods

        virtual void LoadRequiredShaderPrograms(glw::ProgramList* programs);
        virtual void Render(const std::string& program);
        virtual void OnRenderSimple();
        virtual void Render2D(const std::string& program);
        virtual void OnRenderSimple2D();
        virtual void FillTextRenderer(hiro::draw::TextRenderer* t_renderer);

        template <typename StyleType>
        const StyleType* GetStyle() const;

        const Scene* GetScene() const;
        virtual void LoadRequiredShaderPrograms(glw::ProgramList* programs);
        virtual void Render(const std::string& program);
        virtual void OnRenderPoints();
        virtual void OnRenderFaces();
        virtual void OnRenderNormals();
        void RenderPoints(const hiro::draw::PointsStyle& style, std::function<void(void)> render_func);
        void RenderFaces(const hiro::draw::FacesStyle& style, std::function<void(void)> render_func);
        void RenderNormals(const hiro::draw::NormalsStyle& style, std::function<void(void)> render_func);
        virtual void OnRenderFaces();
        virtual void OnRenderPoints();
        virtual void OnRenderNormals();
        virtual void OnRenderSimple();
        FacesStyle::NormalSource GetValidNormalSource(const GeometryStyle& style);

## Detailed Documentation

### Methods

    virtual void LoadRequiredShaderPrograms(glw::ProgramList* programs)

Loads shader programs required by this renderer.

    virtual bool IsCompatibileWithStyle(const hiro::draw::Style* style)

Test whether specified style is compatible with the object.

    virtual void Render(const std::string& program)

Specifies what happens during render.