在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);
}