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 のスニペットを実行することもできますが、それには独自のオーバーヘッドが伴うと思います
誰かがこれについて何かアイデアや考えを持っているなら、私はそれらを聞いていただければ幸いです!