Skip to content

Conversation

@TheGag96
Copy link

...by doing the following:

  • Create caches around fontGetCharWidthInfo and fontCalcGlyphPos for ASCII characters, because those are pretty slow. (Non-English languages do not get this benefit - perhaps an LRU cache for non-ASCII glyphs could be made to help here.)
  • Instead of doing one draw call per glyph, try to batch them as much as possible.
  • Because the system font is so fragmented (5 glyphs per texture), this requires collecting glyphs and sorting them before drawing batches to avoid costly texture swaps. (citro2d has the function C2D_TextOptimize for this exact reason.)

This lets me maintain 60 FPS on my o3DS with the 3D turned on in most but not all circumstances. Enough glyphs on screen can still cause dropped frames.

...by doing the following:

- Create caches around `fontGetCharWidthInfo` and `fontCalcGlyphPos`
  for ASCII characters, because those are pretty slow. (Non-English
  languages do not get this benefit - perhaps an LRU cache for non-ASCII
  glyphs could be made to help here.)
- Instead of doing one draw call per glyph, try to batch them as much as
  possible.
- Because the system font is so fragmented (5 glyphs per
  texture), this requires collecting glyphs and sorting them before
  drawing batches to avoid costly texture swaps. (citro2d has the
  function `C2D_TextOptimize` for this exact reason.)

This lets me maintain 60 FPS on my o3DS with the 3D turned on in most
but not all circumstances. Enough glyphs on screen can still cause
dropped frames.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant