SCERROR SCREEN_TFont::Print(int x, int y, pwide_t text)
{
  Gfx3DDevice* gfx = SCREEN::Get3DDevice();
  if ( !gfx ) fail_because(SCREEN_IS_NOT_INITIALIZED_OR_3D_UNSUPPORTED);
  gfx->Ortho2D();
  //gfx->Translate(x,SCREEN::GetHeight()-font_->GetTextHeight()-y);
  gfx->SetState(GFX3D_STATE_MINMAGFILTER,GFX3D_NEAREST);
  gfx->SetState(GFX3D_STATE_ENVMODE,GFX3D_TEXTURE_MODULATE);
  gfx->SetState(GFX3D_STATE_BLENDING,GFX3D_DISABLE);
  gfx->SetState(GFX3D_STATE_ALPHA_TEST,GFX3D_DISABLE);
  gfx->SetState(GFX3D_STATE_DEPTH_FUNC,GFX3D_ALWAYS);
//  u16_t indices[] = {0,1,2,2,3,0};
  u16_t indices[] = {0,1,2,2,3,0};
  mrgba_t color = mRGBA_t(255,255,255,255);
  font_->FillSymbols(symbols_,text);
  float screen_height = (float)SCREEN::WndHeight();
  for ( unsigned i = 0; i < symbols_.Count(); ++i ) {
    gfx->SetTexture(font_->GetSymbolTexture(symbols_[i].symbol));
    VxB_VERTEX vertices[4];
    font_->FillQuad(vertices,symbols_[i].symbol,symbols_[i].x + x,screen_height - symbols_[i].y - y);
    vertices[0].color = color;
    vertices[1].color = color;
    vertices[2].color = color;
    vertices[3].color = color;
    gfx->DrawIndexedPrimitive(GFX3D_TRILIST,vertices,4,indices,6,GFX3D_VxB_VCT);
  }
  return SCE_OK;
}