/**************************************************************************** ** ** Copyright (C) 2014 NVIDIA Corporation. ** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt 3D Studio. ** ** $QT_BEGIN_LICENSE:GPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 or (at your option) any later version ** approved by the KDE Free Qt Foundation. The licenses are as published by ** the Free Software Foundation and appearing in the file LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ float gradientInterpolate( in int interpolationMode, in float value ) { switch( interpolationMode ) { case gradient_interpolation_linear : return( value ); case gradient_interpolation_off : return( 0.0 ); case gradient_interpolation_ease_in : return( 1.0 - pow( 1.0 - value, 2.0/3.0 ) ); case gradient_interpolation_ease_out : return( pow( value, 2.0/3.0 ) ); case gradient_interpolation_ease_in_out : return( ( value <= 0.5 ) ? 0.5 * pow( 2.0 * value, 2.0/3.0 ) : 0.5 + 0.5 * ( 1.0 - pow( 2.0 * ( 1.0 - value ), 2.0/3.0 ) ) ); default: return( value ); // default is linear } } texture_return gradient3Recolor( in float gradientPositions[3], in vec3 gradientColors[3], in int interpolationModes[3], in int monoSource, in float distortion, in float position ) { texture_return tr; float pos = position + distortion; if ( pos <= gradientPositions[0] ) { tr.tint = gradientColors[0]; } else if ( pos >= gradientPositions[2] ) { tr.tint = gradientColors[2]; } else { int index = ( position < gradientPositions[1] ) ? 0 : 1; float relPos = gradientInterpolate( interpolationModes[index], ( pos - gradientPositions[index] ) / ( gradientPositions[index+1] - gradientPositions[index] ) ); tr.tint = mix( gradientColors[index], gradientColors[index+1], relPos ); } tr.mono = 0.0; return( tr ); }