我正在研究GLES 1.1中的项目。它必须是GLES 1.1。
但它必须做一些预乘,即得到每个像素,并从rgba = r * a,b * a,g * a,a改变它。然后反过来。
如果我可以访问着色器,那将是没有问题,但当然是gles 1.1我没有。
通过读取像素进行操作,然后在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的片段......但我觉得这会带来自己的开销
如果有人对此有任何想法或想法,我将非常感谢听到他们!
答案 0 :(得分:0)
无法自己或在这里找到答案。对于任何想知道的人来说已经有一段时间了......
最后,我设法说服了那些能够成为"的力量。让我将项目转换为GLES 2.0。这个过程实际上并不痛苦(幸运的是),这非常值得。
上述操作已成功卸载到GPU以及其他一些操作,性能从1fps增加到60 + ......非常值得:)。
值得注意的是,如果重写不是一种选择,我的混合方法本来是值得的