1

GLES 1.1 のプロジェクトに取り組んでいます。GLES 1.1 である必要があります。

ただし、事前乗算を行う必要があります。つまり、すべてのピクセルを取得し、rgba = r*a,b*a,g*a,a から変更する必要があります。そして、後でそれを逆にします。

シェーダーにアクセスできれば問題ありませんが、もちろん gles 1.1 ではありません。

readpixels 経由で実行し、CPU で実行して元に戻すのは非常に遅いので、どうにかしてチートできる方法を考えようとしています。

プリマルチプライを行う方法の 1 つは、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);

しかしその後、操作を逆にする必要があります。私の人生では、それを元に戻す方法は考えられません。

すべてが同じアルファを持っている場合、glLighting 関数を悪用できますが、残念ながらそうではありません。

私は少し運命にあると感じています。

おそらく、共有コンテキストを使用して GLES 2.0 のスニペットを実行することもできますが、それには独自のオーバーヘッドが伴うと思います

誰かがこれについて何かアイデアや考えを持っているなら、私はそれらを聞いていただければ幸いです!

4

1 に答える 1