关于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);