diff --git a/src/sys/graphics/main.cpp b/src/sys/graphics/main.cpp index f87e098..54a1e1d 100755 --- a/src/sys/graphics/main.cpp +++ b/src/sys/graphics/main.cpp @@ -9,11 +9,12 @@ #include int main() { - // UInt32 foo; + Int32 foo; UInt8 r, g, b; r=0; g=0; b=0; + foo = 0; bool result; TGfx0* buf=0; TGfx0* buf2=0; @@ -23,9 +24,9 @@ buf = new TGfx0(); buf2 = new TGfx0(); font = new TDPFont(buf); - buf->create(400,400,def_pixfmt_8bpp); + buf->create(400,400,def_pixfmt_16bpp); // buf2->create(400,400,def_pixfmt_15bpp); - //buf2->alias(*buf,0,3,8,8); +// buf2->alias(*buf,0,3,8,8); buf2->clone(*buf); buf2->putPixel(0,0,1); buf2->putPixel(buf2->getMaxX(),buf2->getMaxY(),1); @@ -33,10 +34,12 @@ result = font->Load("PACMAN.DPF"); font->SetColor(1); font->PutText(0,0," World"); - buf->copyBuf(0,0,*buf,40,0,79,8); + // buf->copyBuf(0,0,*buf,40,0,79,8); + for (foo=-10; foo<1255; foo++) + buf->hLine(foo,foo*2,foo,1); for (r=0; r<8; r++) { for (g=0; g<80; g++) - if (buf->getPixel(g,r)) printf("*"); else printf(" "); + if (buf->getPixel(g,r)==1) printf("*"); else printf(" "); printf("\n"); } if (Screen) delete Screen; diff --git a/src/sys/graphics/objgfx30.cpp b/src/sys/graphics/objgfx30.cpp index dd8a538..f25b883 100755 --- a/src/sys/graphics/objgfx30.cpp +++ b/src/sys/graphics/objgfx30.cpp @@ -453,16 +453,6 @@ return TRUE; } // TGfx0::create -void -TGfx0::flipX(void) { - -} // TGfx0::flipX - -void -TGfx0::flipY(void) { - -} // TGfx0::flipY - UInt8 TGfx0::getBPP(void) { return BPP; @@ -508,28 +498,26 @@ switch (BPP) { case 8: asm( - " add (%%esi,%%ebx,4), %%edi \n" // add edi, [esi + ebx*4] + " add %%esi, %%edi \n" // add edi, esi " add %%ecx, %%edi \n" // add edi, ecx - " movzbl (%%edi),%%eax \n" // edx,byte ptr [edi] - " mov %%eax, %4 \n" // mov result, eax + " movzbl (%%edi),%%eax \n" // movzx edx,byte ptr [edi] + " mov %%eax, %3 \n" // mov result, eax : - : "D" (Buffer), "S" (LineOfs), // %0, %1 - "c" (x), "b" (y), // %2, %3 - "m" (result) // %4 + : "D" (Buffer), "S" (LineOfs[y]), // %0, %1 + "c" (x), "m" (result) // %2, %3 ); break; case 15: case 16: asm( + " add %%esi, %%edi \n" // add edi, esi " add %%ecx, %%ecx \n" // add ecx, ecx {adjust for pixel size} - " add (%%esi,%%ebx,4), %%edi \n" // add edi, [esi + ebx*4] " add %%ecx, %%edi \n" // add edi, ecx - " movzwl (%%edi),%%eax \n" // edx,word ptr [edi] - " mov %%eax, %4 \n" // mov result, eax + " movzwl (%%edi),%%eax \n" // movzx edx,word ptr [edi] + " mov %%eax, %3 \n" // mov result, eax : - : "D" (Buffer), "S" (LineOfs), // %0, %1 - "c" (x), "b" (y), // %2, %3 - "m" (result) // %4 + : "D" (Buffer), "S" (LineOfs[y]), // %0, %1 + "c" (x), "m" (result) // %2, %3 ); break; case 24: @@ -537,31 +525,31 @@ " mov %%ecx, %%eax \n" // mov eax, ecx - adjust for pixel size " add %%ecx, %%ecx \n" // add ecx, ecx - adjust for pixel size " add %%eax, %%ecx \n" // add ecx, eax - adjust for pixel size - " add (%%esi,%%ebx,4), %%edi \n" // add edi, [esi + ebx*4] + " add %%esi, %%edi \n" // add edi, esi + // " add (%%esi,%%ebx,4), %%edi \n" // add edi, [esi + ebx*4] " add %%ecx, %%edi \n" // add edi, ecx " movzwl (%%edi),%%eax \n" // edx,word ptr [edi] " xor %%eax, %%eax \n" " mov 2(%%edi), %%al \n" // mov al, [edi+2] " shl $16, %%eax \n" // shl eax, 16 " mov (%%edi), %%ax \n" // mov ax, [edi] - " mov %%eax, %4 \n" // mov result, eax + " mov %%eax, %3 \n" // mov result, eax : - : "D" (Buffer), "S" (LineOfs), // %0, %1 - "c" (x), "b" (y), // %2, %3 - "m" (result) // %4 + : "D" (Buffer), "S" (LineOfs[y]), // %0, %1 + "c" (x), "m" (result) // %2, %3 ); break; case 32: asm( " shl $2, %%ecx \n" // shl ecx, 2 {adjust for pixel size} - " add (%%esi,%%ebx,4), %%edi \n" // add edi, [esi + ebx*4] + // " add (%%esi,%%ebx,4), %%edi \n" // add edi, [esi + ebx*4] + " add %%esi, %%edi \n" // add edi, esi " add %%ecx, %%edi \n" // add edi, ecx " mov (%%edi),%%eax \n" // eax,word ptr [edi] - " mov %%eax, %4 \n" // mov result, eax + " mov %%eax, %3 \n" // mov result, eax : - : "D" (Buffer), "S" (LineOfs), // %0, %1 - "c" (x), "b" (y), // %2, %3 - "m" (result) // %4 + : "D" (Buffer), "S" (LineOfs[y]), // %0, %1 + "c" (x), "m" (result) // %2, %3 ); } // switch return result; @@ -581,11 +569,94 @@ UInt32 TGfx0::getTransparentColor(void) { return TransparentColor; -} +} // TGfx0::getTransparentColor + +void +TGfx0::hFlip(void) { + +} // TGfx0::hFlip void TGfx0::hLine(Int32 x1, Int32 x2, Int32 y, UInt32 colour) { + Int32 tmp; + if ((Buffer==NULL) || (LineOfs==NULL)) return; + if ((UInt32)y>MaxY) return; + if (x1>x2) { + tmp= x1; + x1 = x2; + x2 = tmp; + } // if + if (x1<0) x1 = 0; + if (x2>(Int32)MaxX) x1=MaxX; + if (x2