現在、Intel HD グラフィックス ハードウェアでシャドウ マッピング エフェクトを実装する際に問題に直面しています。このコード スニペットは ATI Mobility Radeon 5650 および Nvidia NVS 4200M では正常に動作しますが、Intel HD 3000 および 4000 では動作しないため、コードは結果として得たいものから遠く離れていないと思います。
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 からのシーンのレンダリング)。このステータスについて Web で確認しましたが、問題を解決する答えが見つかりませんでした。このスニペットで私が間違っていること、および/またはこのFBO問題の起源となる可能性があるもの. 前もって感謝します。PS: シェーダーではバージョン 1.2 を使用しており、ShadowMap テクスチャを深度マップとしてサンプリングすることになっています。