public void AddTexture(Texture2D tex, AttachmentUsage au) { if(!m_PrepareMode) GL.BindFramebuffer(FramebufferTarget.Framebuffer, ID); DeleteTexture(au, true); if((tex != null) && (tex.Created)) { tex.SetUseCount(tex.InternalUseCount + 1); m_Textures.Add(new TextureAttachment(tex, au)); GL.FramebufferTexture2D(FramebufferTarget.Framebuffer, (FramebufferAttachment)au, TextureTarget.Texture2D, tex.ID, 0); } if(!m_PrepareMode) GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }
public void UseAttachments(AttachmentUsage[] attachments) { if (!m_PrepareMode) GL.BindFramebuffer(FramebufferTarget.Framebuffer, ID); DrawBuffersEnum[] dbe = new DrawBuffersEnum[attachments.Length]; for (int i = 0; i < dbe.Length; i++) { if (attachments[i] == AttachmentUsage.DepthStencil) throw new ArgumentException(); dbe[i] = (DrawBuffersEnum)attachments[i]; } GL.DrawBuffers(attachments.Length, dbe); if(!m_PrepareMode) GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }
public TextureAttachment(Texture t, AttachmentUsage a) { tex = t; au = a; }
public void DeleteTexture(AttachmentUsage au, bool bound = false) { if(!(bound || m_PrepareMode)) GL.BindFramebuffer(FramebufferTarget.Framebuffer, ID); TextureAttachment tata = null; foreach(TextureAttachment ta in m_Textures) { if(ta.au == au) { tata = ta; ta.tex.SetUseCount(ta.tex.InternalUseCount - 1); GL.FramebufferTexture(FramebufferTarget.Framebuffer, (FramebufferAttachment)au, 0, 0); } } if (tata != null) m_Textures.Remove(tata); if (!(bound || m_PrepareMode)) GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }