Actualmente estoy desarrollando un proyecto con SDL. Básicamente dibuja y mueve imágenes (superficies) en la pantalla.¿Cuál es la forma más rápida de borrar un bloque de memoria (o una superficie SDL)?
Para mover una imagen sin dejar un rastro, primero debe limpiar la superficie pantalla, más o menos como glClear(), y actualmente lo estoy haciendo con un sencillo para la iteración del bucle sobre los píxeles de la superficie (también dibujo una caja negra en la superficie o memset).
Si bien las soluciones anteriores funcionan bien para superficies pequeñas, cada vez son más lentas a medida que la superficie crece, así que estaba buscando la forma más rápida de borrar (cero) un bloque de memoria.
Además, un amigo señaló que el uso de instrucciones SIMD podría hacer el trabajo muy rápido, pero la última vez que hice ASM fue en un 8085, cualquier idea sobre esto también podría ser útil.
Bueno, es un poco extraño ejecutar SDL en un microcontrolador PIC, después de todo, y PIC no tiene SIMD. –
YMMV. Mi experiencia es que memset suele ser bastante lento. Los que he visto en la fuente solo hacen conjuntos de bytes. He tenido un gran éxito al escribir el mío que (para áreas más grandes) usa escrituras más grandes para las secciones del medio (simplemente usando escrituras pequeñas en los extremos según sea necesario). –