bool vogl_default_framebuffer_state::deserialize(const json_node &node, const vogl_blob_manager &blob_manager)
{
    clear();

    if (!node.has_object("attribs"))
        return false;

    if (!m_fb_attribs.deserialize(*node.find_child_object("attribs")))
        return false;

    const json_node *pFramebuffers_array = node.find_child_array("framebuffers");
    if (pFramebuffers_array)
    {
        for (uint i = 0; i < math::minimum<uint>(cDefFramebufferTotal, pFramebuffers_array->size()); i++)
        {
            if ((pFramebuffers_array->is_child_object(i)) && (pFramebuffers_array->get_child(i)->size()))
            {
                if (!m_textures[i].deserialize(*pFramebuffers_array->get_child(i), blob_manager))
                    return false;
            }
        }
    }

    m_valid = true;

    return true;
}