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確定方向這一點。