Example #1
0
        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);
        }
Example #2
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);
        }
Example #3
0
 public TextureAttachment(Texture t, AttachmentUsage a)
 {
     tex = t;
     au = a;
 }
Example #4
0
        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);
        }