FBStatus WebGLFramebuffer::PrecheckFramebufferStatus(nsCString* const out_info) const { MOZ_ASSERT(mContext->mBoundDrawFramebuffer == this || mContext->mBoundReadFramebuffer == this); if (!HasDefinedAttachments()) return LOCAL_GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; // No attachments if (HasIncompleteAttachments(out_info)) return LOCAL_GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; if (!mContext->IsWebGL2()) { // INCOMPLETE_DIMENSIONS doesn't exist in GLES3. if (!AllImageRectsMatch()) return LOCAL_GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS; // Inconsistent sizes const auto depthOrStencilCount = int(mDepthAttachment.IsDefined()) + int(mStencilAttachment.IsDefined()) + int(mDepthStencilAttachment.IsDefined()); if (depthOrStencilCount > 1) return LOCAL_GL_FRAMEBUFFER_UNSUPPORTED; } return LOCAL_GL_FRAMEBUFFER_COMPLETE; }
const WebGLRectangleObject& WebGLFramebuffer::RectangleObject() const { // If we're using this as the RectObj of an FB, we need to be sure the FB // has a consistent rect. MOZ_ASSERT(AllImageRectsMatch(), "Did you mean `GetAnyRectObject`?"); return GetAnyRectObject(); }
FBStatus WebGLFramebuffer::PrecheckFramebufferStatus() const { MOZ_ASSERT(mContext->mBoundDrawFramebuffer == this || mContext->mBoundReadFramebuffer == this); if (!HasDefinedAttachments()) return LOCAL_GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT; // No attachments if (HasIncompleteAttachments()) return LOCAL_GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; if (!AllImageRectsMatch()) return LOCAL_GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS; // Inconsistent sizes if (HasDepthStencilConflict()) return LOCAL_GL_FRAMEBUFFER_UNSUPPORTED; return LOCAL_GL_FRAMEBUFFER_COMPLETE; }