How exactly does Gouraud shading apply color across a polygon? Does it do it by pixel or is it some other method?
The difference is in the number of lighting calculations done. Where the lighting calculation produces some color.
Flat does one per face, uses the color across the face.
Gourand does 3 (for a triangle, one for each vertex), interpolates the color across the face.
Phong does a light calculation for every pixel/fragment (where the normal is interpolated across the face).