class hiro::draw::ElementRenderer

Overview

Base class for rendering of geometry data. More…

#include <ElementRenderer.h>

class ElementRenderer: public hiro::draw::Renderer {
public:
    // construction

    ElementRenderer(const hiro::draw::ElementRenderer& source);
    ElementRenderer(hiro::draw::ElementRenderer&&);
    virtual ~ElementRenderer();

    // methods

    ElementRenderer& operator=(const hiro::draw::ElementRenderer& source);
    ElementRenderer& operator=(hiro::draw::ElementRenderer&&);

protected:
    // construction

    ElementRenderer();

    // methods

    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);
};

Inherited Members

public:
    // methods

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

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;

Detailed Documentation

Base class for rendering of geometry data.

If you wish to specify your rendering override desired “OnRender” method and render inside it.

Your own method for point rendering can be implemented something like this:

void hiro::draw::GeometryRenderer::OnRenderPoints()
{
  const auto style = GetStyle<GeometryStyle>();
  if (style->render_mode == GeometryStyle::RenderMode::points
    || style->render_mode == GeometryStyle::RenderMode::wired_points)
  {
    PointsStyle ps;
    ps.back_face_culling = style->back_face_culling;
    ps.color_source = style->color_source;
    ps.material = style->material;
    ps.point_size = style->point_size;

    vao_->Bind();
    RenderPoints(ps, [&]() { vao_->DrawVertices(glw::DrawMode::points); });
    vao_->Unbind();
  }
}

Construction

ElementRenderer()

Protected constructor, since this class should serve only as a base class.

Methods

virtual void LoadRequiredShaderPrograms(glw::ProgramList* programs)

Loads shader programs required by this renderer.

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

Specifies what happens during render.

virtual void OnRenderPoints()

Override if you wish to render points. Use the method RenderPoints to actually render.

virtual void OnRenderFaces()

Override if you wish to render faces. Use the method RenderFaces to actually render.

virtual void OnRenderNormals()

Override if you wish to render normals. Use the method RenderNormals to actually render.

void RenderPoints(const hiro::draw::PointsStyle& style, std::function<void(void)> render_func)

Prepares shader according to the style and renders points using the specified render_func.

void RenderFaces(const hiro::draw::FacesStyle& style, std::function<void(void)> render_func)

Prepares shader according to the style and renders faces using the specified render_func.

void RenderNormals(const hiro::draw::NormalsStyle& style, std::function<void(void)> render_func)

Prepares shader according to the style and renders normals using the specified render_func.