Mir
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
mir::renderer::gl::Renderer Class Reference

#include <renderer.h>

Inheritance diagram for mir::renderer::gl::Renderer:
[legend]

Classes

struct  Program
 

Public Member Functions

 Renderer (graphics::DisplayBuffer &display_buffer)
 
virtual ~Renderer ()
 
void set_viewport (geometry::Rectangle const &rect) override
 
void set_output_transform (MirOrientation orientation, MirMirrorMode mode) override
 
void render (graphics::RenderableList const &) const override
 
void suspend () override
 

Protected Member Functions

virtual void tessellate (std::vector< mir::gl::Primitive > &primitives, graphics::Renderable const &renderable) const
 tessellate defines the list of triangles that will be used to render the surface. More...
 
virtual void draw (graphics::Renderable const &renderable, Renderer::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
 
ProgramFamily 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::renderer::gl::Renderer::Renderer ( graphics::DisplayBuffer display_buffer)
mir::renderer::gl::Renderer::~Renderer ( )
virtual

Reimplemented from mir::compositor::Renderer.

Member Function Documentation

void mir::renderer::gl::Renderer::draw ( graphics::Renderable const &  renderable,
Renderer::Program const &  prog 
) const
protectedvirtual
void mir::renderer::gl::Renderer::render ( graphics::RenderableList const &  renderables) const
overridevirtual
void mir::renderer::gl::Renderer::set_output_transform ( MirOrientation  orientation,
MirMirrorMode  mode 
)
overridevirtual
void mir::renderer::gl::Renderer::set_viewport ( geometry::Rectangle const &  rect)
overridevirtual
void mir::renderer::gl::Renderer::suspend ( )
overridevirtual
void mir::renderer::gl::Renderer::tessellate ( std::vector< mir::gl::Primitive > &  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 gl::Renderer is quite loose and it does not strictly need to reside here. However it seems a good choice under gl::Renderer 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::renderer::gl::Renderer::alpha_fshader
staticprotected
Initial value:
=
{
"#ifdef GL_ES\n"
"precision mediump float;\n"
"#endif\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::renderer::gl::Renderer::alpha_program
protected
GLfloat mir::renderer::gl::Renderer::clear_color[4]
protected
const GLchar *const mir::renderer::gl::Renderer::default_fshader
staticprotected
Initial value:
=
{
"#ifdef GL_ES\n"
"precision mediump float;\n"
"#endif\n"
"uniform sampler2D tex;\n"
"varying vec2 v_texcoord;\n"
"void main() {\n"
" gl_FragColor = texture2D(tex, v_texcoord);\n"
"}\n"
}
Program mir::renderer::gl::Renderer::default_program
protected
ProgramFamily mir::renderer::gl::Renderer::family
protected
long long mir::renderer::gl::Renderer::frameno = 0
mutableprotected
const GLchar *const mir::renderer::gl::Renderer::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-2015 Canonical Ltd.
Generated on Thu Sep 8 14:50:19 UTC 2016