Mir
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Public Member Functions | List of all members
mir::compositor::GLRenderer Class Reference

#include <gl_renderer.h>

Inheritance diagram for mir::compositor::GLRenderer:
Inheritance graph
[legend]

Classes

struct  Primitive
 
struct  Vertex
 

Public Member Functions

 GLRenderer (geometry::Rectangle const &display_area)
 
virtual ~GLRenderer () noexcept
 
void set_viewport (geometry::Rectangle const &rect) override
 
void set_rotation (float degrees) override
 
void begin () const override
 
void render (graphics::Renderable const &renderable, graphics::Buffer &buffer) const override
 
void end () const override
 
void suspend () override
 
virtual void tessellate (std::vector< Primitive > &primitives, graphics::Renderable const &renderable, geometry::Size const &buf_size) const
 tessellate defines the list of triangles that will be used to render the surface. More...
 
virtual GLuint load_texture (graphics::Renderable const &renderable, graphics::Buffer &buffer) const
 Load the texture for a surface any which way you like. More...
 
- Public Member Functions inherited from mir::compositor::Renderer
virtual ~Renderer ()=default
 

Additional Inherited Members

- Protected Member Functions inherited from mir::compositor::Renderer
 Renderer ()=default
 
 Renderer (const Renderer &)=delete
 
Rendereroperator= (const Renderer &)=delete
 

Constructor & Destructor Documentation

mir::compositor::GLRenderer::GLRenderer ( geometry::Rectangle const &  display_area)
mir::compositor::GLRenderer::~GLRenderer ( )
virtualnoexcept

Member Function Documentation

void mir::compositor::GLRenderer::begin ( ) const
overridevirtual
void mir::compositor::GLRenderer::end ( ) const
overridevirtual
GLuint mir::compositor::GLRenderer::load_texture ( graphics::Renderable const &  renderable,
graphics::Buffer buffer 
) const
virtual

Load the texture for a surface any which way you like.

The default implementation does so with efficient GPU-side caching built in.

Returns
The OpenGL texture name for the surface.
void mir::compositor::GLRenderer::render ( graphics::Renderable const &  renderable,
graphics::Buffer buffer 
) const
overridevirtual
void mir::compositor::GLRenderer::set_rotation ( float  degrees)
overridevirtual
void mir::compositor::GLRenderer::set_viewport ( geometry::Rectangle const &  rect)
overridevirtual
void mir::compositor::GLRenderer::suspend ( )
overridevirtual
void mir::compositor::GLRenderer::tessellate ( std::vector< Primitive > &  primitives,
graphics::Renderable const &  renderable,
geometry::Size const &  buf_size 
) const
virtual

tessellate defines the list of triangles that will be used to render the surface.

By default it just returns 4 vertices for a rectangle. However you can override its behaviour to tessellate more finely and deform freely for effects like wobbly windows.

Parameters
[in,out]primitivesThe list of rendering primitives to be grown and/or modified.
[in]renderableThe renderable surface being tessellated.
[in]buf_sizeThe dimensions of the buffer being rendered, which can be particularly useful in calculating texcoords for a surface being actively resized (as the buf_size doesn't yet match renderable.size()).
Note
The cohesion of this function to GLRenderer is quite loose and it does not strictly need to reside here. However it seems a good choice under GLRenderer while this remains the only OpenGL-specific class in the display server, and tessellation is very much OpenGL-specific.

Reimplemented in mir::examples::DemoRenderer.


The documentation for this class was generated from the following files:

Copyright © 2012,2013 Canonical Ltd.
Generated on Fri Apr 11 21:14:53 UTC 2014