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)); }
public static void glDrawBuffers(uint n, DrawBuffersEnum *bufs) => p_glDrawBuffers(n, bufs);