PIXELFORMATDESCRIPTOR 像素格式描述表

 

像素格式描述表: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
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭