If it doesn’t work then that probably means the GL_ARB_texture_non_power_of_two extension isn’t supported by that graphics card.
Check the extensions string ( glGetString(GL_EXTENSIONS) )to make sure.
If it’s not supported then your best bet is probably to make a power-of-two texture larger than the size you need, and glTexSubImage2D into that.
I have an ATI X600, it supports NPOT textures, but how tranfer float data to textures in an easy way i don’t know. There is a way, is using FBO and glDrawPixels, but this method does not allow to use the FBO for other purpose, for instance, render in texture of different size, and retrieve its data.
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,vImgSize,vImgSize, GL_RGBA, GL_FLOAT,data);
Is this actually legal, sending float image data with an integral texture format?
What integral texture format? That’s a subimage call, so the internal format used is that of the destination texture. From the code posted here we don’t know what internal format is used, but I would assume it’s floats.
Either way, it’s legal to pass floats to fixed point formats. That has been in the API long before floating point formats were added. It will of course be clamped though.
As for NPOT, check for GL2.0 instead of the extension unless you need the full specification with mipmaps and GL_REPEAT.