[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