null Le 07/08/2003 à 14:46 Voilà dans mon moteur 3D je lis les coordonnées des vertices transformés et projetés grâce à un index de faces.
Mais le code pour "extraire" ces coordonnées m'a l'air beaucoup trop lourd d'autant plus qu'il faut l'exécuter autant de fois qu'il y a de faces visibles.
Alors je me demandais si c'était possible de l'optimiser. Je suis déjà passer des triangles aux quadrilatère dans la gestion des polygones, mais il me semble qd même que c'est possible de réduire les accès à la mémoire... Par exemple en faisant une structure avec xa,xb,xc,xd et ya,yb,yc,yd et en faisant en memcpy par exemple ce qui permettrait de recopier en une seul fois le membre "vertex" de la structure Face_List.
Mais je ne sais pas trop comment faire.
typedef struct
{
int x;
int y;
int z;
int visible;
}VertexBuffer;
typedef struct
{
unsigned char color:2; // couleur de la face
unsigned short vertex[4]; // index des trois sommets
unsigned char polygone_type:1;
}Face_List;
int xa = Vertex_Buffer[Faces[i].vertex[0]];
int xb = Vertex_Buffer[Faces[i].vertex[1]].x;
int xc = Vertex_Buffer[Faces[i].vertex[2]].x;
int xd = Vertex_Buffer[Faces[i].vertex[3]].x;
int ya = Vertex_Buffer[Faces[i].vertex[0]].y;
int yb = Vertex_Buffer[Faces[i].vertex[1]].y;
int yc = Vertex_Buffer[Faces[i].vertex[2]].y;
int yd = Vertex_Buffer[Faces[i].vertex[3]].y;
Si vous avez d'autres solutions à me proposer n'hésiter pas à m'en faire part.
Et puis sinon j'aurais une petite question. Est-c'est qu'il est plus lent en C d'utiliser une structure qu'une simple variables ?
Par ex, si on utilise
int x;
int y;
int z;
Est-ce que c'est plus rapide que d'utiliser ? :
typedef struct
{
int x;
int y;
int z;
}ma_structure;
ma_structure structure_1;
...
structure_1.x;
structure_1.y;
structure_1.z;
www.wikio.fr/user1921&info=comments
3 mots: "allocation de registres"...
Ah ok.
Je n'y avais pas du tout pensé.
Merci.
Un peu off-topic, mais bon...
Si vous voulez voir les effets d'un compilateur qui ne traite pas les structures de manière optimale (probablement à cause de l'allocation de registres, mais il y a aussi d'autres défauts tels que le move.b/w #0,d(an)), regardez donc l'event handler (attribute 0x4) de l'app interne TITABLED... Ca a l'air d'être pareil sur toutes les versions d'AMS (j'ai regardé avec 1.00, 2.03 et 2.09, le code est semblable), regarder sous AMS 2.xx suffit...
Bien que je n'aie pas vérifié, je pense que GCC ferait quand même mieux.
Le code généré par GCC n'est pas aussi catastrophique que ça.
Quand même.
Chaque fonction que j'ai dabord écrite en C et que je réécris en ASM se trouve nettement plus rapide en ASM.
Oui, mais il ,n'affiche pas tres vite par exemple un cube texturé ....
tout à fait, mais le fait qu'il ait essayé et réussi qqch de vraiment correct (~20 fps pour un mode rempli - pas texturé - en nvg) est deja tres bien.
> Bah on perd la clarté de lecture !
Il n'y a qu'à utiliser les constantes définies dans l'enum SymFlags. Ton argument -> poubelle.
> c'est ridicule quand on a les moyens d'avoir un compilo qui optimise !
C'est ridicule de se reposer sur le compilateur pour qu'il optimise tout seul un truc que tout le monde comprend, qu'il est trivial de faire à la main (c'est de la paresse que de ne pas le faire à la main).
Je te signale que dans TIFS, tu n'aurais pas le choix (ce qui est à mon avis la meilleure solution).
Je pense de plus que dans TIGCC, SF_HIDDEN devrait vraiment être mis deprecated et SF_INUSE, plus juste, utilisé à la place (c'est la dénomination utilisée dans tiams.h).
> J'espère vraiment que GCC fera cette optimisation.
Aucun intérêt. Pollux (#23) le dit lui-même...
Je me garde bien de commenter la fin de #25.
nEUrOO, arrête de le faire exprès juste pour faire chier...
> Il faudrait que t'apprennes à respecter les opinions des autres, mais vu que tu viens du TICTborad -très connu pour son ouverture et sa diversité-, c'est pas gagné
Board dont tu es un des seuls à t'être fait bannir pour ton comportement... Contrairement à certains ânes d'ici, on ne kicke / bannit pas juste après que quelqu'un ait donné une opinion qui n'est pas la nôtre.
Pour le reste, je ne vais pas en rajouter. Il y a au moins une énormité dans la phrase que je cite, j'espère que tu en es conscient, et j'attends que tu la trouves...
> Il parle d'un compilateur limité par la plateforme de compilation (TI68k)
Je ne l'ai pas pris comme ça, car "C'est vraiment le genre d'optimisation qui n'arrive que très rarement" ne s'applique pas qu'au TI-68k...
Ca n'est pas souvent qu'on te voit écrire "limité" à côté de "compilateur", en parlant de GTC. Il n'est pas limité par rapport à TIGCC que par la plateforme de compilation.
> Fais gaffe quand tu cites les autres.
La paille et la poutre, tu connais ? Ca s'applique aussi bien à toi qu'à moi.
> C'est de l'humour, de l'ironie, pour blaguer.
Un smiley après des conneries, pour dire que c'était de l'ironie... Que j'aime bien cette façon de se comporter !
> Mais tu ne connais pas ça. Normal, on ne t'a jamais vu blaguer
Faux. Tu as dû le manquer... Je sais très bien utiliser l'ironie.
