OpenGL之像素格式

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

}

評論