1

我正在从事 GLES 1.1 中的项目。它必须是 GLES 1.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 的片段......但我觉得这会带来它自己的开销

如果有人对此有任何想法或想法,我将不胜感激!

4

1 回答 1

0

我自己或在这里找不到答案。已经有一段时间了,所以任何人都想知道......

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

上述操作与其他一些操作成功卸载到 GPU,性能从 1fps 提高到 60+...非常值得:)。

还值得注意的是,如果重新编写不是一种选择,我的混合方法将非常值得

于 2014-08-13T21:06:38.230 回答