Date

DDPIXELFORMATを指定すれば YV12 型のサーフェイスを作れる。ただしDDSCAPS_SYSTEMMEMORY には作成できない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize =sizeof(ddsd);
ddsd.dwWidth=512;
ddsd.dwHeight=512;
ddsd.dwFlags=DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
ddsd.ddpfPixelFormat.dwFlags  = DDPF_FOURCC | DDPF_YUV;
ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC('Y','V','2');
ddsd.ddpfPixelFormat.dwYUVBitCount = 12;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN
    | DDSCAPS_VIDEOMEMORY | DDSCAPS_NONLOCALVIDMEM;
    // | DDSCAPS_SYSTEMMEMORY; // これは ×
hRet=g_pDD->CreateSurface(&ddsd,&g_pDDSOffScr,NULL);
DDPIXELFORMAT px={sizeof(DDPIXELFORMAT)};
hRet=g_pDDSOffScr->GetPixelFormat(&px);
hRet=g_pDDSOffScr->Lock(NULL);

// do something

hRet=g_pDDSOffScr->Unlock(NULL);

Comments

comments powered by Disqus