2016-07-11 16 views
0

Ich habe eine IOSurface-Backed-Textur, die auf GL_TEXTURE_RECTANGLE_ARB beschränkt ist und Mipmapping nicht unterstützt. Ich versuche, diese Textur in eine andere Textur zu kopieren, die an GL_TEXTURE_2D gebunden ist, und führe dann stattdessen ein Mipmapping durch. Aber ich habe Probleme, meine Textur zu kopieren. Ich kann es nicht einmal zum Laufen bringen, indem ich es einfach in ein anderes GL_TEXTURE_RECTANGLE_ARB kopiere. Hier ist mein Code:OpenGL-Textur von einem Ziel in ein anderes kopieren

var arbTexture = GLuint() 
    glGenTextures(1, &arbTexture) 

    /* Do some stuff to fill arbTexture with image data */ 

    glEnable(GLenum(GL_TEXTURE_RECTANGLE_ARB)) 
    glBindTexture(GLenum(GL_TEXTURE_RECTANGLE_ARB), arbTexture) 
    // At this point, if I return here, my arbTexture draws just fine 

    // Trying to copy to another texture (fbo and texture generated previously): 
    glBindFramebuffer(GLenum(GL_FRAMEBUFFER), fbo); 
    glFramebufferTexture2D(GLenum(GL_READ_FRAMEBUFFER), GLenum(GL_COLOR_ATTACHMENT0), GLenum(GL_TEXTURE_RECTANGLE_ARB), arbTexture, 0) 
    glFramebufferTexture2D(GLenum(GL_DRAW_FRAMEBUFFER), GLenum(GL_COLOR_ATTACHMENT1), GLenum(GL_TEXTURE_RECTANGLE_ARB), texture, 0) 
    glDrawBuffer(GLenum(GL_COLOR_ATTACHMENT1)) 
    glBlitFramebuffer(0, 0, GLsizei(width), GLsizei(height), 0, 0, GLsizei(width), GLsizei(height), GLbitfield(GL_COLOR_BUFFER_BIT) 
     , GLenum(GL_NEAREST)) 
    glBindTexture(GLenum(GL_TEXTURE_RECTANGLE_ARB), texture) 
    // At this point, the texture is all black 

Antwort

0

Die Argumente des zweiten glFramebufferTexture2D() nicht Ihre Beschreibung entsprechen:

glFramebufferTexture2D(
    GLenum(GL_DRAW_FRAMEBUFFER), GLenum(GL_COLOR_ATTACHMENT1), 
    GLenum(GL_TEXTURE_RECTANGLE_ARB), texture, 0) 

Da Sie sagen, dass die zweite Textur ist ein GL_TEXTURE_2D, muss dies durch abgestimmt werden das textarget Argument des Anrufs. Es sollte sein:

glFramebufferTexture2D(
    GLenum(GL_DRAW_FRAMEBUFFER), GLenum(GL_COLOR_ATTACHMENT1), 
    GLenum(GL_TEXTURE_2D), texture, 0) 

BTW, GL_TEXTURE_RECTANGLE in OpenGL 3.1-Standard ist und später, so sollte es keine Notwendigkeit, die ARB Form zu verwenden.

+0

Mein Endziel ist ein GL_TEXTURE_2D, aber das funktioniert auch nicht. Ich werde also einfach zu einem anderen GL_TEXTURE_RECTANGLE_ARB kopieren und das funktioniert auch nicht. Also bin ich ratlos. Das ursprüngliche Ziel muss GL_TEXTURE_RECTANGLE_ARB sein, da die Textur von einer IOS-Oberfläche stammt, die nur auf diese Weise dargestellt werden kann. – Oskar

Verwandte Themen