Resolves: tdf#161478 Insert button not updated on switch tabs
[LibreOffice.git] / canvas / opengl / linearMultiColorGradientFragmentShader.glsl
blob7ad881368ac5f5419c04bc93bfe63df1908124aa
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
10 #version 120
12 uniform int       i_nColors;
13 uniform sampler1D t_colorArray4d;
14 uniform sampler1D t_stopArray1d;
15 uniform mat3x2    m_transform;
16 varying vec2      v_textureCoords2d;
18 int max(int x, int y)
20     if(x > y)
21         return x;
22     return y;
25 int findBucket(float t)
27     int nMinBucket=0;
28     while( nMinBucket < i_nColors &&
29             texture1D(t_stopArray1d, nMinBucket).s < t )
30         ++nMinBucket;
31     return max(nMinBucket-1,0);
34 void main(void)
36     float fAlpha =
37         clamp( (m_transform * vec3(v_textureCoords2d,1)).s,
38                 0.0, 1.0 );
40     int nMinBucket = findBucket( fAlpha );
42     float fLerp =
43         (fAlpha-texture1D(t_stopArray1d, nMinBucket).s) /
44         (texture1D(t_stopArray1d, nMinBucket+1).s -
45          texture1D(t_stopArray1d, nMinBucket).s);
47     gl_FragColor = mix(texture1D(t_colorArray4d, nMinBucket),
48             texture1D(t_colorArray4d, nMinBucket+1),
49             fLerp);
52 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */