2017-06-18 1 views
1

マルチサンプルテクスチャを使用するようにレンダリングエンジンを変更しましたが、デプステストは無視されます。ここでマルチサンプルFBOがデプステストを無視しています

は、私は、マルチサンプルFBOを作成してい

public MSAA_FBO(int WindowWidth, int WindowHeight) 
{ 
    this.width = WindowWidth; 
    this.height = WindowHeight; 

    GL.GenFramebuffers(1, out ID); 
    GL.BindFramebuffer(FramebufferTarget.Framebuffer, ID); 

    // Colour texture 
    GL.GenTextures(1, out textureColorBufferMultiSampled); 
    GL.BindTexture(TextureTarget.Texture2DMultisample, textureColorBufferMultiSampled); 
    GL.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.Rgb8, WindowWidth, WindowHeight, true); 
    GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2DMultisample, textureColorBufferMultiSampled, 0); 

    // Depth render buffer 
    GL.GenRenderbuffers(1, out RBO); 
    GL.BindRenderbuffer(RenderbufferTarget.RenderbufferExt, RBO); 
    GL.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, 4, RenderbufferStorage.DepthComponent, WindowWidth, WindowHeight); 
    GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, 0); 

    var status = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer); 
    Console.WriteLine("MSAA: " + status); 
    GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); 
}  

は決意を行い、

public void resolveToFBO(FBO outputFBO) 
{ 
    GL.BindFramebuffer(FramebufferTarget.DrawFramebuffer, outputFBO.ID); 
    GL.BindFramebuffer(FramebufferTarget.ReadFramebuffer, this.ID); 
    GL.BlitFramebuffer(0, 0, this.width, this.height, 0, 0, outputFBO.width, outputFBO.height, ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit, BlitFramebufferFilter.Nearest);  
} 

や画像をレンダリングする方法です、

public void MSAAPass(Shader shader) 
{ 
    GL.UseProgram(shader.ID); 
    GL.BindFramebuffer(FramebufferTarget.Framebuffer, MSAAbuffer.ID); 
    GL.Viewport(0, 0, Width, Height); 

    GL.Enable(EnableCap.Multisample); 
    GL.ClearColor(System.Drawing.Color.Black); 
    GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); 
    GL.Enable(EnableCap.DepthTest); 
    GL.Disable(EnableCap.Blend); 

    // Uniforms 
    Matrix4 viewMatrix = player.GetViewMatrix(); 
    GL.UniformMatrix4(shader.getUniformID("viewMatrix"), false, ref viewMatrix); 

    // Draw all geometry 
    DrawScene(shader); 

    GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); 
    MSAAbuffer.resolveToFBO(testBuffer); 
} 
+1

これを閉じるために投票した人は、_simple typographical error_はばかだ。 – MickyD

答えて

4

あなたのマルチサンプリングFBOはありません。デプスバッファーなので、デプステストは機能しません。 GL_DEPTH_COMPONENT形式のマルチサンプルレンダバッファーを実際に作成したにもかかわらず、この1つをFBOのGL_DEPTH_ATTACHMENTとして添付するのを忘れました。 MSAA_FBO()機能でglFramebufferRenderbuffer()コールを追加する必要があります。

+0

Ahh right!ありがとうございました。 –

関連する問題