Well for one, are you totally sure it isn't working? Are textures not showing up at all when you attempt this, or does it just appear that the textures are not being swapped? If it appears that the textures are not being swapped then it might be because of your minification/magnification settings you pass in to glubuild2dmipmaps.
The only real 'discrepancy' I see is that in the first glTexparameteri call for texture magnification you use gl_linear, and for the minification you use gl_linear_mipmap_nearest. I use gl_linear_mipmap_nearest for both. If I don't use that, I use gl_linear_mipmap_linear. Otherwise, the way I load BMPs is exactly the same as you (in this case type is gl_rgb, but it can also be gl_bgr or gl_bgra).
Here is the code I use for generating video textures.
Code:
UINT GenerateInternalTexture(byte * data, int channels, int width, int height, GLenum type)
{
UINT texture;
glGenTextures(1, &texture);
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
glBindTexture(GL_TEXTURE_2D, texture);
gluBuild2DMipmaps(GL_TEXTURE_2D, channels,width,height, type, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); //GL_LINEAR_MIPMAP_NEAREST is faster than GL_LINEAR_MIPMAP_LINEAR
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
return texture;
}
EDIT:
I suggest copying my code first, see if that works, so you know it isn't a loading problem. Then, I suggest you try using the same settings I use, but also try setting the minification settings before the magnification settings (the order in which you do it might affect the outcome).
Good luck