ARB_texture_storage added glTexStorage2D, but unfortunately the function requires you to specify the number of mipmap levels.

This means you have to write your own function to calculate this if you want a full mipmap stack. This is of course prone to error, and extra effort for the common case where you just want to load a texture.

In D3D you can specify 0 mipmap levels and a full mipmap stack is created.

Thus I suggest this function be modified to accept a 0 level that automatically creates a full mipmap stack.