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);
}
你必須登入才能發表留言。