2016-07-11 9 views
0

У меня есть текстура с поддержкой IOSurface, которая ограничена GL_TEXTURE_RECTANGLE_ARB и не поддерживает mipmapping. Я пытаюсь скопировать эту текстуру в другую текстуру, привязанную к GL_TEXTURE_2D, а затем выполнить mipmapping на этом. Но у меня проблемы с копированием моей текстуры. Я даже не могу заставить его работать, просто скопировав его на другой GL_TEXTURE_RECTANGLE_ARB. Вот мой код:Скопировать текстуру OpenGL с одной цели на другую

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 

ответ

0

Аргументы вашей второй glFramebufferTexture2D() не соответствуют вашему описанию:

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

Так вы говорите, что вторая текстура является GL_TEXTURE_2D, это должно сопровождаться textarget аргумент вызова. Оно должно быть:

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

BTW, GL_TEXTURE_RECTANGLE является стандартом OpenGL 3.1 и позже, так что не должно быть никакой необходимости использовать форму ARB.

+0

Моя конечная цель - GL_TEXTURE_2D, но это тоже не работает. Поэтому я возвращаюсь к простому копированию в другой GL_TEXTURE_RECTANGLE_ARB, и это тоже не работает. Поэтому я в недоумении. Первоначальная цель должна быть GL_TEXTURE_RECTANGLE_ARB, потому что текстура от IOSurface, которая может быть представлена ​​только таким образом. – Oskar