在我的应用程序中,我需要乘以两个纹理,然后乘以高于2的因子。我正在使用GL_MODULATE和GL_RGB_SCALE。我用下面的代码本OpenGL ES 1.1调制和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模式的值是联合收割机,FUNC-重刑取决于COMBINE RGB并结合ALPHA值纹理的形式,根据表3.17。该然后纹理函数的RGB和ALPHA结果分别被RGB SCALE和ALPHA SCALE的值叠加,结果被钳位为[0,1]。
但我注意到的是不同的。它首先将纹理单元1乘以4,并将其固定为[0 1],然后用纹理单元0进行调制。但是我希望在调制之后应用RGB_SCALE。
我试图将调制结果写入FBO,然后使用缩放,但它不起作用。
我想要做的是将图像与另一图像相乘,然后将结果乘以高于2的值。在第二次乘法之前不应夹紧。有人能帮帮我吗?