Shader修改颜色出现不透明框

原本想做个shader,用来完成对图片色相,饱和度,亮度的调整,结果根据转换算法描述写完之后发现一个很严重的问题,就是原本图片是透明的地方在调整了亮度之后出现了不透明的色块(仅增大会出现)。后来将shader简化,仅将图片做红偏色。原图如下:
无标题2

结果做完shader变成下面这样:

gl_FragColor = vec4(r + 0.3, g, b, a);

无标题

经过一番尝试,后来发现改成这样均正常

gl_FragColor = vec4(r * 1.3, g, b, a);
gl_FragColor = vec4(r  + r * 0.3, g, b, a);

无标题1

总结,大抵是shader里面不能直接用加减单位来修改RGB值,只能用乘除法来做,大概猜测是因为色彩的单位并不是我们以为的[0, 1]吧,具体原因以后再具体分析吧。