2015-08-31 1 views
0

J'essaie de rendre une scène 3D à un multi-échantillon FBO. Je création avec le code suivant OIR OIR:Multi-échantillonnage OpenGL FBO

GLuint fbo, vtex, depthbuffer; 
glGenTextures(1, &vtex); GLCHECK(); 
glBindTexture(vtarget, vtex); GLCHECK(); 
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples /*=4*/, GL_RGBA, width, height, false); GLCHECK(); 
glBindTexture(vtarget, 0); GLCHECK(); 

glGenRenderbuffers(1, &depthbuffer); GLCHECK(); 
glBindRenderbuffer(GL_RENDERBUFFER, depthbuffer); GLCHECK(); 
glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples/*=4*/, GL_DEPTH_COMPONENT32, width, height); GLCHECK(); 
glBindRenderbuffer(GL_RENDERBUFFER, 0); GLCHECK(); 

glGenFramebuffers(1, &fbo);GLCHECK(); 
glBindFramebuffer(GL_FRAMEBUFFER, fbo);GLCHECK(); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthbuffer); GLCHECK(); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, vtex, 0); GLCHECK(); 

if ((status = glCheckFramebufferStatus(GL_FRAMEBUFFER)) != GL_FRAMEBUFFER_COMPLETE) 
{ 
    fprintf(stderr, "Can't allocate frame buffer! Status: 0x%x\n", status); 
    assert(0); 
} 
glBindFramebuffer(GL_FRAMEBUFFER, 0); GLCHECK(); 

et je reçois GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE d'erreur. Qu'est-ce que je fais mal?

A avoir lu this rubrique, documentation FBO, mais cela n'aide pas.

Je peux créer un FBO sans accessoire de profondeur. Mais dans ce cas, il ne fonctionne pas lorsque j'essaie de le bilt à l'écran:

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo); GLCHECK(); 
glReadBuffer(GL_COLOR_ATTACHMENT0); 

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); GLCHECK(); 
glDrawBuffer(GL_BACK); GLCHECK(); 

glBlitFramebuffer(0, 0, resolution.width, resolution.height, 0, 0, resolution.width, resolution.height, GL_COLOR_BUFFER_BIT, GL_NEAREST); GLCHECK(); 

glBindFramebuffer(GL_FRAMEBUFFER, 0); 

Aidez-moi s'il vous plaît.

Répondre

0

Vous devez spécifier fixe emplacements d'échantillonnage. par exemple. GL_TRUE pour le dernier paramètre de glTexImage2DMultisample. Vous pouvez lire sur les raisons de GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLEhere.