2

GL_TEXTURE_RECTANGLE_ARB に限定され、ミップマッピングをサポートしない IOSurface でサポートされたテクスチャがあります。このテクスチャを GL_TEXTURE_2D にバインドされた別のテクスチャにコピーし、代わりにそのテクスチャでミップマッピングを実行しようとしています。しかし、テクスチャのコピーに問題があります。別のGL_TEXTURE_RECTANGLE_ARBにコピーするだけでは機能しません。これが私のコードです:

    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
4

1 に答える 1

0

2 番目の引数がglFramebufferTexture2D()説明と一致しません:

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

2 番目のテクスチャが であると言っているので、これは呼び出しのtextarget引数GL_TEXTURE_2Dと一致する必要があります。そのはず:

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

ところで、GL_TEXTURE_RECTANGLEOpenGL 3.1 以降では標準なので、ARB 形式を使用する必要はありません。

于 2016-07-12T04:39:18.910 に答える