SDL Linux下的使用 计算机图形学

#include "Ultility.h"    //init the screen    int init(SDL_Surface *&screen,SDL_Surface *&pic,int w,int h)    {        // initialize SDL video        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )        {            printf( "Unable to init SDL: %s\n", SDL_GetError() );            return 1;        }        // make sure SDL cleans up before exit        atexit(SDL_Quit);        // create a new window        screen = SDL_SetVideoMode(w, h, 32,SDL_HWSURFACE|SDL_DOUBLEBUF);        pic = SDL_CreateRGBSurface(SDL_SWSURFACE,w,h,32, 0, 0,0,0);    }    //draw a pixel    void DrawPixel(SDL_Surface *screen, int x,int y,Uint8 R, Uint8 G, Uint8 B)    {        Uint32 color = SDL_MapRGB(screen->format, R, G, B);        if ( SDL_MUSTLOCK(screen) ) {            if ( SDL_LockSurface(screen) < 0 ) {                return;            }        }        switch (screen->format->BytesPerPixel) {            case 1: { /* 假定是8-bpp */               Uint8 *bufp;                bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;                *bufp = color;            }            break;            case 2: { /* 可能是15-bpp 或者 16-bpp */               Uint16 *bufp;                bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;                *bufp = color;            }            break;            case 3: { /* 慢速的24-bpp模式,通常不用 */               Uint8 *bufp;                bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;                *(bufp+screen->format->Rshift/8) = R;                *(bufp+screen->format->Gshift/8) = G;                *(bufp+screen->format->Bshift/8) = B;            }            break;            case 4: { /* 可能是32-bpp */               Uint32 *bufp;                bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;                *bufp = color;            }            break;        }        if ( SDL_MUSTLOCK(screen) ) {            SDL_UnlockSurface(screen);        }        SDL_UpdateRect(screen, x, y, 1, 1);    }    void Load(SDL_Surface *screen,SDL_Surface *pic)    {          // centre the bitmap on screen        SDL_Rect dstrect;        dstrect.x = (screen->w - pic->w) / 2;        dstrect.y = (screen->h - pic->h) / 2;        // DRAWING STARTS HERE        // clear screen        SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));        // draw bitmap        SDL_BlitSurface(pic, 0, screen, &dstrect);        // DRAWING ENDS HERE        // finally, update the screen :)        SDL_Flip(screen);        // free loaded bitmap        SDL_FreeSurface(pic);        // all is well ;)    }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxswz.html