Kuinka piirtää mahdollisimman nopeasti viiva?
Tossa kehittelemäni viivan piirto.
Kuinka optimoida sitä lisää?
Tai löytyisikö jostain SDL kirjastoa jossa olisi nopea viiva?
Myös nopeaa pixeliä kaipaisin.
Nuo bufferin lukitukset ja vapautukset vievät Plotissa aikaa...
void Line(Uint16 left,Uint16 top,Uint16 right,Uint16 bottom,Uint8 r, Uint8 g, Uint8 b) { Uint32 g_Color=SDL_MapRGB(screen->format,r,g,b); char* g_pData; SDL_LockSurface(screen); Uint16 temp,dx,dy,x,y,x_sign,y_sign,flag; dx=abs(right-left);dy=abs(bottom-top); if (((dx>=dy) && (left>right)) || ((dy>dx) && (top>bottom))) { temp=left; left=right; right=temp; temp=top; top=bottom; bottom=temp; } if ((bottom-top) < 0) y_sign=-1;else y_sign=1; if ((right-left) < 0) x_sign=-1;else x_sign=1; if (dx>=dy) { for (x=left,y=top,flag=0;x<=right;x++,flag+=dy) { if (flag>=dx) { flag -=dx; y+=y_sign; } //grab pixel pointer g_pData=(char*)screen->pixels; //vertical offset g_pData+=(y*screen->pitch); //horizontal offset g_pData+=(x*screen->format->BytesPerPixel); //copy from color to frame buffer memcpy(g_pData,&g_Color,screen->format->BytesPerPixel); } } else { for (x=left,y=top,flag=0;y<=bottom;y++,flag+=dx) { if (flag>=dy) { flag -=dy; x+=x_sign; } //grab pixel pointer g_pData=(char*)screen->pixels; //vertical offset g_pData+=(y*screen->pitch); //horizontal offset g_pData+=(x*screen->format->BytesPerPixel); //copy from color to frame buffer memcpy(g_pData,&g_Color,screen->format->BytesPerPixel); } } SDL_UnlockSurface(screen); }
Eikö looginen päättely suju?
Ongelma: Lukitukset vievät aikaa.
Ratkaisu: Vähennä lukituksia.
Toteutus: Älä lukitse pintaa joka välissä, vaan laita vain yksi lukitus koko piirtohomman ympärille.
Aihe on jo aika vanha, joten et voi enää vastata siihen.