Mir
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
mir::compositor::GLRenderer Class Reference

#include <gl_renderer.h>

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

Classes

struct  Program
 

Public Member Functions

 GLRenderer (std::unique_ptr< graphics::GLTextureCache > &&texture_cache, geometry::Rectangle const &display_area, DestinationAlpha dest_alpha)
 
void set_viewport (geometry::Rectangle const &rect) override
 
void set_rotation (float degrees) override
 
void render (graphics::RenderableList const &) const override
 
void suspend () override
 
- Public Member Functions inherited from mir::compositor::Renderer
virtual ~Renderer ()=default
 

Protected Member Functions

virtual void tessellate (std::vector< graphics::GLPrimitive > &primitives, graphics::Renderable const &renderable) const
 tessellate defines the list of triangles that will be used to render the surface. More...
 
DestinationAlpha destination_alpha () const
 
virtual void draw (graphics::Renderable const &renderable, GLRenderer::Program const &prog) const
 
- Protected Member Functions inherited from mir::compositor::Renderer
 Renderer ()=default
 
 Renderer (const Renderer &)=delete
 
Rendereroperator= (const Renderer &)=delete
 

Protected Attributes

GLfloat clear_color [4]
 
long long frameno = 0
 
GLProgramFamily family
 
Program default_program
 
Program alpha_program
 

Static Protected Attributes

static const GLchar *const vshader
 
static const GLchar *const default_fshader
 
static const GLchar *const alpha_fshader
 

Constructor & Destructor Documentation

mir::compositor::GLRenderer::GLRenderer ( std::unique_ptr< graphics::GLTextureCache > &&  texture_cache,
geometry::Rectangle const &  display_area,
DestinationAlpha  dest_alpha 
)

Member Function Documentation

mc::DestinationAlpha mir::compositor::GLRenderer::destination_alpha ( ) const
protected
void mir::compositor::GLRenderer::draw ( graphics::Renderable const &  renderable,
GLRenderer::Program const &  prog 
) const
protectedvirtual
void mir::compositor::GLRenderer::render ( graphics::RenderableList const &  renderables) 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< graphics::GLPrimitive > &  primitives,
graphics::Renderable const &  renderable 
) const
protectedvirtual

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.
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.

Member Data Documentation

const GLchar *const mir::compositor::GLRenderer::alpha_fshader
staticprotected
Initial value:
=
{
"precision mediump float;\n"
"uniform sampler2D tex;\n"
"uniform float alpha;\n"
"varying vec2 v_texcoord;\n"
"void main() {\n"
" vec4 frag = texture2D(tex, v_texcoord);\n"
" gl_FragColor = alpha*frag;\n"
"}\n"
}
Program mir::compositor::GLRenderer::alpha_program
protected
GLfloat mir::compositor::GLRenderer::clear_color[4]
protected
const GLchar *const mir::compositor::GLRenderer::default_fshader
staticprotected
Initial value:
=
{
"precision mediump float;\n"
"uniform sampler2D tex;\n"
"varying vec2 v_texcoord;\n"
"void main() {\n"
" gl_FragColor = texture2D(tex, v_texcoord);\n"
"}\n"
}
Program mir::compositor::GLRenderer::default_program
protected
GLProgramFamily mir::compositor::GLRenderer::family
protected
long long mir::compositor::GLRenderer::frameno = 0
mutableprotected
const GLchar *const mir::compositor::GLRenderer::vshader
staticprotected
Initial value:
=
{
"attribute vec3 position;\n"
"attribute vec2 texcoord;\n"
"uniform mat4 screen_to_gl_coords;\n"
"uniform mat4 display_transform;\n"
"uniform mat4 transform;\n"
"uniform vec2 centre;\n"
"varying vec2 v_texcoord;\n"
"void main() {\n"
" vec4 mid = vec4(centre, 0.0, 0.0);\n"
" vec4 transformed = (transform * (vec4(position, 1.0) - mid)) + mid;\n"
" gl_Position = display_transform * screen_to_gl_coords * transformed;\n"
" v_texcoord = texcoord;\n"
"}\n"
}

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

Copyright © 2012,2013 Canonical Ltd.
Generated on Tue Mar 24 16:15:19 UTC 2015