注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ocean's blog

平常心——可以寂寞,但不允许空虚

 
 
 

日志

 
 

OpenGL窗口渲染  

2009-05-30 14:40:39|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
表述像素格式:PIXELFORMATDESCRIPTOR

  
在OpenGL对窗口渲染之前,必须根据渲染需要对窗口进行配置。
  需要硬件渲染还是软件渲染?
  渲染使用单缓冲还是双缓冲?
  是否需要深度缓冲区?
  是否需要模板、目标Alpha或积累缓冲区?
  当为窗口设置这些参数之后,就无法对它们进行修改。为了从一个只有深度缓冲和颜色缓冲区的窗口切换到一个带有模板缓冲区的窗口,必须首先销毁第一个窗口,然后根据需要重新创建一个窗口。
  说明:
  在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
}
  评论这张
 
阅读(113)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017