Неполучается нарисовать линию (Bresenham's algorithm). Настраиваются следующие регистры:
LINEINIT=(2048/*XINIT*/)|(2048<<16/*YINIT*/); LINEPATTRN=0x000fffff;//solid line pattern DESTLINELENGTH=destSurf->Lenght; DESTPIXELSTRT=((dsX1%4)*8/*SPEL*/)|((((dsX2-1)%4)*8)<<16/*EPEL*/); BLKDESTSTRT=destSurf->StartAddress+dsY1*destSurf->Lenght*4+dsX1; BLOCKMASK=color;
if(abs(dsX2-dsX1)==abs(dsY2-dsY1))LINEINC=(4095/*XINC*/)|(4095<<16/*YINC*/); else if(abs(dsX2-dsX1)<abs(dsY2-dsY1))LINEINC=((abs(dsX2-dsX1)*4095/abs(dsY2-dsY1))/*XINC*/)(4095<<16/*YINC*/); else if(abs(dsX2-dsX1)>abs(dsY2-dsY1))LINEINC=(4095/*XINC*/)|((abs(dsY2-dsY1)*4095/abs(dsX2-dsX1))<<16/*YINC*/);
BLKDESTWIDTH=abs(dsX2-dsX1)/4096; BLKDESTHEIGHT=abs(dsY2-dsY1)/4096;
BLOCKCTRL=0; BLOCKCTRL=(2<<17/*P*/)|(0<<14/*BG */)|(1<<4/*LINE*/)|(1/*ENABLE*/);
где (dsX1,dsY1) координаты начальной точки, (dsX2,dsY2) координаты конечной точки, destSurf->StartAddress адрес начала поверхности в памяти, destSurf->Lenght ширина поверхности в word'ах
Что делаю неправильно?
|