我在java字节数组中有一个固定大小frame buffer
(从YUV有效转换为1200x720 RGBA)。
我想将一定颜色的阴影(在我的情况下为白色,无论其alpha值如何)设置为完全透明。
目前,我通过遍历字节数组并通过RGB > 0xC8
对像素进行归零来通过CPU执行此操作。这在某种程度上有效,但显然非常慢(> 1秒/帧),因为在实时流上这样做。
我一直在研究通过Android上GPU/OpenGL
执行此操作的方法,我看到提到Alpha测试,混合和颜色键控。看来alpha测试在这里没用,因为它依赖于alpha信息而不是RGB的值。
知道如何使用OpenGL / java在Android上执行此操作吗?
答案 0 :(得分:1)
似乎alpha测试在这里没用
alpha测试的逻辑在片段着色器中实现,因此不是测试alpha只是更改测试以实现对RGB值的检查。这里的技术是通用的,100%灵活。您正在寻找的基础操作是片段着色器,它在颜色键匹配时触发discard
操作。
或者你可以使用相同的条件检查,而不是调用discard
只需将输出颜色设置为vec4(0.0)
并使用混合来避免修改该片段的帧缓冲。总的来说,我希望这会更有效率; discard
往往会产生奇怪的性能副作用。
答案 1 :(得分:0)
您应该创建一个自定义renderscript脚本来转换这些像素,您也可以使用它来转换yuv,这样您只需处理缓冲区中的像素