OpenGL multi-sampled framebuffer creating black texture

I’ve been trying to figure this out for hours, and it’s making me really frustrated. I don’t see what is wrong with my code. The texture that is supposed to be created by blitting is only making a black texture. I’m not sure if it’s the renderbuffer or the texture that is doing it. Here’s what I got going on:

    public Framebuffer() {
        this.FrameWidth = GameStructure.Window.getWidth();
        this.FrameHeight = GameStructure.Window.getHeight();

        //Multi-sampled FBO
        fboMS = createFBO();

        this.renderbufferAttachmentColorMS();
        this.renderbufferAttachmentDepthMS();

        if(!isComplete()) {
            Console.errMsg("Framebuffer incomplete");
        }
        unbind();

        //Single-sampled FBO
        fbo = createFBO();

        this.textureAttachment(texId);

        if(!isComplete()) {
            Console.errMsg("Framebuffer incomplete");
        }
        unbind();
    }

    private int createFBO() {
        int fbo = glGenFramebuffers();
        glBindFramebuffer(GL_FRAMEBUFFER, fbo);

        return fbo;
    }

    private void textureAttachment(int texId) {
        texId = glGenTextures();
        glBindTexture(GL_TEXTURE_2D, texId);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, FrameWidth, FrameHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByteBuffer) null);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texId, 0);
        glBindTexture(GL_TEXTURE_2D, 0);
    }

    private void textureAttachmentMS(int texId) {
        texId = glGenTextures();
        glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, texId);
        glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, Settings.antiAlias, GL_RGBA8, FrameWidth, FrameHeight, true);
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, texId, 0);
        glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0);
    }

    private void renderbufferAttachment(int rbo) {
        rbo = glGenRenderbuffers();
        glBindRenderbuffer(GL_RENDERBUFFER, rbo);
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, FrameWidth, FrameHeight);
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo);
        glBindRenderbuffer(GL_RENDERBUFFER, 0);
    }

    private void renderbufferAttachmentDepthMS() {
        rboDepth = glGenRenderbuffers();
        glBindRenderbuffer(GL_RENDERBUFFER, rboDepth);
        glRenderbufferStorageMultisample(GL_RENDERBUFFER, Settings.antiAlias, GL_DEPTH24_STENCIL8, FrameWidth, FrameHeight);
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rboDepth);
        glBindRenderbuffer(GL_RENDERBUFFER, 0);
    }

    private void renderbufferAttachmentColorMS() {
        rboColor = glGenRenderbuffers();
        glBindRenderbuffer(GL_RENDERBUFFER, rboColor);
        glRenderbufferStorageMultisample(GL_RENDERBUFFER, Settings.antiAlias, GL_RGBA8, FrameWidth, FrameHeight);
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rboColor);
        glBindRenderbuffer(GL_RENDERBUFFER, 0);
    }

    public void bind() {
        glBindFramebuffer(GL_FRAMEBUFFER, fboMS);
    }

    public void unbind() {
        glBindFramebuffer(GL_FRAMEBUFFER, 0);
    }

    public void blit() {
        glBindFramebuffer(GL_READ_FRAMEBUFFER, fboMS);
        glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);

        glBlitFramebuffer(0,0,FrameWidth,FrameHeight,0,0,FrameWidth,FrameHeight,GL_COLOR_BUFFER_BIT,GL_NEAREST);

        unbind();
    }