miércoles, diciembre 12, 2007

Codigo viejo

este codigo es una partecita de una libreria para manejar VESA en DOS que escribi hace 5 años, esta parte me encanta, porque esa lib esta toda escrita para hacer todo independiente de la resolucion, los bits por pixel y los bancos del modo (una cosa que es una porqueria:

esta parte:


void Video::putPixel( word x , word y , byte red , byte green , byte blue )

{

word color = ( ( word )( red & ( ( 1 << vbeModeInfoBlock.RedMaskSize ) - 1 ) ) << vbeModeInfoBlock.RedFieldPosition );

color |= ( ( word )( green & ( ( 1 << vbeModeInfoBlock.GreenMaskSize ) - 1 ) ) << vbeModeInfoBlock.GreenFieldPosition );

color |= ( ( word )( blue & ( ( 1 << vbeModeInfoBlock.BlueMaskSize ) - 1 ) ) << vbeModeInfoBlock.BlueFieldPosition );

long addr = (long)y * vbeModeInfoBlock.BytesPerScanLine + x * (vbeModeInfoBlock.BitsPerPixel >> 3);

setBank((int)(addr >> 16));

*(videoMemory + (addr & 0xFFFF)) = (char)color;

*(videoMemory + (addr & 0xFFFF) + 1 ) = (char)(color >> 8);

}


pone un pixel en la posicion definida con el color definido en la pantalla para cualquier modo de vesa.

C++, 17 años, DOS, Turbo C++ 1.01, que epocas aquellas :P

No hay comentarios.:

Seguidores

Archivo del Blog