La première routine trouvé etait:
//------------------------------------------------------------------------------
// (dest_x,dest_y) ... position in screen memory where the strip should be drawn
// texture_x ... column number of texture which should be used as input
// dest_height ... destination height (1..64) NOTE: 0 is an invalid height
//------------------------------------------------------------------------------
void RenderStrip(short dest_height,short dest_x,short dest_y,short texture_x) {
double delta_y = 64.0/dest_height;
double texture_y = 0.0;
COLOR color;
short actheight;
for (actheight=0; actheight < dest_height; actheight++) {
color = GetTexturePixel(texture_x,(short)texture_y);
texture_y += delta_y;
SetDestinationPixel(dest_x,dest_y+actheight,color);
}
}
cette routine utilise des doubles... et cela ralentit donc notre chere ti
je me demande à quoi ca sert d'utiliser des nombres a virgules, alors qu'une routine comme cela serai plus rapide et aussi éfficace:
void RenderStrip(short dest_height,short dest_x,short dest_y,short texture_y) {
char color;
short actheight;
for (actheight=0; actheight < dest_height; actheight++) {
color = XGPxlTest((actheight<<7)/dest_height,texture_y);
XGPxlPut(dest_x+actheight,dest_y,color);
XGPxlPut(dest_x+actheight,dest_y+1,color);
}
}
Le resultat est strictement identique, il me semble non
(dans l'esprite.. car dans la deriere routine, c'est une deformation horizontal...)
Dans cette routine, le seul probleme étant le divu que l'on ne peut pas optimisé
Est ce que qqn a une autre idée d'optimisation.. excepté de passer la routine en asm et de faire un tableau des pxls a tester (ce qui prend un max de ram) ou alors de chager les fonctions de pxl...
NB: une idée serait d'incrémenter par: dest_height, ce qui rendrai automatiquement le bon résultat.. vous avez mieux?



