2013-03-15 50 views
0

我對OpenGL非常陌生,我試圖創建2通道着色器。基本上,它有兩個幀緩衝區和兩個着色器程序。它像往常一樣運行第一遍,然後我需要把結果紋理作爲輸入傳遞給第二個着色器。這是如何完成的?我似乎無法看到你如何拍攝最終紋理並將其用作下一個紋理的輸入?OpenGL將紋理傳遞給下一個渲染

下面是一些代碼:此代碼假定我已經設置了第二過濾器程序,並在程序中的某些屬性,制服正確

@Override 
public void onDraw(final int textureId, final FloatBuffer cubeBuffer,final FloatBuffer textureBuffer){ 
    //this draws the first pass (this is tested and working) 
    super.onDraw(textureId, cubeBuffer, textureBuffer); 


    //change the program 
    GLES20.glUseProgram(secondFilterProgram); 

    //clear the old colors 
    GLES20.glClearColor(0, 0, 0, 1); 
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); 



    GLES20.glActiveTexture(GLES20.GL_TEXTURE3); //change the texture 
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, secondFilterOutputTexture[0]); 
    GLES20.glUniform1i(secondFilterInputTextureUniform, 3); 


    cubeBuffer.position(0); 
    GLES20.glVertexAttribPointer(secondFilterPositionAttribute, 2, GLES20.GL_FLOAT, false, 0, cubeBuffer); 
    GLES20.glEnableVertexAttribArray(secondFilterPositionAttribute); 

    textureBuffer.position(0); 
    GLES20.glVertexAttribPointer(secondFilterTextureCoordinateAttribute, 2, GLES20.GL_FLOAT, false, 0, textureBuffer); 
    GLES20.glEnableVertexAttribArray(secondFilterTextureCoordinateAttribute); //same as line from init 

    GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); 
    GLES20.glDisableVertexAttribArray(secondFilterPositionAttribute); 
    GLES20.glDisableVertexAttribArray(secondFilterTextureCoordinateAttribute); 
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); 

    GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); 

} 

我覺得我在這裏缺少一塊拼圖。同樣,我是很新的OpenGL的,所以任何幫助,甚至在概念上理解

回答