示例#1
0
        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;
        }
示例#2
0
        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;
        }