【问题标题】:Copy OpenGL texture from one target to another将 OpenGL 纹理从一个目标复制到另一个目标
【发布时间】:2016-11-13 09:01:00
【问题描述】:

我有一个 IOSurface 支持的纹理,它仅限于 GL_TEXTURE_RECTANGLE_ARB 并且不支持 mipmapping。我正在尝试将此纹理复制到绑定到 GL_TEXTURE_2D 的另一个纹理,然后在该纹理上执行 mipmapping。但是我在复制我的纹理时遇到了问题。我什至无法通过将其复制到另一个 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

【问题讨论】:

    标签: opengl textures framebuffer glkit iosurface


    【解决方案1】:

    您的第二个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)
    

    顺便说一句,GL_TEXTURE_RECTANGLE 在 OpenGL 3.1 及更高版本中是标准的,所以应该不需要使用 ARB 形式。

    【讨论】:

    • 我的最终目标是 GL_TEXTURE_2D,但这也不起作用。所以我恢复到简单地复制到另一个 GL_TEXTURE_RECTANGLE_ARB 并且这也不起作用。所以我很茫然。原始目标必须是 GL_TEXTURE_RECTANGLE_ARB,因为纹理来自只能以这种方式表示的 IOSurface。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2021-08-12
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多