Активация / использование GL_TEXTURE1 в OpenGL ES 2.0 для Android

Я пытаюсь использовать текстурный блок GL_TEXTURE1, чтобы нарисовать простую форму. Я знаю, как нарисовать его, используя стандарт GL_TEXTURE0, но при его изменении что-то не работает.

Я думал, что из моего кода ниже, я просто должен был изменить следующее:

glActiveTexture(GL_TEXTURE1);
glUniform1i(uTextureLocation, 1);

Что мне не хватает?

Код:

public class RendererClass implements Renderer {

Context context;

FloatBuffer verticesInBuffer;

int aPositionLocation;
int aTextureLocation;
int uTextureLocation;

int program;

public RendererClass(Context context){
    this.context = context;
}

@Override
public void onSurfaceCreated(GL10 arg0, EGLConfig config) {

    GLES20.glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

    float[] vertices = {

            -0.5f, 0.5f, 0.5f, 0.5f,
            -1.0f, 0.0f, 0.0f, 0.0f,
             0.0f, 0.0f, 1.0f, 0.0f,
             0.0f, 1.0f, 1.0f, 1.0f,
            -1.0f, 1.0f, 0.0f, 1.0f,
            -1.0f, 0.0f, 0.0f, 0.0f  

    };

    verticesInBuffer = ByteBuffer.allocateDirect(vertices.length*4).order(ByteOrder.nativeOrder()).asFloatBuffer().put(vertices);

    String vss = "attribute vec4 a_Position;" +
                 "attribute vec2 a_Texture;" +
                 "varying vec2 v_Texture;" +
                 "void main(){" +
                 "    v_Texture = a_Texture;" +
                 "    gl_Position = a_Position;" +
                 "}";

    String fss = "precision mediump float;" +
                 "varying vec2 v_Texture;" +
                 "uniform sampler2D u_Texture;" +
                 "void main(){" +
                 "    gl_FragColor = texture2D(u_Texture, v_Texture);" +
                 "}";

    int vs = glCreateShader(GL_VERTEX_SHADER);
    int fs = glCreateShader(GL_FRAGMENT_SHADER);

    glShaderSource(vs, vss);
    glShaderSource(fs, fss);

    glCompileShader(vs);
    glCompileShader(fs);

    program = glCreateProgram();

    glAttachShader(program, vs);
    glAttachShader(program, fs);

    glLinkProgram(program);

    aPositionLocation = glGetAttribLocation(program, "a_Position");


    // ***** Texture stuff starts here   </</</</


    // Fase 1
    glActiveTexture(GL_TEXTURE0);

    int[] genTextures = new int[1];
    glGenTextures(1, genTextures, 0);

    glBindTexture(GL_TEXTURE_2D, genTextures[0]);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);


    // Fase 2
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inScaled = false;

    Bitmap bitmap1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.res_for_test_1, options);


    // Fase 3
    texImage2D(GL_TEXTURE_2D, 0, bitmap1, 0);
    glGenerateMipmap(GL_TEXTURE_2D);    


    // Fase 4
    aTextureLocation = glGetAttribLocation(program, "a_Texture");
    uTextureLocation = glGetUniformLocation(program, "u_Texture");

    glUniform1i(uTextureLocation, 0);

    verticesInBuffer.position(2);
    glEnableVertexAttribArray(aTextureLocation);
    glVertexAttribPointer(aTextureLocation, 2, GL_FLOAT, false, 16, verticesInBuffer);


 // ***** Texture stuff ends here   </</</</


}

@Override
public void onSurfaceChanged(GL10 arg0, int width, int height) {

    GLES20.glViewport(0, 0, width, height);

}

@Override
public void onDrawFrame(GL10 glUnused) {

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

    glUseProgram(program);

    verticesInBuffer.position(0);
    glEnableVertexAttribArray(aPositionLocation);
    glVertexAttribPointer(aPositionLocation, 2, GL_FLOAT, false, 16, verticesInBuffer);

    glDrawArrays(GL_TRIANGLE_FAN, 0, 6);

}

}

Ответы на вопрос(1)

Ваш ответ на вопрос