opengl的PIXELFORMATDESCRIPTOR

原文轉自   http://hi.baidu.com/beyoar/item/4a74a89c26b80ede1f4271b6

表述像素格式:PIXELFORMATDESCRIPTOR

在OpenGL對窗口渲染之前,必須根據渲染需要對窗口進行配置。
需要硬件渲染還是軟件渲染?
渲染使用單緩衝還是雙緩衝?
是否需要深度緩衝區?
是否需要模板、目標Alpha或積累緩衝區?
當爲窗口設置這些參數之後,就無法對它們進行修改。爲了從一個只有深度緩衝和顏色緩衝區的窗口切換到一個帶有模板緩衝區的窗口,必須首先銷燬第一個窗口,然後根據需要重新創建一個窗口。
  
[ OpenGL] 
PIXELFORMATDESCRIPTOR
The PIXELFORMATDESCRIPTOR structure describes the pixel format of a drawing surface.

typedef struct tagPIXELFORMATDESCRIPTOR 
{ // pfd   
      WORD      nSize;               //結構大小:      sizeof(PIXELFORMATDISCRIPTOR)
      WORD      nVersion;            //版本:總設置爲1    
      DWORD dwFlags;             //像素緩衝區的屬性標記
      BYTE      iPixelType;          //像素數據的類型 
      BYTE      cColorBits;          //顏色緩衝區中位平面的數量
      BYTE      cRedBits;            //用多少位表示紅色
      BYTE      cRedShift;           //紅色位的移位計數
      BYTE      cGreenBits;          //
      BYTE      cGreenShift;         // 
      BYTE      cBlueBits;           //
      BYTE      cBlueShift;          //
      BYTE      cAlphaBits;          //
      BYTE      cAlphaShift;         //
      BYTE      cAccumBits;          //積累緩衝區位數 
      BYTE      cAccumRedBits;       //積累緩衝區中紅色的位數
      BYTE      cAccumGreenBits; 
      BYTE      cAccumBlueBits; 
      BYTE      cAccumAlphaBits; 
      BYTE      cDepthBits;          //深度緩衝區位數
      BYTE      cStencilBits;        //模板緩衝區位數
      BYTE      cAuxBuffers;         //多少個輔助緩衝區
      BYTE      iLayerType;          //過時或忽略
      BYTE      bReserved;           //上層或下層平面的數量
      DWORD dwLayerMask;         //過時或忽略
      DWORD dwVisibleMask;       //下平面的透明顏色
      DWORD dwDamageMask;        //過時或忽略
} PIXELFORMATDESCRIPTOR; 
  
//************************************************************************
//設置窗口像素格式
//************************************************************************  
GLuint      PixelFormat;       // Holds The Results After Searching For A Match
static PIXELFORMATDESCRIPTOR pfd=       // pfd Tells Windows How We Want Things To Be
{
       sizeof(PIXELFORMATDESCRIPTOR),       // Size Of This Pixel Format Descriptor
       1,                                   // Version Number
       PFD_DRAW_TO_WINDOW |                 // Format Must Support Window
       PFD_SUPPORT_OPENGL |                 // Format Must Support OpenGL
       PFD_DOUBLEBUFFER,                    // Must Support Double Buffering
       PFD_TYPE_RGBA,                       // Request An RGBA Format
       32,                           // Select Our Color Depth
       0, 0, 0, 0, 0, 0,                    // Color Bits Ignored
       0,                                   // No Alpha Buffer
       0,                                   // Shift Bit Ignored
       0,                                   // No Accumulation Buffer
       0, 0, 0, 0,                          // Accumulation Bits Ignored
       16,                                  // 16Bit Z-Buffer (Depth Buffer)  
       1,                                   // No Stencil Buffer
       0,                                   // No Auxiliary Buffer
       PFD_MAIN_PLANE,                      // Main Drawing Layer
       0,                                   // Reserved
       0, 0, 0                              // Layer Masks Ignored
};
if (!PixelFormat=ChoosePixelFormat(m_hDC,&pfd))) // Did Windows Find A Matching Pixel Format?
{
      MessageBox("Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;            // Return FALSE
}

if(!SetPixelFormat(m_hDC,PixelFormat,&pfd))      // Are We Able To Set The Pixel Format?
{
      MessageBox("Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
      return FALSE;            // Return FALSE
}
.....


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章