void WebGLFramebuffer::FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum rbtarget, WebGLRenderbuffer* wrb) { MOZ_ASSERT(mContext->mBoundFramebuffer == this); if (!mContext->ValidateObjectAllowNull("framebufferRenderbuffer: renderbuffer", wrb)) return; if (target != LOCAL_GL_FRAMEBUFFER) return mContext->ErrorInvalidEnumInfo("framebufferRenderbuffer: target", target); if (rbtarget != LOCAL_GL_RENDERBUFFER) return mContext->ErrorInvalidEnumInfo("framebufferRenderbuffer: renderbuffer target:", rbtarget); /* Get the requested attachment. If result is NULL, attachment is * invalid and an error is generated. * * Don't use GetAttachment(...) here because it opt builds it * returns mColorAttachment[0] for invalid attachment, which we * really don't want to mess with. */ Attachment* a = GetAttachmentOrNull(attachment); if (!a) return; // Error generated internally to GetAttachmentOrNull. /* Invalidate cached framebuffer status and inform texture of it's * new attachment */ mStatus = 0; // Detach current if (a->Texture()) a->Texture()->DetachFrom(this, attachment); else if (a->Renderbuffer()) a->Renderbuffer()->DetachFrom(this, attachment); // Attach new if (wrb) wrb->AttachTo(this, attachment); a->SetRenderbuffer(wrb); }
void WebGLFramebuffer::FramebufferRenderbuffer(FBAttachment attachPoint, RBTarget rbtarget, WebGLRenderbuffer* rb) { MOZ_ASSERT(mContext->mBoundDrawFramebuffer == this || mContext->mBoundReadFramebuffer == this); if (!mContext->ValidateObjectAllowNull("framebufferRenderbuffer: renderbuffer", rb)) { return; } /* Get the requested attachment. If result is NULL, attachment is invalid * and an error is generated. * * Don't use GetAttachment(...) here because it opt builds it returns * mColorAttachment[0] for invalid attachment, which we really don't want to * mess with. */ Attachment* attachment = GetAttachmentOrNull(attachPoint); if (!attachment) return; // Error generated internally to GetAttachmentOrNull. // Invalidate cached framebuffer status and inform texture of its new // attachment. mStatus = 0; // Detach current: if (attachment->Texture()) attachment->Texture()->DetachFrom(this, attachPoint); else if (attachment->Renderbuffer()) attachment->Renderbuffer()->DetachFrom(this, attachPoint); // Attach new: if (rb) rb->AttachTo(this, attachPoint); attachment->SetRenderbuffer(rb); }