區別如下:
SDL_SWSURFACE | 從系統記憶體配置使用(system memory) |
---|---|
SDL_HWSURFACE | 從顯示卡記憶體配置使用(video memory if possible), 讀寫Pixels時,需要先呼叫SDL_LockSurface()鎖住記憶體 |
(SDL 1.2.15)src/video/SDL_video.c
583 SDL_Surface * SDL_SetVideoMode (int width, int height, int bpp, Uint32 flags) ... 683 mode = video->SetVideoMode(this, prev_mode,video_w,video_h,video_bpp,flags);
(SDL 1.2.15)src/video/fbcon/SDL_fbvideo.c
998 static SDL_Surface *FB_SetVideoMode(_THIS, SDL_Surface *current, 999 int width, int height, int bpp, Uint32 flags) ... 1132 /* Set up the new mode framebuffer */ 1133 current->flags &= SDL_FULLSCREEN; 1134 if (shadow_fb) { 1135 current->flags |= SDL_SWSURFACE; 1136 } else { 1137 current->flags |= SDL_HWSURFACE; 1138 } 1139 current->w = vinfo.xres; 1140 current->h = vinfo.yres; 1141 if (shadow_fb) { 1142 current->pitch = current->w * ((vinfo.bits_per_pixel + 7) / 8); 1143 current->pixels = shadow_mem; 1144 physlinebytes = finfo.line_length; 1145 } else { 1146 current->pitch = finfo.line_length; 1147 current->pixels = mapped_mem+mapped_offset; 1148 } 1149 1150 /* Set up the information for hardware surfaces */ 1151 surfaces_mem = (char *)current->pixels + 1152 vinfo.yres_virtual*current->pitch; 1153 surfaces_len = (shadow_fb) ? 1154 0 : (mapped_memlen-(surfaces_mem-mapped_mem)); 1155 1156 FB_FreeHWSurfaces(this); 1157 FB_InitHWSurfaces(this, current, surfaces_mem, surfaces_len); 1218 static int FB_InitHWSurfaces(_THIS, SDL_Surface *screen, char *base, int size) 1219 { 1220 vidmem_bucket *bucket; 1221 1222 surfaces_memtotal = size; 1223 surfaces_memleft = size; 1224 1225 if ( surfaces_memleft > 0 ) { 1226 bucket = (vidmem_bucket *)SDL_malloc(sizeof(*bucket));
(SDL 1.2.15)src/stdlib/SDL_malloc.c
614 #define malloc SDL_malloc