ピクセル位置を指定して描画する

2次元な文字情報など(いわゆるHUDか)を描画するときに
必要になるがよく忘れるのでメモ。

// 座標系を一時的に変更
setupView_(viewportWidth, viewportHeight);

glPointSize(5.0f);
glBegin(GL_POINTS);
glColor3f(1.0f, 0, 0);
// 左上原点のピクセル座標で描画
glVertex2i(x, y);
glEnd();

// 元に戻す
restoreView_();
//! @param[in] w viewport width
//! @param[in] h viewport height
void setupView_(int w, int h)
{
  glMatrixMode(GL_PROJECTION);
  glPushMatrix();
  glLoadIdentity();
 /*
  glOrtho(0, w, -h, 0, -1.0, 1.0);
  glMatrixMode(GL_MODELVIEW);
  glPushMatrix();
  glLoadIdentity();
  // Y軸反転
  glScalef(1, -1, 1);
  */

  // よりベターな方法
  // 参考
  // http://risky-safety.org/~zinnia/sdl/sourcetour/extra1/
  glOrtho(0, viewWidth, viewHeight, 0, -1.0, 1.0);
  glMatrixMode(GL_MODELVIEW);
  glPushMatrix();
  glLoadIdentity();
}

void restoreView_()
{
  glPopMatrix();
  glMatrixMode(GL_PROJECTION);
  glPopMatrix();
}

もっとスマートなやり方はあると思うけどとりあえず動く。