我正在尝试像photoshop一样实现图层功能 . 这是我想要画的..
但它如下图所示
它使用两层 . 用2个纹理框架构建一个用于背景,另一个用于绘制 . 纹理与片段着色器混合 .
mediump vec4 tex0_color = texture2D(texunit0,TexCoordOut); // bg texture
mediump vec4 tex1_color = texture2D(texunit1,TexCoordOut); // drawing texture
mediump vec4 mix_color = mix(tex0_color,tex1_color,tex1_color.a);
并且使用顶点精灵执行绘图层上的每个绘制
highp float a = DestinationColor.a * texture2D(texunit0,gl_PointCoord).a;
gl_FragColor = vec4(DestinationColor.rgb,a);
和混合功能设置如下..
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
你能给我一些建议吗?
2 回答
着色器不会执行混合操作,因为它需要读取和写入目标纹理,这只能同步完成,导致性能非常差 . 这种同步现在只能在非可编程流水线中实现 .
你可能会考虑使用两种纹理,一种用于阅读,另一种用于书写 . 应用刷子后,切换它们 .
我想你是在this之后 . 如果你需要通过GLSL实现各种类似Photoshop的混合模式,请查看this文章 . 与使用着色器相比,硬件混合相当有限 .