【问题标题】:Multiplying every pixel by its alpha Open GLES 1.1 (premultiplication) & then reverse将每个像素乘以其 alpha Opengles 1.1(预乘法)然后反转
【发布时间】:2013-02-21 17:55:19
【问题描述】:

我正在从事 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 的 sn-p...但我觉得这会带来自己的开销

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

【问题讨论】:

    标签: opengl-es pixel-shader opengl-es-1.1 premultiplied-alpha


    【解决方案1】:

    我自己或在此处找不到答案。对于任何想知道的人来说已经有一段时间了......

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

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

    同样值得注意的是,如果没有重写选项,我的混合方法将非常值得

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 2011-09-29
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多