我正在做一个在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+…所以非常值得。
同样值得注意的是,如果重写不是一个选项,那么混合方法将是非常值得的