私のアプリケーションでは、2 つのテクスチャを乗算し、結果を 2 より大きい係数で乗算する必要があります。これには GL_MODULATE と GL_RGB_SCALE を使用しています。これには次のコードを使用します
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, Input.texID);
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, Temp64.texID);
glEnable(GL_TEXTURE_2D);
// glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Temp64.wide, Temp64.high, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
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_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE, 4.0);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, SystemFBO);
glViewport(0, 0, wide, high);
//glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
OpenGL ES 1.1 仕様の私の理解によると、テクスチャ間の最初の変調が行われ、次に 4 による乗算が行われ、[0 1] にクランプされます。
仕様書にはこうある
「TEXTURE ENV MODE の値が COMBINE の場合、テクスチャ関数の形式は、表 3.17 に従って、COMBINE RGB と COMBINE ALPHA の値に依存します。テクスチャ関数の RGB と ALPHA の結果は、次に、それぞれ RGB SCALE と ALPHA SCALE の値。結果は [0, 1] にクランプされます。"
しかし、私が気付くのは違います。最初にテクスチャ ユニット 1 を 4 で乗算し、[0 1] にクランプしてから、テクスチャ ユニット 0 で変調します。ただし、変調後に RGB_SCALE を適用する必要があります。
変調結果を FBO に書き込んでスケーリングを使用しようとしましたが、うまくいきませんでした。
私がやりたいのは、画像を別の画像で乗算し、その結果に 2 より大きい値を乗算することです。2 番目の乗算までクランプを行うべきではありません。誰か助けてくれませんか?