关于DirectX的显示模式由16位升级至32位
之前也发过一个帖子:
http://topic.csdn.net/u/20111019/10/1fbfaacb-5b25-4836-ada7-646e22f07fb2.html
现在我说下详细的情况
现在手头有个游戏的资源编辑器的源码,由于时间比较早(01年的),所以是16位显示的。
1、不设置显示模式也就是说默认系统的32位显示效果如下:
由于32位显示感觉是被压扁了,所以右侧的字也显示出来了
设置显示模式16位显示如下所示:
创建Surface如下:
// Create the primary surface ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize =sizeof(ddsd); ddsd.dwFlags =DDSD_CAPS; ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE; ddrval=lpDD4->CreateSurface(&ddsd,&lpDDSPrimary,NULL); //Back Surface ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwSize =sizeof(ddsd); ddsd.dwFlags =DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH; ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN|DDSCAPS_VIDEOMEMORY|DDSCAPS_3DDEVICE; ddsd.dwWidth =SCREENWIDTH; ddsd.dwHeight =SCREENHEIGHT; ddrval=lpDD4->CreateSurface(&ddsd,&lpDDSBack,NULL); //Buffer Surface ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize =sizeof(ddsd); ddsd.dwFlags =DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;//|DDSD_PIXELFORMAT; ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth =SCREENWIDTH; ddsd.dwHeight =SCREENHEIGHT; ddrval=lpDD4->CreateSurface(&ddsd,&lpDDSBUF,NULL); //buffer surface ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize =sizeof(ddsd); ddsd.dwFlags =DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH; ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth =MAXMAPWIDTH; ddsd.dwHeight =MAXMAPHEIGHT; ddrval=lpDD4->CreateSurface(&ddsd,&lpDDSMAP,NULL);