使用intel hd 3000对opentk c#进行深度纹理和fbo问题

时间:2013-02-21 10:10:35

标签: c# opengl opentk fbo depth-buffer

我目前面临着使用intel hd图形硬件来实现阴影贴图效果的问题。我认为代码与我想要的结果相差甚远,因为此代码段在ATI Mobility Radeon 5650和Nvidia NVS 4200M上运行良好,但不适用于Intel HD 3000和4000。 / p>

    GL.GenTextures(1, out ShadowMap);
    GL.BindTexture(TextureTarget.Texture2D, ShadowMap);
    GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
    GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); 
    GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Clamp);
    GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Clamp);
    GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureCompareFunc, (int)All.Lequal);
    GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent32, SHADOW_MAP_SIZE, SHADOW_MAP_SIZE, 0, OpenTK.Graphics.OpenGL.PixelFormat.DepthComponent, PixelType.Float, IntPtr.Zero);

    GL.BindTexture(TextureTarget.Texture2D, 0);

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

    DrawBuffersEnum dbe = DrawBuffersEnum.None;
    GL.DrawBuffers(0, ref dbe);

    GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, TextureTarget.Texture2D, ShadowMap, 0);


    FramebufferErrorCode status = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer);

    GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);

"状态"变量表示FramebufferIncompletReadBuffer,因此使用此fbo不正确(从轻型POV渲染场景)。 我一直在网上看到这种状态,我没有找到解决问题的答案。 那么我在这个片段上做错了什么和/或这个FBO问题的起源是什么。 提前致谢。 PS:在着色器中我使用的是1.2版本,我应该将ShadowMap纹理作为深度贴图进行采样。

1 个答案:

答案 0 :(得分:0)

对于遇到样本问题的人, 它只是更新了最新的驱动程序,我在问我的问题之前想到了这一点,但Windows 7告诉我,我有最新的驱动程序(这是假的)。

相关问题