передать 2 текстуры одному шейдеру в opengl-es 2.0 - PullRequest
0 голосов
/ 21 октября 2018

Я использую код из Как передать несколько текстур в один шейдер? .Он работает нормально, пока я не загрузлю и не свяжу новые текстуры после моего рельефного изображения.Я могу заставить это работать, только если моя карта рельефа является последней связанной и загруженной текстурой.Даже если все мои изображения одинакового размера.Вот мой код ...

public int[] textureIDs = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //texture image ID's
//load bitmap and bind texture (done 10 times) textureIndex is 1-10

Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), imageiD);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureIDs[textureIndex]);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);  
bitmap.recycle();

//render

shaderProgram = GraphicTools.sp_ImageBump;  
GLES20.glUseProgram(shaderProgram);

t1 = GLES20.glGetUniformLocation(shaderProgram, "u_texture");
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, globals.textureIDs[1]);//textureIndex
GLES20.glUniform1i(t1, 0);

t2 = GLES20.glGetUniformLocation(shaderProgram, "u_bumptex");
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, globals.textureIDs[2]);//bumpMapIndex);
GLES20.glUniform1i(t2, 1);

GLES20.glActiveTexture(GLES20.GL_TEXTURE0);//added this, it allows me to pass 2 textures to the shaders, otherwise TEXTURE1 is black

//fragment shader

precision mediump float;

uniform sampler2D u_bumptex;
uniform sampler2D u_texture;

varying vec2 v_texCoord;

void main()
{
    vec4 bumpColor = texture2D(u_bumptex, v_texCoord);//v_bumpCoord);// get bump map color, just use green channel for brightness

    gl_FragColor = texture2D(u_texture, v_texCoord) * bumpColor.g;
}
...