OpenGL 多纹理混合
Posted
技术标签:
【中文标题】OpenGL 多纹理混合【英文标题】:OpenGL multitexture blending 【发布时间】:2012-09-06 05:45:06 【问题描述】:我正在尝试实现像 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);
你能给我一些建议吗?
【问题讨论】:
【参考方案1】:不让着色器执行混合操作,因为它需要读取和写入目标纹理,这只能同步完成,导致性能非常差。这种同步目前只能在不可编程的管道中实现。
您可以考虑使用两种纹理,一种用于阅读,另一种用于书写。应用画笔后,切换它们。
【讨论】:
是的,我个人使用 3 个 FBO 在着色器中实现了所有 Photoshop 混合模式。根本没有纯粹的性能。但这对于 OpenGL 初学者来说并不容易。 :) 你能给我提示一下吗?或示例代码会很有帮助【参考方案2】:我认为您正在关注this。如果您需要通过 GLSL 实现各种 Photoshop 之类的混合模式,请查看 this 文章。与您可以使用的功能相比,使用硬件混合非常有限着色器。
【讨论】:
以上是关于OpenGL 多纹理混合的主要内容,如果未能解决你的问题,请参考以下文章