OpenGL-render to texture - schwarz-Bildschirm

Ich bin Rendern einer frame-buffer, und dann will ich zu verwenden, als eine textur.

Kann ich das speichern der frame-buffer in eine Datei mit glReadPixels so bin ich mir sicher, dass ich das rendering OK.

Kann ich binden zu Feste textur und render das OK.

Aber ich kann nicht binden, um den frame-buffer zu Rendern, dass an die Stelle der festen textur.

 //setup:
 private void setupRenderToTexture() {
    fb = new int[numberOfBuffers];
    depthRb = new int[numberOfBuffers];
    renderTex = new int[numberOfBuffers];
    texBuffer = new IntBuffer[numberOfBuffers];

    //generate
    GLES20.glGenFramebuffers(fb.length, fb, 0);
    GLES20.glGenRenderbuffers(depthRb.length, depthRb, 0);
    GLES20.glGenTextures(renderTex.length, renderTex, 0);

    GLErrorHandler.checkGlError("glGenFramebuffers");

    for (int i = 0; i < fb.length; i++) {
        GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[i]);

        //generate color texture
        GLState.Instance.bindTexture(0, renderTex[i]);

        //parameters
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,
        //GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
                GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,
        //GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
                GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,
                GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,
                GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);

        //create it
        //create an empty intbuffer first?
        int[] fileData = new int[width * height];
        texBuffer[i] = IntBuffer.wrap(fileData);
        GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width,
                height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE,
                texBuffer[i]);

        GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D,
                renderTex[i], 0);

        //create render buffer and bind 16-bit depth buffer
        GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, depthRb[i]);
        GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER,
                GLES20.GL_DEPTH_COMPONENT16, width, height);
        GLErrorHandler.checkGlError("glRenderbufferStorage or above");
    }


    GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
}

Verwenden Sie den frame-buffer:

GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[0]);

Speichern der frame-buffer (zum testen):

GLES20.glReadPixels(sourceX, sourceY, width, height, GL10.GL_RGBA,  
GL10.GL_UNSIGNED_BYTE, ib);

Dann auf render to screen:

GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[0]);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture); //some simple texture works but:
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTex[0]); //frame buffer texture does not work

Alles was ich bekomme ist ein schwarzer Bildschirm, wenn ich binden renderTex[0]

  • Vielleicht ist Ihr problem ist ähnlich wie das one
  • Nicht helfen, danke dir aber!
InformationsquelleAutor weston | 2012-10-19
Schreibe einen Kommentar