Lo que dije "chupa maquina", son los castings de float a int, no es coña es
una brutalidad, puede ser un cuello de botella para la aplicacion, el
compilador internamente llama a una funcion llama
_ftol().
Lo que yo hago es hacer esto
_asm
{
fld f
fistp i
}
donde f es el flotante e i es el entero.
Por cierto lo de mi libreria matematica en un test que he hecho sin usar
extensiones MMX o SIMD(todavia no las he metido), es un 1200% mas rapida que
una en c compilada con visual studio 2003,(en cuestiones de optimizacion
solo lo supera el VectorPC, que usa SIMD...), así que bueno tu mismo si
dices que eso no va a optimizar.
Lo del sonido ya lo tratare de adaptar a lo actual para que no haya que
modificar nada. Lo del callback lo he usado en algunas demos mias y me
funciono...
Otro tema es reservar memoria con un gestor de memoria propio, y otra cosa
es tambien alinear la memoria al tamaño de una palabra, asi evitaremos
tonterias.
Tampoco he visto si usamos 2.4 o 2.4f por ejemplo, (con 2.4f es mas rapido,
evitas casting de double a float,(double 64 bits, float 32)). Tampoco me he
fijado es cosas de divisiones, pero probablemente se pueda mejorar, como
sabemos es mas rapido lo siguiente
float x = 1.0f/valor;
for(int i=0;i<algo;++i)
inverso[i] *=x;
que
for(int i=0;i<algo;++i)
inverso[i]/=valor;
En todo el codigo en asm que he usado no he puesto ninguna instruccion que
solo sea de intel o de amd, ya que no he usado extensiones tipo 3dnow, o
SEE3, asi que debe funcionar en TODOS los ordenadores que sean compatibles
con intel desde el 486 para arriba.
Hay alguna otras optimizaciones en asm, pero bueno paro por el momento.