Comment rendre les polices et le texte avec SDL2 efficacement?
Vu ce post ici sur l'utilisation de SDL_ttf pour afficher du texte dans un jeu. Cependant, cette approche nécessite l'appel de SDL_CreateTextureFromSurface(), avec le SDL_FreeSurface() et SDL_DestroyTexture() à chaque image.
Est la création de textures (et probablement par la suite d'avoir à envoyer au GPU) de chaque trame quelque chose qui peut considérablement l'impact de mes performances?
serait-il plus sage d'utiliser SDL_ttf seulement pour créer une texture avec toute ma rendu charset et puis blit à partir de là, moi-même, caractère par caractère?
Modifier: je suis à la recherche de rendre simple des polices à espacement fixe en anglais (le code ASCII de base).
D'accord, mais pour les besoins de la présente discussion, supposons que nous sommes de nous limiter à de simples polices à espacement fixe et des caractères ASCII. Je vais essayer d'obtenir une idée approximative de ce que tout cela texture de la création et de la suppression entraînera en termes de CPU/GPU utilisation
juste point vaut la peine d'ajouter à la poste)
Créez simplement votre texte une fois, garder cette texture jusqu'à ce que la valeur de texte a changé et redessiner la texture de vos cheveux lorsque le texte n'est pas le même. Avec cette méthode, vous n'aurez pas de redessiner votre texte à chaque image et vous permettra d'économiser un peu de temps de rendu.
Je suis venu à travers cette question, en cherchant une solution à ce problème. Comment je veux le résoudre, est d'utiliser un tampon de surface où je voulais passer tout le texte sur une image donnée avec BlitSurface et puis, après tout, le texte est ajouté à cela, créez une texture de celle-ci et de le dessiner. Serait-ce une bonne solution ou serait-ce encore la performance de frapper boucle pour faire de chaque image? Ma connaissance de la façon dont exactement SDL2 travaux sur les niveaux inférieurs n'est pas très bon, alors je serais heureux si vous pouviez m'expliquer pourquoi ou pourquoi pas c'est une bonne solution. Merci.
OriginalL'auteur introiboad | 2015-03-15
Vous devez vous connecter pour publier un commentaire.
Oui, la création de textures chaque image peut affecter les performances. Aussi, le tramage des polices TrueType à SDL_Surfaces (comme SDL_ttf) chaque image peut affecter les performances.
Je recommande SDL_FontCache (divulgation complète: je suis l'auteur). Il utilise SDL_ttf et des caches de la résultante des glyphes dans les textures de sorte que vous n'avez pas à tout faire vous-même:
https://github.com/grimfang4/SDL_FontCache
Vous êtes les bienvenus. Le code a été autour depuis des années dans le C++ NFont projet, mais seulement récemment que j'ai tirer en sa propre bibliothèque pour mieux les réutiliser (et C en charge).
OriginalL'auteur Jonny D
OpenGL texte méthodes
Vous êtes plus susceptible de trouver une mise en œuvre efficace par l'utilisation de OpenGL, car il est plus largement utilisé que SDL, voir:
Comment dessiner du texte en utilisant uniquement OpenGL méthodes?
Actuellement, j'irais pour freetype-gl: https://github.com/rougier/freetype-gl qui prend en charge la texture atlas https://en.wikipedia.org/wiki/Texture_atlas hors de la boîte.
SDL prend en charge OpenGL, et vous pouvez même utiliser les deux GL et SDL textures dans un seul programme, si vous êtes déjà à l'aide de SDL textures dans votre programme, par exemple:
Compiler et exécuter:
Testé sous Ubuntu 17.10.
GitHub en amont: https://github.com/cirosantilli/cpp-cheat/blob/d36527fe4977bb9ef4b885b1ec92bd0cd3444a98/sdl/texture_and_opengl.c
OriginalL'auteur Ciro Santilli 新疆改造中心 六四事件 法轮功