1
我想创建Android上的OpenGL ES 2.0的滚动列表,我想我的列表的内容淡出作为列表到达顶部或底部。现在我在一个片段着色器实现这一点,但它是非常缓慢的。衰落效应对OpenGL ES的滚动列表2.0
这里是我的着色器
precision mediump float;
uniform bool uEnableTexture;
uniform sampler2D uTexture;
uniform bool uEnableFade;
uniform float uTopFade;
uniform float uBottomFade;
uniform float uFadeWidth;
varying vec4 vPosition;
varying vec2 vTexCoord;
varying vec4 vColor;
void main(){
if (uEnableTexture) {
gl_FragColor = texture2D(uTexture, vTexCoord) * vColor;
} else {
gl_FragColor = vColor;
}
if (uEnableFade) {
if (vPosition.y > uTopFade) {
gl_FragColor = gl_FragColor * 0.0;
} else if (vPosition.y > uTopFade - uFadeWidth) {
gl_FragColor = gl_FragColor * (1.0 - (vPosition.y - (uTopFade - uFadeWidth))/uFadeWidth);
} else if (vPosition.y < uBottomFade) {
gl_FragColor = gl_FragColor * 0.0;
} else if (vPosition.y < uBottomFade + uFadeWidth) {
gl_FragColor = gl_FragColor * (1.0 + (vPosition.y - (uBottomFade + uFadeWidth))/uFadeWidth);
}
}
}
这是我想达到的效果。
有没有更有效的方式来实现这一目标?
编辑:我能够通过使用单独的程序,并使用只有当我需要淡出这个shader来改善这个有很多。
void main(){
gl_FragColor = texture2D(uTexture, vTexCoord) * vColor;
if (vPosition.y > uTopFade - uFadeWidth) {
gl_FragColor = gl_FragColor * (1.0 - (vPosition.y - (uTopFade - uFadeWidth))/uFadeWidth);
} if (vPosition.y < uBottomFade + uFadeWidth) {
gl_FragColor = gl_FragColor * (1.0 + (vPosition.y - (uBottomFade + uFadeWidth))/uFadeWidth);
}
}
我也许可以加快速度更受分成两个着色器,一个顶部和一个底部,或使用uFadeWidth确定方向这一点。