无法在片段中成功使用多个纹理

Can't succeed in using multiple textures in a fragment

在我的片段着色器中,我声明了一个纹理数组,如下所示:uniform sampler2D textures[7];

这个数组加载了我想使用的 Open GL 纹理索引:GLES31.glUniform1iv(handleOnTextures, 7,new int [] {0,1,2,3,4,5,6);

因为我想用 GL_TEXTURE0GL_TEXTURE6

在我的onSurfaceCreated函数中,我以这种方式加载纹理:

handleOnTextureNames= new int[textureArray.length];
GLES31.glGenTextures(textureArray.length, handleOnTextureNames, 0);
if (handleOnTextureNames[0] != 0) {
    options = new BitmapFactory.Options();
    options.inScaled = false;
    for (t = 0; t < textureArray.length; t++) {
        GLES31.glActiveTexture(GLES31.GL_TEXTURE0+t);
        GLES31.glBindTexture(GLES31.GL_TEXTURE_2D, handleOnTextureNames[t]);
        image = BitmapFactory.decodeResource(getContext().getResources(), textureArray[t], options);
        GLUtils.texImage2D(GLES31.GL_TEXTURE_2D, 0, image, 0);
        image.recycle();
    }
} else {
    throw new RuntimeException("Error!");
}

GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MIN_FILTER, GLES31.GL_NEAREST);
GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MAG_FILTER, GLES31.GL_NEAREST);

为了定义我想在着色器执行过程中使用哪个纹理,我使用 :

向它传输了一个索引
GLES31.glUniform1i(handleOnTextureIndice, idTexture);

idTexture 的范围从 0 到 6,具体取决于我要使用的纹理。

在片段着色器中,为了计算片段颜色,纹理是这样访问的:textures[textureIndice]

我面临的问题是,只有最后加载的纹理给出了正确的结果,而所有其他纹理都呈现为黑色!

我做错了什么?

您之前的贴图不完整;您只在循环结束后指定过滤参数,因此只有最后一个纹理定义了过滤。

将其移到设置每个纹理的循环中:

GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MIN_FILTER, GLES31.GL_NEAREST);
GLES31.glTexParameteri(GLES31.GL_TEXTURE_2D, GLES31.GL_TEXTURE_MAG_FILTER, GLES31.GL_NEAREST);