OpenGL之像素格式
在OpenGL工作之前需要設定當前環境設備(顯卡)像素格式,只需三步:
設定像素格式 |
簡介 |
PIXELFORMATDESCRIPTOR |
填充像素格式 |
ChoosePixelFormat() |
獲取顯卡支持的像素格式,返回索引 |
SetPixelFormat() |
設置當前環境設備(顯卡)的像素格式 |
PIXELFORMATDESCRIPTOR需要填補的數值較多
字段 |
填充數值 |
像素格式簡介 |
iPixelType |
sizeof(PIXELFORMATDESCRIPTOR) |
結構的大小 |
nVersion |
1 |
版本號填1 |
dwFlags |
PFD_DRAW_TO_WINDOW |
支持在窗口繪畫 |
PFD_DRAW_TO_BITMAP |
支持在位圖繪畫 |
PFD_SUPPORT_GDI |
緩存支持GUI繪畫 |
PFD_SUPPORT_OPENGL |
緩存支持OPENGL繪畫 |
PFD_GENERIC_ACCELERATED |
|
PFD_GENERIC_FORMAT |
|
PFD_NEED_PALETTE |
|
PFD_NEED_SYSTEM_PALETTE |
|
PFD_DOUBLEBUFFER |
支持雙緩存 |
PFD_STEREO |
|
PFD_SWAP_LAYER_BUFFERS |
支持交換Layer緩存 |
PFD_DEPTH_DONTCARE |
支持Z緩存 |
PFD_DOUBLEBUFFER_DONTCARE |
|
PFD_STEREO_DONTCARE |
|
iPixelType |
PFD_TYPE_RGBA |
RGBA像素 |
PFD_TYPE_COLORINDEX |
256色使用調色板索引 |
cColorBits |
32、24、16、8 |
每像素所占字節數 |
cRedBits |
0 |
紅色所占Bit數 |
cRedShift |
0 |
紅色偏移Bit量 |
cGreenBits |
0 |
綠色所占Bit數 |
cGreenShift |
0 |
綠色偏移Bit量 |
cBlueBits |
0 |
藍色所占Bit數 |
cBlueShift |
0 |
藍色偏移Bit量 |
cAlphaBits |
0 |
Alpha所占Bit數 |
cAlphaShift |
0 |
Alpha偏移Bit量 |
cAccumBits |
0 |
累加緩存Bit數 |
cAccumRedBits |
0 |
紅色累加緩存Bit數 |
cAccumGreenBits |
0 |
綠色累加緩存Bit數 |
cAccumBlueBits |
0 |
藍色累加緩存Bit數 |
cAccumAlphaBits |
0 |
Alpha累加緩存Bit數 |
cDepthBits |
16 |
z-buffer(Z緩存)大小 |
cStencilBits |
0 |
模板緩存Bit數 |
cAuxBuffers |
0 |
輔助緩存Bit數 |
iLayerType |
0 |
繪製平面 |
bReserved |
0 |
保留字段 |
dwLayerMask |
0 |
不在使用 |
dwVisibleMask |
0 |
透明色掩碼索引 |
dwDamageMask |
0 |
不在使用 |
最後給出完整代碼
void Setup_PixelFormat_OpenGL(HDC hDC)
{
PIXELFORMATDESCRIPTOR pfd;
int index;
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);// 結構的大小
pfd.nVersion = 1;//版本號填1
pfd.dwFlags = PFD_DRAW_TO_WINDOW |// 支持窗口
PFD_SUPPORT_OPENGL |// 支持OPENGL
PFD_DOUBLEBUFFER ;// 支持雙緩存
pfd.iPixelType = PFD_TYPE_RGBA;// 像素數據類型RGBA
pfd.cColorBits = 16;// 16bit每像素所占字節數
pfd.cRedBits = 0;// 紅色所占Bit數
pfd.cRedShift = 0;// 紅色偏移Bit量
pfd.cGreenBits = 0;// 綠色所占Bit數
pfd.cGreenShift = 0;// 綠色偏移Bit量
pfd.cBlueBits = 0;// 藍色所占Bit數
pfd.cBlueShift = 0;// 藍色偏移Bit量
pfd.cAlphaBits = 0;// Alpha所占Bit數
pfd.cAlphaShift = 0;// Alpha偏移Bit量
pfd.cAccumBits = 0;// 累加緩存Bit數
pfd.cAccumRedBits = 0;// 紅色累加緩存Bit數
pfd.cAccumGreenBits = 0;// 綠色累加緩存Bit數
pfd.cAccumBlueBits = 0;// 藍色累加緩存Bit數
pfd.cAccumAlphaBits = 0;// Alpha累加緩存Bit數
pfd.cDepthBits = 16;// 16bit z-buffer(Z緩存)大小
pfd.cStencilBits = 0;// 模板緩存Bit數
pfd.cAuxBuffers = 0;// 輔助緩存Bit數
pfd.iLayerType = 0;// 無繪製平面
pfd.bReserved = 0;// 保留字段
pfd.dwLayerMask = 0;// 不在使用
pfd.dwVisibleMask = 0;// 透明色掩碼索引
pfd.dwDamageMask = 0;// 不再使用了
// 獲取當前環境設備(顯卡)支持的像素格式,返回索引
index = ::ChoosePixelFormat(hDC,&pfd);
// 設置當前環境設備(顯卡)的像素格式
::SetPixelFormat(hDC,index,&pfd);
}
你必須登入才能發表留言。