Como supongo que muchos sabreis la fpu tiene la posibilidad de
realizar el seno y el coseno de un angulo dado al mismo tiempo,
ahorrando muchisimos ciclos de reloj(casi la mitad del tiempo).
Para las funciones que usan sin y cos,matrices,etc he desarrollado
(todavia sigo)una libreria matematica (esta casi toda en asm, y es
rapidisima, el problema es que es VC inline) y bueno se me ha
ocurrido poner la funcion sincos en asm inline de VC,
void sincos(float val,float *sine,float *cosine)
{
_asm
{
mov eax,cosine
mov edx,sine
fld val
fwait
fsincos
fwait
fstp [eax]
fstp [edx]
}
}
Bueno eso para VC, para Gas que es que usa gcc seria algo distinto
por motivos de la sintaxis AT&L que usa(que fea coño), asi la
funcion quedaria algo parecido al
void sincos(float val,float *sine,float *cosine)
{
#ifndef WIN32
_asm
{
mov eax,cosine
mov edx,sine
fld val
fwait
fsincos
fwait
fstp [eax]
fstp [edx]
}
#elseif defined /*pondriamos otras macros que definen los
compiladores */
/*Codigo en asm en linea*/
#endif
}
Tendriamos una funcion que se llamaria de la siguiente forma
sincos(angulo,&seno,&coseno);
y nos devolveria el seno y el coseno del angulo y ademas es muy
rapida.
Estaria bien tratar de optimizar alguna que otra funcion matematica,
tambien (no se si lo hareis así ahora mismo) para pintar la pantalla
usar punteros a funciones, así se ahorrarian comprobaciones if
inutiles que son tan importantes a la hora de pintar
asi el GlutDisplayloquesea(no manejo glut, wgl y glx :P mira que soy
raro) tendriamos por ejemplo un puntero a funcion generico
void (*PintaPantalla)(void);
Y según el estado del juego hariamos algo parecido a
PintaPantalla = PintaMenu;
PintaPantalla = PintaSinglePlayer;
etc.
y la llamada en glut seria algo como
glutDisplayWindow(PintaPantalla);(Repito no se glut, no me gusta).
Digo esto pq no me deja descargar el codigo anonimamente y no le he
pasao a Zeru mi nombre de Sourceforge y no he podio ver el codigo de
forma comoda.
Otra cuestion, para el sonido usais ogg y openal, pero ¿cargais el
fichero de audio entero en memoria y lo leeis?, ¿lo leeis desde el
disco duro poco a poco o cargais el fichero ogg y despues lo que
haceis es ir encolando bufferes de sonido para su reproduccion?,
(como consecuencia se usa muy poca memoria y es muy rapido)(el
fichero ogg, no mas de 3MG y dos bufferes de como mucho 8KB cada
uno). Es que tengo hecho un reproductor de Ogg con OpenAl que usa
eso, si os interesa y no teneis algo por el estilo podria pasarlo,
de hecho tengo intencion en usarlo en un juego que estoy haciendo
por mi cuenta(ya tengo casi terminado el editor :), por ciero la
funcion sincos esta mas que provada en el editor para las
rotaciones).
Cuando tenga el codigo le hechare un ojillo por encima a ver que
puedo aportar, que llevo un tiempo en el grupo y no he hecho na,
bueno si compilarlo en suse pero soy tan perro que no escribi ni
como lo hice.
Por cierto mi cuenta en sourceforge en Raistmaj asi que ya sabes
Zeru :). Si quereis comentarme algo personalmente mi correo:
gmail.com 1
@ 2
Raistmaj 3
El orden (es logico) es 321.(esto lo hago por si acaso hay spam).