2016-05-25 10 views
1

私は同時にマルチサンプルとシングルサンプリングのテクスチャにレンダリングしようとしています(drawcall)。 なぜ私はそれをしたいですか?マルチサンプリングテクスチャはアンチエイリアシングを使用していますが、シングルサンプリングテクスチャはカラーピッキングに使用されているためです。 両方のテクスチャ(nRenderTargetTextureとnColorPickingTexture)は同じサイズです。 以下のコードを実行すると、GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLEのケースで失敗します。 マルチサンプリングされたテクスチャとシングルサンプリングされたテクスチャを同時にレンダリングすることは可能ですか?フレームバッファ内でマルチサンプルとシングルサンプリングのテクスチャをレンダリング

ところで:私もglGetError()を使用していますが、それはGL_NO_ERROR

// Enable multisampling 
glEnable(GL_MULTISAMPLE); 

glGenFramebuffers(1, pFramebufferID); 
glBindFramebuffer(GL_FRAMEBUFFER, *pFramebufferID); 

// Create color render buffer 
glGenRenderbuffers(1, &nColorBuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, nColorBuffer); 
glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_RGBA8, nWidth, nHeight); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, nColorBuffer); 

// Create depth render buffer 
glGenRenderbuffers(1, &nDepthBuffer); 
glBindRenderbuffer(GL_RENDERBUFFER, nDepthBuffer); 
glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_DEPTH24_STENCIL8, nWidth, nHeight); 

//Attach the multisampled textures 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, nDepthBuffer); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, nDepthBuffer); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, nRenderTargetTexture, 0); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, nColorPickingTexture, 0); 
const GLenum draw_buffers[] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1}; 

glDrawBuffers(2, draw_buffers); 

GLenum eFramebufferOk = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER); 

bool bResult = false; 
switch (eFramebufferOk) 
{ 
    case GL_FRAMEBUFFER_UNDEFINED: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
    case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
    case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
    case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
    case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
    case GL_FRAMEBUFFER_UNSUPPORTED: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
    case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
    case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
    case GL_FRAMEBUFFER_COMPLETE: 
    { 
     bResult = true; 
    } 
    break; 
    default: 
    { 
     DebugAssertOnce(CREATE_FRAME_BUFFER_FAILED); 
    } 
    break; 
} 

どうもありがとうを返します!

答えて

1

マルチサンプリングされたシングルサンプリングされたテクスチャを同時にレンダリングすることは可能ですか?

いいえフレームバッファに接続されているすべての画像のサンプル数は同じでなければなりません。それ以外の場合はGL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLEとなります。

0

btw:シェーダコールでアンチエイリアスとピッキングを使用するには、マルチサンプリングピッキングテクスチャを使用します。私は私のシーンをレンダリング 後、私は第二renderstepp(オーバー画面2の三角形)を行うと、fragmentshader内で私が使用:それはないantialiasiedピックテクスチャーを私に戻っています

texelFetch(pickingTexture,ivec2(position),0); //0 sample 

。 誰かが同じことを試みているかもしれないので、私はこの投稿を書いた。

関連する問題