Now that I know that the context is rendering to a texture frame buffer I can try to answer.
Yes, you do have to
glDisable(GL_BLEND) otherwise it will blend according to whatever
glBlendFunc is currently set, which will mess with the RGB channels based on what you're writing to the alpha channel. Then you need to do blending you write it in your shader.
I've done a lot of testing with writing to textures and trying to preserve the alpha channel. Check out this question on stack overflow: https://stackoverflow.com/questions/19674740/opengl-es2-premultiplied-vs-straight-alpha-blending It's not exactly the same thing but might be some help.
Of course you do have to make sure that your texture frame buffer is GL_RGBA in both places. Mine on iOS looks a little like this:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureID, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, textureDepthRenderbuffer);
Of course if you don't need the depth buffer you can skip that part.