예제 #1
0
파일: IGL_TK.cs 프로젝트: Asnivor/BizHawk
        public unsafe RenderTarget CreateRenderTarget(int w, int h)
        {
            //create a texture for it
            int       texid = GenTexture();
            Texture2d tex   = new Texture2d(this, texid, w, h);

            GL.BindTexture(TextureTarget.Texture2D, texid);
            GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba8, w, h, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
            tex.SetMagFilter(TextureMagFilter.Nearest);
            tex.SetMinFilter(TextureMinFilter.Nearest);

            //create the FBO
            int fbid = GL.Ext.GenFramebuffer();

            GL.Ext.BindFramebuffer(FramebufferTarget.Framebuffer, fbid);

            //bind the tex to the FBO
            GL.Ext.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, texid, 0);

            //do something, I guess say which colorbuffers are used by the framebuffer
            DrawBuffersEnum *buffers = stackalloc DrawBuffersEnum[1];

            buffers[0] = DrawBuffersEnum.ColorAttachment0;
            GL.DrawBuffers(1, buffers);

            if (GL.Ext.CheckFramebufferStatus(FramebufferTarget.Framebuffer) != FramebufferErrorCode.FramebufferComplete)
            {
                throw new InvalidOperationException("Error creating framebuffer (at CheckFramebufferStatus)");
            }

            //since we're done configuring unbind this framebuffer, to return to the default
            GL.Ext.BindFramebuffer(FramebufferTarget.Framebuffer, 0);

            return(new RenderTarget(this, fbid, tex));
        }
예제 #2
0
 public static void glDrawBuffers(uint n, DrawBuffersEnum *bufs) => p_glDrawBuffers(n, bufs);