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 */ 9 10#version 120 11 12uniform int i_nColors; 13uniform sampler1D t_colorArray4d; 14uniform sampler1D t_stopArray1d; 15uniform mat3x2 m_transform; 16varying vec2 v_textureCoords2d; 17 18int max(int x, int y) 19{ 20 if(x > y) 21 return x; 22 return y; 23} 24 25int findBucket(float t) 26{ 27 int nMinBucket=0; 28 while( nMinBucket < i_nColors && 29 texture1D(t_stopArray1d, nMinBucket).s < t ) 30 ++nMinBucket; 31 return max(nMinBucket-1,0); 32} 33 34void main(void) 35{ 36 float fAlpha = 37 clamp( (m_transform * vec3(v_textureCoords2d,1)).s, 38 0.0, 1.0 ); 39 40 int nMinBucket = findBucket( fAlpha ); 41 42 float fLerp = 43 (fAlpha-texture1D(t_stopArray1d, nMinBucket).s) / 44 (texture1D(t_stopArray1d, nMinBucket+1).s - 45 texture1D(t_stopArray1d, nMinBucket).s); 46 47 gl_FragColor = mix(texture1D(t_colorArray4d, nMinBucket), 48 texture1D(t_colorArray4d, nMinBucket+1), 49 fLerp); 50} 51 52/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 53