2016-07-11 19 views
0

私は、GL_TEXTURE_RECTANGLE_ARBに限られており、ミップマッピングをサポートしていないIOSurfaceに基づいたテクスチャを持っています。このテクスチャをGL_TEXTURE_2Dにバインドされた別のテクスチャにコピーして、その代わりにそのミップマップを実行しようとしています。しかし、私は自分のテクスチャをコピーする際に問題があります。私はそれを別のGL_TEXTURE_RECTANGLE_ARBにコピーするだけで作業することさえできません。ここに私のコードは次のとおりです。あなたの第二glFramebufferTexture2D()あるターゲットから別のターゲットに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

引数はあなたの説明と一致しません:あなたは第二テクスチャがGL_TEXTURE_2Dであることを言っているので

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

、これはによって一致する必要がありますtextarget呼び出しの引数。それは次のようになります。

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

はところで、​​は、OpenGL 3.1で標準と後でので、ARBのフォームを使用する必要はありません。

+0

私の最終目標はGL_TEXTURE_2Dですが、どちらも機能しません。だから私は別のGL_TEXTURE_RECTANGLE_ARBにコピーするだけに戻っていますが、どちらもうまくいきません。だから私は迷っている。 テクスチャがこのようにしか表現できないIOSurfaceに由来するため、元のターゲットはGL_TEXTURE_RECTANGLE_ARBである必要があります。 – Oskar

関連する問題