There were limitations for NPOT textures on older hardware. As mentioned on this OpenGL wiki, some older hardware requires NPOTs not to have mipmaps, compressed textures require alignment of 4x4 pixels, but new hardware should handle it perfectly.

In my experience, some even relatively new hardware experiences major performance hit if you use NPOT textures instead of POTs. I don't know what the issue is; it's possible that in some combination of render states, the rendering is actually done in software. So, unless you have good reasons, I'd recommend still trying to use POTs as much as possible.

As to why use NPOTs instead of POTs - if you have images that are of NPOT dimensions, say for example 1600x1200, using 2048x2048 pixel surface will waste a lot of video memory.

If you're using texture formats that are compressed in memory (PVR or DXT, for example), scaling up to the next power of two is going to use significantly less texture memory than a uncompressed, but smaller, NPOT texture.
–
Tetrad♦Jan 31 '11 at 21:16

3

Your wording is a little vague, so sorry if this is redundant with what you're trying to say - compressed textures still require pixel sizes in multiples of 4, even on modern hardware that supports NPOT textures.
–
user744Jan 31 '11 at 21:21

1

I would expect current hardware to still be tiling/swizzling textures in the drivers when you upload them. This changes the layout of the texture to make accessing more optimal for the hardware. Consoles (I'm not including XNA in that) require you to manually perform this layout optimisation in your own tool chain, I'm pretty sure these only work on POW2.
–
Roger PerkinsJan 31 '11 at 23:00

It certainly simplifies my display logic to know that if I want to set a texture to the top left of the screen that I can just set 0,0 as the top left of the texture and see all the texture there in the correct location, whereas if I had to add 0alpha padding, positioning the texture against the edge of the screen would be more complex. Plus, of course, that 0alpha still has to be alpha blended, and if I'm looking at opaque textures, I may prefer not to have an alpha channel.

Usually one positions polygons, not textures, on-screen. The polygons can be given whatever UVs are necessary - they don't necessarily need to go from 0 to 1; if your texture is only 30 wide, it's fine to go to 0.9375 (which is another reason POT textures are good - UVs are exactly representable).
–
user744Feb 1 '11 at 0:42

power of 2 textures increase performance about 30% for any type of GPU not only old GPUs (30% faster is the difference between a high end GPU and an average one)
they take 30% more ram but less vram is needed
they increase quality by providing proper texture size for specific distance it works like anti-aliasing for textures
dark line artifact should be handled by game engines and aaa engines handle them fine

This only provides an (already specified) advantage of power-of-two textures, it does not not address the question itself, which is why you would use non-power-of-two textures given the above advantages.
–
Josh Petrie♦Jul 28 at 17:53

sorry I misunderstood the question , by power of 2 you are restricted to 2048 ,1024 , 512 , etc probably this is the main reason
–
yusef ghataviJul 29 at 18:58

also non power of 2 are useful for texture that does not need mipmaps such as gui textures and textures for first person character that always is close to camera
–
yusef ghataviJul 29 at 19:10