FBO & texture uploads difference on nvidia & ati?

I was doing some FBO code, and my first revision used glTexImage2D() to upload the texture to the FBO.
This worked fine with the nvidia card, but not the ati card. All I saw on the ati card was just a blank texture.

Then I switched to glTexSubImage2D(), and this time, it uploaded the texture correctly to both cards.

There was no openGL errors at all reported by the ati card, and none on the nvidia either. glCheckFramebufferStatusEXT() also had no errors.

It was a simple texture using GL_RGB & GL_UNSIGNED_BYTE.

Can someone explain to me why that one change is needed for the ati card?
No other code was change but that one line to get it to work on the ati card.


If you are passing 1,2,3, or 4 as the third parameter to glTexImage2D you may get issues on ATI as they assume 16bit textures if you do not specify the internal format. (Always specify the format - typically GL_RGBA8 )