[RFCv2 6/9] gl-renderer: Add support for blending in linear space.

Pekka Paalanen ppaalanen at gmail.com
Mon Nov 19 00:52:41 PST 2012


On Sat, 17 Nov 2012 03:23:57 +0100
John Kåre Alsaker <john.kare.alsaker at gmail.com> wrote:

> This makes compositing gamma correct by assuming all input surfaces are in
> the sRGB color space. It can be enabled by setting color-managed to true
> in the compositor section of weston.ini.
> 
> It's implemented by converting from sRGB gamma using the new CONVERSION_FROM_SRGB
> shader attribute and drawing the surfaces into a temporary buffer (the
> indirect rendering introduced in the previous patch). That buffer is then
> drawed to the framebuffer using the OUTPUT_TO_SRGB shader attribute which
> converts back into sRGB gamma.
> 
> Both the temporary buffer and sRGB decode LUT needs atleast 12-bits per
> channel for flawless results with 8-bit input/output. This is not provided
> by OpenGL ES 2 by default so desktop OpenGL is required for usable results.
> 
> It also adds a check to ensure we have enough texture units for the planes
> and the LUT.
> ---
>  src/compositor.c  |   7 ++-
>  src/compositor.h  |   2 +
>  src/gl-internal.h |  13 ++++-
>  src/gl-renderer.c |  45 ++++++++++++---
>  src/gl-shaders.c  | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++---
>  5 files changed, 219 insertions(+), 17 deletions(-)
...
> diff --git a/src/gl-renderer.c b/src/gl-renderer.c
> index b35c5a9..c5b3908 100644
> --- a/src/gl-renderer.c
> +++ b/src/gl-renderer.c
...
> @@ -1600,6 +1619,7 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface)
>  	gr->bgra_format = GL_BGRA;
>  	gr->short_type = GL_UNSIGNED_SHORT;
>  	gr->rgba16_internal_format = GL_RGBA16;
> +	gr->l16_internal_format = GL_LUMINANCE16;
>  #else
>  	static const EGLint context_attribs[] = {
>  		EGL_CONTEXT_CLIENT_VERSION, 2,
> @@ -1610,6 +1630,7 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface)
>  	gr->bgra_format = GL_BGRA_EXT;
>  	gr->short_type = GL_UNSIGNED_BYTE;
>  	gr->rgba16_internal_format = GL_RGBA;
> +	gr->l16_internal_format = GL_LUMINANCE;
>  #endif

You are using a luminance format for a single-channel texture, that
acts as the lookup table?

Did you consider GL_R formats? I.e. single-channel color formats.
Luminance is sort of a thing of the past, AFAIU.


Thanks,
pq


More information about the wayland-devel mailing list