将每个像素乘以其 alpha Open GLES 1.1(预乘法),然后反转



我正在做一个在GLES 1.1中的项目。它必须是gles1.1。

但它必须做一些预乘法,即获取每个像素,并将其从rgba = r*a,b*a,g*a,a更改。然后再反转。

如果我有访问着色器,这将是没有问题,但当然是gles 1.1我没有。

通过readpixels做它,然后在CPU上做它,把它放回去是可怕的慢,所以我试图想某种方式我可以作弊。

使用预乘法的一种方法是利用glTexEnvi

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE0);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE1);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_ALPHA);

但是之后,我需要反向操作。我无论如何也想不出一个办法来扭转它。

如果所有东西都有相同的alpha,我可以滥用glLighting功能,但遗憾的是他们没有。

我觉得我有点命中注定。

也许我可以使用共享上下文和做一个片段的GLES 2.0…但我觉得这会有它自己的开销

如果有人对此有任何想法或想法,我将非常感谢听到他们!

我自己都找不到答案。已经有一段时间了,所以如果有人想知道…

最后,我设法说服了"掌权者"让我将项目转换为GLES 2.0。这个过程实际上并不是很痛苦(幸运的是),而且非常值得。

上面的操作被成功卸载到GPU以及其他一些操作,性能从1fps增加到60+…所以非常值得。

同样值得注意的是,如果重写不是一个选项,那么混合方法将是非常值得的

相关内容

  • 没有找到相关文章

最新更新