glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
This is a problem if you don't build mipmaps. If you're not using them, you have to set the minfilter to not use mipmapping (GL_LINEAR for example), otherwise it won't sample the texture.
http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture
Also this:
glGenFramebuffers(1, &fbo_id);
glBindFramebuffer(GL_FRAMEBUFFER, 1);
You probably meant to bind fbo_id, not "1". It may work but it is prone to breaking.
Is depth test enabled by default? I thought I would have to explicitly enable it with glEnable(GL_DEPTH_TEST). If I'm not doing that, should I have to worry about it?
[/quote]
You're right, its disabled by default. You should be fine.