/********************************************************************** will add copyright bs later $Id: main.cpp,v 1.3 2003/03/17 01:52:00 flameshadow Exp $ **********************************************************************/ #include "objgfx30.h" #include "ogFont.h" #include "ogSprite.h" #include "ogBlit.h" //#include "ogDisplay_VESA.h" #include <math.h> #include <iostream> #include <stdio.h> #include <time.h> using namespace std; void testSetPixel(ogSurface& buf) { uInt32 xx,yy; buf.ogClear(buf.ogRGB(0,255,0)); for (yy = 0; yy<=buf.ogGetMaxY(); yy++) for (xx = 0; xx<=buf.ogGetMaxX(); xx++) buf.ogSetPixel(xx,yy,xx*yy); getc(stdin); return; } // testSetPixel void testRect(ogSurface& buf) { uInt32 count; if (buf.ogGetBPP()==8) for (count=0; count<1000; count++) buf.ogRect(buf.ogGetMaxX() / 2 - count, buf.ogGetMaxY() / 2 - count, buf.ogGetMaxX() / 2 + count, buf.ogGetMaxY() / 2 + count, count); else for (count=0; count<1000; count++) buf.ogRect(buf.ogGetMaxX() / 2 - count, buf.ogGetMaxY() / 2 - count, buf.ogGetMaxX() / 2 + count, buf.ogGetMaxY() / 2 + count, buf.ogRGB(count,count,count)); getc(stdin); return; } // testRect void testLine(ogSurface & buf) { uInt32 count; uInt32 colour; buf.ogClear(0); if (buf.ogGetBPP()==8) for (count=0; count<(buf.ogGetMaxX()+1); count+=2) { buf.ogLine(count,0,buf.ogGetMaxX()-count,buf.ogGetMaxY(),count); } // for else { colour = 255; for (count = 0; count < (buf.ogGetMaxX()+1)/2; count+=4) { buf.ogLine(buf.ogGetMaxX()/2, buf.ogGetMaxY()/2, buf.ogGetMaxX()/2-count,buf.ogGetMaxY(), buf.ogRGB(colour,colour,colour)); buf.ogLine(buf.ogGetMaxX()/2, buf.ogGetMaxY()/2, buf.ogGetMaxX()/2+count,buf.ogGetMaxY(), buf.ogRGB(colour,colour,colour)); buf.ogLine(buf.ogGetMaxX()/2, buf.ogGetMaxY()/2, buf.ogGetMaxX()/2-count,0, buf.ogRGB(0,colour,0)); buf.ogLine(buf.ogGetMaxX()/2, buf.ogGetMaxY()/2, buf.ogGetMaxX()/2+count,0, buf.ogRGB(0,colour,0)); --colour; } // for colour = 255; for (count = 0; count < (buf.ogGetMaxY()+1)/2; count+=4) { buf.ogLine(buf.ogGetMaxX()/2, buf.ogGetMaxY()/2, 0, buf.ogGetMaxY()/2-count, buf.ogRGB(colour,0,0)); buf.ogLine(buf.ogGetMaxX()/2, buf.ogGetMaxY()/2, 0, buf.ogGetMaxY()/2+count, buf.ogRGB(colour,0,0)); buf.ogLine(buf.ogGetMaxX()/2, buf.ogGetMaxY()/2, buf.ogGetMaxX(), buf.ogGetMaxY()/2-count, buf.ogRGB(0,0,colour)); buf.ogLine(buf.ogGetMaxX()/2, buf.ogGetMaxY()/2, buf.ogGetMaxX(), buf.ogGetMaxY()/2+count, buf.ogRGB(0,0,colour)); --colour; } // for } // else getc(stdin); return; } // testLine void testClear(ogSurface & buf) { uInt32 count; if (buf.ogGetBPP()==8) for (count=0; count<256; count++) buf.ogClear(count); else { for (count=0; count<256; count+=8) buf.ogClear(buf.ogRGB(count,0,0)); for (count=0; count<256; count+=8) buf.ogClear(buf.ogRGB(0,count,0)); for (count=0; count<256; count+=8) buf.ogClear(buf.ogRGB(0,0,count)); for (count=0; count<256; count+=8) buf.ogClear(buf.ogRGB(count,count,count)); } // else getc(stdin); return; } // testClear void testCircle(ogSurface & buf) { uInt32 count; if (buf.ogGetBPP()==8) for (count=0; count<1000; count++) buf.ogCircle(buf.ogGetMaxX()/2,buf.ogGetMaxY()/2, count, count); else for (count=0; count<1000; count++) buf.ogCircle(buf.ogGetMaxX()/2,buf.ogGetMaxY()/2,count,buf.ogRGB(count,0,count)); getc(stdin); } // testCircle void testVFlip(ogSurface & buf) { buf.ogVFlip(); getc(stdin); return; } // testVFlip void testHFlip(ogSurface & buf) { buf.ogHFlip(); getc(stdin); return; } // testHFlip void testArc(ogSurface & buf) { uInt32 radius; uInt32 mid_x, mid_y; mid_x = buf.ogGetMaxX()/2; mid_y = buf.ogGetMaxY()/2; if (buf.ogGetBPP()==8) { for (radius = 1; radius <9; radius++) { buf.ogArc(mid_x, mid_y, radius*10, 0, 90, radius*15); buf.ogArc(mid_x, mid_y, radius*10, 180,270, 249-(radius-1)*16); } // for } else { for (radius = 1; radius <255; radius++) { buf.ogArc(mid_x, mid_y, radius, 0, 90, buf.ogRGB(radius,radius,0)); buf.ogArc(mid_x, mid_y, radius, 180,270,buf.ogRGB(0,255-radius,255-radius)); } // for } // else getchar(); return; } // testArc void testCubicBezierCurve(ogSurface & buf) { buf.ogCubicBezierCurve(100, 100, 300,50, 400,120, 350,300, 25, buf.ogRGB(255,255,255)); getchar(); return; } // testCubicBezierCurve void testCurve(ogSurface & buf) { buf.ogCurve(10,10,100,30,35,160,20,buf.ogRGB(255,255,255)); getchar(); return; } // testCurve void testSprite(ogSurface & buf) { uInt32 count; uInt32 w,h; ogSprite * sprite = NULL; sprite = new ogSprite(); buf.ogClear(0); testLine(buf); if (buf.ogGetBPP()==8) sprite->get(buf, buf.ogGetMaxX()/2-80,buf.ogGetMaxY()/2-80, buf.ogGetMaxX()/2+80,buf.ogGetMaxY()/2+80); else sprite->get(buf, buf.ogGetMaxX()/2-150,buf.ogGetMaxY()/2-150, buf.ogGetMaxX()/2+150,buf.ogGetMaxY()/2+150); sprite->save("test.spr"); delete sprite; sprite = new ogSprite(); sprite->load("test.spr"); w = sprite->getWidth()/2; h = sprite->getHeight()/2; buf.ogClear(0); sprite->put(buf,-10000,-10000); // test *really* off the screen sprite->put(buf,10000,10000); // test *really* off the screen sprite->put(buf,buf.ogGetMaxX()/2-w,buf.ogGetMaxY()/2-h); sprite->put(buf,-w,-h); sprite->put(buf,buf.ogGetMaxX()/2-w,-h); sprite->put(buf,buf.ogGetMaxX()-w,-h); sprite->put(buf,-w,buf.ogGetMaxY()/2-h); sprite->put(buf,buf.ogGetMaxX()-w,buf.ogGetMaxY()/2-h); sprite->put(buf,-w,buf.ogGetMaxY()-h); sprite->put(buf,buf.ogGetMaxX()/2-w,buf.ogGetMaxY()-h); sprite->put(buf,buf.ogGetMaxX()-w,buf.ogGetMaxY()-h); getc(stdin); for (count = 0; count < 256; count++) { sprite->put(buf,random() % (buf.ogGetMaxX()+sprite->getWidth()) - sprite->getWidth(), random() % (buf.ogGetMaxY()+sprite->getHeight()) - sprite->getHeight()); } // for delete sprite; getc(stdin); return; } // testSprite void testBlit(ogSurface & buf) { int32 xx, yy, count; ogBlit * blit = NULL; blit = new ogBlit(); buf.ogClear(0); for (xx= 0; xx<= 20; xx++) { buf.ogLine(128,0,128-xx*6,255,buf.ogRGB(255,255,255)); buf.ogLine(128,0,128+xx*6,255,buf.ogRGB(255,255,255)); buf.ogLine(128,255,128-xx*6,0,buf.ogRGB(255,255,255)); buf.ogLine(128,255,128+xx*6,0,buf.ogRGB(255,255,255)); } // for buf.ogFillCircle(128,128,60,buf.ogRGB(255,255,255)); blit->get(buf,0,0,255,255); for (yy = 0; yy<=(int32)buf.ogGetMaxY(); yy++) for (xx = 0; xx<=(int32)buf.ogGetMaxX(); xx++) buf.ogSetPixel(xx,yy,xx*yy); blit->save("test.blt"); delete blit; blit = new ogBlit(); blit->load("test.blt"); blit->put(buf,-10000,-10000); // test *really* off the screen blit->put(buf,10000,10000); // test *really* off the screen blit->put(buf,-128,-128); blit->put(buf,buf.ogGetMaxX()/2-128,-128); blit->put(buf,buf.ogGetMaxX()-128,-128); blit->put(buf,-128,buf.ogGetMaxY()/2-128); blit->put(buf,buf.ogGetMaxX()/2-128,buf.ogGetMaxY()/2-128); blit->put(buf,buf.ogGetMaxX()-128,buf.ogGetMaxY()/2-128); blit->put(buf,-128,buf.ogGetMaxY()-128); blit->put(buf,buf.ogGetMaxX()/2-128,buf.ogGetMaxY()-128); blit->put(buf,buf.ogGetMaxX()-128,buf.ogGetMaxY()-128); getc(stdin); buf.ogClear(0); for (yy = 0; yy<=(int32)buf.ogGetMaxY(); yy++) for (xx = 0; xx<=(int32)buf.ogGetMaxX(); xx++) buf.ogSetPixel(xx,yy,xx*yy); blit->getBlitWithMask(buf, buf.ogGetMaxX()/2-blit->getWidth(), buf.ogGetMaxY()/2-blit->getHeight()); buf.ogClear(0); blit->put(buf,-10000,-10000); // test *really* off the screen blit->put(buf,10000,10000); // test *really* off the screen blit->put(buf,-128,-128); blit->put(buf,buf.ogGetMaxX()/2-128,-128); blit->put(buf,buf.ogGetMaxX()-128,-128); blit->put(buf,-128,buf.ogGetMaxY()/2-128); blit->put(buf,buf.ogGetMaxX()/2-128,buf.ogGetMaxY()/2-128); blit->put(buf,buf.ogGetMaxX()-128,buf.ogGetMaxY()/2-128); blit->put(buf,-128,buf.ogGetMaxY()-128); blit->put(buf,buf.ogGetMaxX()/2-128,buf.ogGetMaxY()-128); blit->put(buf,buf.ogGetMaxX()-128,buf.ogGetMaxY()-128); getc(stdin); for (count = 0; count < 1000; count++) { blit->put(buf,random() % (buf.ogGetMaxX()+blit->getWidth()) - blit->getWidth(), random() % (buf.ogGetMaxY()+blit->getHeight()) - blit->getHeight()); } // for getc(stdin); for (yy = 0; yy<=(int32)buf.ogGetMaxY(); yy++) for (xx = 0; xx<=(int32)buf.ogGetMaxX(); xx++) buf.ogSetPixel(xx,yy,xx*yy); blit->getBlitWithMask(buf,buf.ogGetMaxX()/2,buf.ogGetMaxY()-128); buf.ogClear(buf.ogRGB(128,128,128)); blit->put(buf,buf.ogGetMaxX()/2-128,buf.ogGetMaxY()/2-128); getc(stdin); delete blit; return; } // testBlit void testBlit2(ogSurface & buf) { ogBlit * blit = new ogBlit(); ogSurface * buf2 = new ogSurface(); ogSurface * blitsource = new ogSurface(); uInt32 xx,yy,count,colour; buf.ogClear(0); buf2->ogClone(buf); blitsource->ogClone(buf); colour = 255; for (count = 0; count < (buf2->ogGetMaxX()+1)/2; count+=4) { buf2->ogLine(buf2->ogGetMaxX()/2, buf2->ogGetMaxY()/2, buf2->ogGetMaxX()/2-count,buf2->ogGetMaxY(), buf2->ogRGB(colour,colour,colour)); buf2->ogLine(buf2->ogGetMaxX()/2, buf2->ogGetMaxY()/2, buf2->ogGetMaxX()/2+count,buf2->ogGetMaxY(), buf2->ogRGB(colour,colour,colour)); buf2->ogLine(buf2->ogGetMaxX()/2, buf2->ogGetMaxY()/2, buf2->ogGetMaxX()/2-count,0, buf2->ogRGB(0,colour,0)); buf2->ogLine(buf2->ogGetMaxX()/2, buf2->ogGetMaxY()/2, buf2->ogGetMaxX()/2+count,0, buf2->ogRGB(0,colour,0)); --colour; } // for colour = 255; for (count = 0; count < (buf.ogGetMaxY()+1)/2; count+=4) { buf2->ogLine(buf2->ogGetMaxX()/2, buf2->ogGetMaxY()/2, 0, buf2->ogGetMaxY()/2-count, buf2->ogRGB(colour,0,0)); buf2->ogLine(buf2->ogGetMaxX()/2, buf2->ogGetMaxY()/2, 0, buf2->ogGetMaxY()/2+count, buf2->ogRGB(colour,0,0)); buf2->ogLine(buf2->ogGetMaxX()/2, buf2->ogGetMaxY()/2, buf2->ogGetMaxX(), buf2->ogGetMaxY()/2-count, buf2->ogRGB(0,0,colour)); buf2->ogLine(buf2->ogGetMaxX()/2, buf2->ogGetMaxY()/2, buf2->ogGetMaxX(), buf2->ogGetMaxY()/2+count, buf2->ogRGB(0,0,colour)); --colour; } // for for (yy = 0; yy<=buf2->ogGetMaxY(); yy++) for (xx = 0; xx<=buf2->ogGetMaxX(); xx++) buf2->ogSetPixel(xx,yy,xx*yy); for (count = 0; count<200; count++) blitsource->ogFillCircle(random() % blitsource->ogGetMaxX(), random() % blitsource->ogGetMaxY(), random() % 35+1,blitsource->ogRGB(255,255,255)); blit->get(*blitsource,0,0,blitsource->ogGetMaxX(),blitsource->ogGetMaxY()); blit->save("bigblit.blt"); delete blit; blit = new ogBlit; blit->load("bigblit.blt"); for (count = 0; count<=256; count+=4) { for (yy = 0; yy<=buf2->ogGetMaxY(); yy++) for (xx = 0; xx<=buf2->ogGetMaxX(); xx++) buf2->ogSetPixel(xx,yy,xx*yy*count); blit->getBlitWithMask(*buf2,0,0); blit->put(buf,0,0); } // for getc(stdin); delete blitsource; delete buf2; delete blit; return; } // testBlit2 void testBlit3(ogSurface & buf) { int32 count; ogBlit * blit = NULL; ogSurface * buf2 = NULL; buf2 = new ogSurface(); blit = new ogBlit(); buf.ogClear(0); buf.ogFillCircle(buf.ogGetMaxX()/2,buf.ogGetMaxY()/2,14,buf.ogRGB(255,255,255)); blit->get(buf,buf.ogGetMaxX()/2-20,buf.ogGetMaxY()/2-20, buf.ogGetMaxX()/2+20,buf.ogGetMaxY()/2+20); blit->put(buf,0,0); for (count=0; count<(int32)buf.ogGetMaxX(); count++) buf.ogLine(count,0,count,buf.ogGetMaxY(),count); buf2->ogClone(buf); blit->getBlitWithMask(*buf2,10,10); buf.ogClear(buf.ogRGB(63,63,63)); for (count=-40; count<(int32)buf.ogGetMaxX()+10; count++) { blit->getBlitWithMask(*buf2,count,buf2->ogGetMaxY()/2-20); blit->put(buf,count,buf.ogGetMaxY()/2-20); blit->getBlitWithMask(*buf2,buf2->ogGetMaxX()/2-20,count); blit->put(buf,buf.ogGetMaxX()/2-20,count); } getc(stdin); delete blit; return; } // testBlit3 void testSaveLoadPal(ogSurface & buf) { uInt32 count; testRect(buf); for (count=0; count<256; count++) buf.ogSetRGBPalette(count,count,count,count); if (buf.ogSavePal("test.pal")==false) cout << "ogSavePal() failed" << endl; for (count=0; count<256; count++) buf.ogSetRGBPalette(count,0,0,0); if (buf.ogLoadPal("test.pal")==false) cout << "ogLoadPal() failed" << endl; testRect(buf); } // testSaveLoadPal void testPolygon(ogSurface & buf) { ogPoint points[16]; uInt32 count; buf.ogClear(0); for (count=0; count<16; count++) { points[count].x = random() % buf.ogGetMaxX(); points[count].y = random() % buf.ogGetMaxY(); } // for buf.ogFillPolygon(16, points, buf.ogRGB(random() & 255,random() & 255,random() & 255)); getc(stdin); return; } // testPolygon void testSpline(ogSurface & buf) { ogPoint points[8]; uInt32 i; for (i=0; i<8; i++) { points[i].x = random() % buf.ogGetMaxX(); points[i].y = random() % buf.ogGetMaxY(); } // for buf.ogClear(0); buf.ogPolygon(8, points, buf.ogRGB(22,229,52)); buf.ogSpline(8, points, 24, buf.ogRGB(64,64,255)); buf.ogBSpline(8, points, 24, buf.ogRGB(255,128,128)); getchar(); return; } // testSpline int main() { ogSurface* buf = NULL; // ogSurface* screen = NULL; buf = new ogSurface(); // screen = new ogDisplay_VESA(); if (buf->ogCreate(1024,768,OG_PIXFMT_32BPP)==false) exit(1); // screen->ogCreate(800,600,OG_PIXFMT_32BPP); srandom(time(NULL)); cout << "TestRect()" << endl; testRect(*buf); cout << "testCircle()" << endl; testCircle(*buf); cout << "TestLine()" << endl; testLine(*buf); cout << "TestVFlip()" << endl; testVFlip(*buf); cout << "TestHFlip()" << endl; testHFlip(*buf); cout << "TestArc()" << endl; testArc(*buf); cout << "TestSetPixel()" << endl; testSetPixel(*buf); cout << "TestClear()" << endl; testClear(*buf); cout << "TestSprite()" << endl; testSprite(*buf); cout << "TestBlit()" << endl; testBlit(*buf); // cout << "TestBlit2()" << endl; // testBlit2(*buf); // testBlit3(*buf); // special test for 320x200x8bpp // testSaveLoadPal(*buf); // use an 8bpp mode cout << "TestPolygon()" << endl; testPolygon(*buf); cout << "TestCurve()" << endl; testCurve(*buf); cout << "TestSpline()" << endl; testSpline(*buf); delete buf; // delete screen; return(0); }