关键字:高彩模式 像素格式 DDRAW_INIT_STRUCT
1.高彩模式
非8位调色板模式,使用真正的RGB高色彩模式。
使用高彩模式的影响:
- 计算速度:高彩模式每个像素的占用空间比较高,光栅化的时候,自然会影响到计算速度。
- 内存带宽:由于占用空间的问题,存储器带宽会比cpu速率成为主要制约因素。
2.16位高彩模式
- Alpha.5.5.5:一位alpha,5位red,5位green,5位blue
- X.5.5.5:同Alpha.5.5.5,只是没有用到最高位。但是建议最高位清0。
- 5.6.5:5位red,6位green(人眼对绿色更敏感),5位blue。
宏:1
2
3.24/32位高彩模式
注意:许多显卡不支持24位模式,通常需要32位,第四个字节用于对其边界。
- Alpha(8).8.8.8:最高8位用来表示alpha
- X(8).8.8.8:最高位什么都不表示。但是为了安全起见,设置为0。
宏1
2
4.获取像素格式
IDIRECTDRAWSURFACE7::GetPixelFormat()
原型:1
HRESULT GetPixelFormat(LPDDPIXELFORMAT lpDDPixeFormate);
需要传入LPDDPIXELFORMAT结构,其中dwSize需要先手动填充。GetPixelFormat()会填充dwFlags和dwRGBBitCount等字段。
LPDDPIXELFORMAT中部分字段:1
2
3DWORD dwSize; // size of structure
DWORD dwFlags; // pixel format flags
DWORD dwRGBBitCount; // how many bits per pixel
值 | 描述 |
---|---|
DDPF_ALPHA | 像素格式描述只有一个alpha的表面 |
DDPF_ALPHAPIXELS | 画面有alpha信息的像素格式 |
DDPF_LUMINANCE | 像素格式中有单一透明或者透明alpha分量的画面 |
DDPF_PALETTEINDEXED2 | 画面是2位色彩索引 |
DDPF_PALETTEINDEXED4 | 画面是4位色彩索引 |
DDPF_PALETTEINDEXED8 | 画面是8位色彩索引 |
DDPF_PALETTEINDEXEDTO8 | 画面是1/2/4位色彩索引到8位调色板。即采用了8位调色板模式 |
DDPF_RGB | 像素格式中的RGB数据有效,可以通过dwRGBBitCount获取值 |
DDPF_ZBUFFER | 像素格式描述一个Z缓冲画面 |
DDPF_ZPIXELS | 画面在像素中含有Z信息 |
示例代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34DDPIXELFORMAT ddpixel;
LPDIRECTDRAWSURFACE7 lpdds_primary;
DDRAW_INIT_STRUCT(ddpixel);
lpdds_primary->GetPixelFormat(&ddpixel);
if(ddpixel.dwFlags&DDPF_RGB)
{
switch (ddpixel.dwRGBBitCount)
{
case 15:// 一定是rgb 555
{}
break;
case 16:// 一定是rgb 565
{}
break;
case 24:// 一定是rgb 888
{}
break;
case 32:// 一定是argb 8888
{}
break;
default:
break;
}
}
else if(ddpixel.dwFlags&DDPF_PALETTEINDEXED8)
{
// 8位调色板模式
}
else
{
// 其他模式
}
5.DDRAW_INIT_STRUCT
由于在DX里面,很多结构体都有dwSize字段,使用时都需要先清空,给dwSize赋值,因此,定义宏:1