As SAKrisT correctly pointed out, the problem was caused by incorrect offset by Y axis. Playing a bit with the code, I figured out the solution:
if(FT_Load_Char(face, c, FT_LOAD_RENDER))
return;
FT_GlyphSlot g = face->glyph;
int width = next_p2(g->bitmap.width);
int height = next_p2(g->bitmap.rows);
...
float x=(float)g->bitmap.width / (float)width,
y= (float)g->bitmap.rows / (float)height;
float x2 = g->bitmap_left;
float y2 = g->bitmap_top;
float w = g->bitmap.width;
float h = g->bitmap.rows;
using namespace glm;
glyphsVertices[c] = new pxgVertex2dT[4];
glyphsVertices[c][0] = { vec2(0,h-y2), vec2(0,y) };
glyphsVertices[c][1] = { vec2(0,-y2), vec2(0,0) };
glyphsVertices[c][2] = { vec2(w,-y2), vec2(x,0) };
glyphsVertices[c][3] = { vec2(w,h-y2), vec2(x,y) };
Now it works perfectly!