我試圖爲FBO啓用mutisampling和alpha-to-coverage。使用默認幀緩衝區,我所要做的就是撥打glEnable(GL_MULTISAMPLE)
和glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE)
。但是,我無法使用我自己的FBO達到同樣的效果。如何使用OpenGL FBO多重採樣
我的目標:將場景繪製到FBO的方式與使用上述屬性繪製到默認幀緩衝區的方式相同。從那裏我希望能夠將圖像用作未來穿過着色器的紋理。
這工作:代碼用於製造FBO沒有多重採樣/α-來覆蓋,1個附色,1個深度附件:
// Generate the color attachment
glGenTextures(1,&defaultColorAttachment0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,defaultColorAttachment0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,screenWidth,screenHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL);
// Bind the texture to the FBO
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, defaultColorAttachment0,0);
// Generate the depth attachment
glGenRenderbuffers(1,&defaultDepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, defaultDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, screenWidth, screenHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, defaultDepthBuffer);
這不起作用。代碼試圖使多重採樣FBO:
// Generate the color attachment
glGenTextures(1,&defaultColorAttachment0);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, defaultColorAttachment0);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA, screenWidth, screenHeight, GL_FALSE);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, defaultColorAttachment0,0);
// Generate the depth attachment
glGenRenderbuffers(1,&defaultDepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, defaultDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, screenWidth, screenHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, defaultDepthBuffer);
我試圖尋找通過這個OpenGL的維基,雖然它不完全(未完成各種標題,使它看起來不專業)。 glGetError
從不抱怨。我試過用這個來搞亂,但是我得到一個黑屏或者一個充滿垃圾像素的屏幕。
主要問題:我需要考慮/更改哪些內容以及爲了獲得多重採樣和alpha-to-coverage與FBO一起工作而在哪裏(FBO創建,紋理,着色器)?
你有沒有試過調用glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D_MULTISAMPLE,defaultColorAttachment0,0);而不是glFramebufferTexture(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,defaultColorAttachment0,0);? – Jherico
@Jherico是的,我仍然得到一個黑屏。 – GraphicsMuncher