在我的片段著色器中,我聲明了一個這樣的紋理數組:uniform sampler2D textures[7];。這個數組加載了我想使用的 Open GL 紋理索引:GLES31.glUniform1iv(handleOnTextures, 7,new int [] {0,1,2,3,4,5,6);正如我想使用GL_TEXTURE0的那樣GL_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]。我面臨的問題是,只有最后加載的紋理才能給出正確的結果,而所有其他紋理都呈現為黑色!我究竟做錯了什么?
1 回答

飲歌長嘯
TA貢獻1951條經驗 獲得超3個贊
您早期的紋理不完整;您只在循環結束后指定過濾參數,因此只有最后一個紋理定義了過濾。
將此移動到設置每個紋理的循環內:
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);
添加回答
舉報
0/150
提交
取消