Example #1
0
        private void SetupNonMultisampled()
        {
            // Generate FBO
            if (this.handleMainFBO == 0)
            {
                GL.GenFramebuffers(1, out this.handleMainFBO);
            }
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, this.handleMainFBO);

            // Attach textures
            int oglWidth  = 0;
            int oglHeight = 0;

            for (int i = 0; i < this.targetInfos.Count; i++)
            {
                NativeTexture tex = this.targetInfos[i].Target;

                FramebufferSlot attachment = (FramebufferSlot)((int)FramebufferSlot.ColorAttachment0 + i);
                GL.FramebufferTexture2D(
                    FramebufferTarget.Framebuffer,
                    attachment,
                    TextureTarget.Texture2D,
                    tex.Handle,
                    0);
                oglWidth  = tex.Width;
                oglHeight = tex.Height;
            }

            // Generate or delete depth renderbuffer
            if (this.depthBuffer)
            {
                if (this.handleDepthRBO == 0)
                {
                    GL.GenRenderbuffers(1, out this.handleDepthRBO);
                }
                GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, this.handleDepthRBO);
                GL.RenderbufferStorage(RenderbufferTarget.Renderbuffer, RenderbufferInternalFormat.DepthComponent24, oglWidth, oglHeight);
                GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferSlot.DepthAttachment, RenderbufferTarget.Renderbuffer, this.handleDepthRBO);
            }
            else
            {
                GL.FramebufferRenderbuffer(FramebufferTarget.Framebuffer, FramebufferSlot.DepthAttachment, RenderbufferTarget.Renderbuffer, 0);
                if (this.handleDepthRBO != 0)
                {
                    GL.DeleteRenderbuffers(1, ref this.handleDepthRBO);
                }
                this.handleDepthRBO = 0;
            }

            // Check status
            FramebufferErrorCode status = GL.CheckFramebufferStatus(FramebufferTarget.Framebuffer);

            if (status != FramebufferErrorCode.FramebufferComplete)
            {
                throw new BackendException(string.Format("Incomplete Framebuffer: {0}", status));
            }

            GL.BindRenderbuffer(RenderbufferTarget.Renderbuffer, 0);
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
        }
Example #2
0
		void DeleteFBOAttachment(FramebufferSlot attachment)
		{    
		    int param = 0;
		    int objName = 0;
			
		    GL.GetFramebufferAttachmentParameter(FramebufferTarget.Framebuffer, attachment,
		                                          FramebufferParameterName.FramebufferAttachmentObjectType,
		                                          out param);
			
		    if((int)RenderbufferTarget.Renderbuffer == param)
		    {
		        GL.GetFramebufferAttachmentParameter(FramebufferTarget.Framebuffer, attachment,
		                                              FramebufferParameterName.FramebufferAttachmentObjectName,
		                                              out param);
				
		        objName = param;
		        GL.DeleteRenderbuffers(1, ref objName);
		    }
		    else if((int)All.Texture == param)
		    {
		        
		        GL.GetFramebufferAttachmentParameter(FramebufferTarget.Framebuffer, attachment,
		                                              FramebufferParameterName.FramebufferAttachmentObjectName,
		                                              out param);
				
		        objName = param;
		        GL.DeleteTextures(1, ref objName);
		    }
		    
		}