2016-12-07 3 views
-2

Disons que je voulais dessiner un 50px par 60px rectangle dans SDL2 à partir du point (0,0). Est-il plus rapide d'appeler SDL_RenderDrawRect(renderer, SDL_Rect structure) que de remplir chaque pixel en utilisant une boucle imbriquée et en appelant SDL_RenderDrawPoint?Est-ce que le dessin d'un rectangle sur l'écran à l'aide de RenderDrawRect prend le même laps de temps que le remplissage de chaque pixel requis à l'aide de RenderDrawPoint?

Ou les deux opérations ont-elles la même durée (qu'est-ce que je pense qu'il se passerait)? J'ai essayé de regarder le code source SDL, bien que j'ai eu du mal à comprendre complètement les fonctions de rendu.

+1

Pourquoi ne comparez-vous pas? – Olaf

Répondre

3

Oui, ce serait mon attente absolue.

Même s'il n'y avait pas d'accélération matérielle en cours, il y a plus de frais généraux en faisant un appel de fonction par pixel. Pensez à simplement calculer l'adresse à l'intérieur de la surface où chaque pixel va être écrit: le pixel à la fois a besoin de calculer cette nouvelle à chaque fois, alors que le code rectangle doit probablement réutiliser la dernière valeur calculée la grande majorité des écritures. Ces choses ont de l'importance.

Mais il y a très probablement accélération matérielle, donc la différence de performance peut être grande. Utilisez toujours la fonction API la plus sophistiquée possible pour optimiser l'optimisation et l'accélération.

+0

Et c'est sans aucun doute que réinventer la roue (dessiner un rectangle) est une perte de temps totale et va probablement ajouter un nouveau tas de bugs à votre programme. Il n'y a absolument aucun avantage. – xhienne

+0

@xhienne Non, réinventer la roue n'ajouterait aucun bogue à aucun programme, je sais exactement comment je m'en occuperais (c'est en fait assez simple, je l'ai brièvement décrit dans ma question). Et il y a un avantage, parce que mon raisonnement derrière cette question était que je prévois de créer un programme qui remplisse des formes non rectangulaires. Comme SDL n'a pas de fonction directe pour cela, je peux soit remplir tous les rectangles de cette forme, soit remplir individuellement chaque pixel de la forme, ce qui était la motivation derrière la question. – 83457

+0

@xhienne Quoi qu'il en soit, il n'y a absolument rien de mal à réinventer la roue pour pratiquer, comprendre et acquérir de l'expérience. – 83457