private void CreateFramebuffer() { this.glControl.MakeCurrent(); if (this.framebufferId > 0) { GL.DeleteFramebuffer(this.framebufferId); } if (this.depthbufferId > 0) { GL.DeleteRenderbuffer(this.depthbufferId); } if (this.colorbufferId > 0) { GL.DeleteRenderbuffer(this.colorbufferId); } this.framebufferId = GL.GenFramebuffer(); GL.BindFramebuffer(FramebufferTarget.Framebuffer, this.framebufferId); this.colorbufferId = GL.GenRenderbuffer(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, this.colorbufferId); GL.RenderbufferStorage( RenderbufferTarget.Renderbuffer, RenderbufferStorage.Rgba8, this.size.Width, this.size.Height); GL.FramebufferRenderbuffer( FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, RenderbufferTarget.Renderbuffer, this.colorbufferId); this.depthbufferId = GL.GenRenderbuffer(); GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, this.depthbufferId); GL.RenderbufferStorage( RenderbufferTarget.Renderbuffer, RenderbufferStorage.DepthComponent24, this.size.Width, this.size.Height); GL.FramebufferRenderbuffer( FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, RenderbufferTarget.Renderbuffer, this.depthbufferId); FramebufferErrorCode error = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer); if (error != FramebufferErrorCode.FramebufferComplete) { throw new Exception(); } this.loaded = true; }
private void CreateFramebuffer() { this.glControl.MakeCurrent(); if (this.framebufferId > 0) { OpenTK.Graphics.OpenGL.GL.DeleteFramebuffer(this.framebufferId); } if (this.depthbufferId > 0) { OpenTK.Graphics.OpenGL.GL.DeleteRenderbuffer(this.depthbufferId); } if (this.textureId > 0) { OpenTK.Graphics.OpenGL.GL.DeleteTexture(this.textureId); } this.textureId = OpenTK.Graphics.OpenGL.GL.GenTexture(); OpenTK.Graphics.OpenGL.GL.BindTexture(OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, this.textureId); OpenTK.Graphics.OpenGL.GL.TexParameter(OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, OpenTK.Graphics.OpenGL.TextureParameterName.TextureWrapS, (int)OpenTK.Graphics.OpenGL.TextureWrapMode.Repeat); OpenTK.Graphics.OpenGL.GL.TexParameter(OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, OpenTK.Graphics.OpenGL.TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat); OpenTK.Graphics.OpenGL.GL.TexParameter( OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, OpenTK.Graphics.OpenGL.TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); OpenTK.Graphics.OpenGL.GL.TexParameter( OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); OpenTK.Graphics.OpenGL.GL.TexImage2D( OpenTK.Graphics.OpenGL.TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb8, this.size.Width, this.size.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); this.framebufferId = OpenTK.Graphics.OpenGL.GL.GenFramebuffer(); OpenTK.Graphics.OpenGL.GL.BindFramebuffer(OpenTK.Graphics.OpenGL.FramebufferTarget.Framebuffer, this.framebufferId); OpenTK.Graphics.OpenGL.GL.FramebufferTexture2D( OpenTK.Graphics.OpenGL.FramebufferTarget.Framebuffer, OpenTK.Graphics.OpenGL.FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, this.textureId, 0); this.depthbufferId = OpenTK.Graphics.OpenGL.GL.GenRenderbuffer(); OpenTK.Graphics.OpenGL.GL.BindRenderbuffer(OpenTK.Graphics.OpenGL.RenderbufferTarget.Renderbuffer, this.depthbufferId); OpenTK.Graphics.OpenGL.GL.RenderbufferStorage( OpenTK.Graphics.OpenGL.RenderbufferTarget.Renderbuffer, RenderbufferStorage.DepthComponent24, this.size.Width, this.size.Height); OpenTK.Graphics.OpenGL.GL.FramebufferRenderbuffer( OpenTK.Graphics.OpenGL.FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, RenderbufferTarget.Renderbuffer, this.depthbufferId); OpenTK.Graphics.OpenGL.FramebufferErrorCode error = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer); if (error != FramebufferErrorCode.FramebufferComplete) { throw new Exception(); } this.loaded = true; }