BOOL COpenGLView::SetupPixelFormat(void) { ::wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC); PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // pfd结构的大小 1, // 版本号 PFD_DRAW_TO_WINDOW | // 支持在窗口中绘图 PFD_SUPPORT_OPENGL | // 支持 OpenGL PFD_DOUBLEBUFFER | PFD_STEREO_DONTCARE,// 双缓存模式 PFD_TYPE_RGBA, // RGBA 颜色模式 24, // 24 位颜色深度 0, 0, 0, 0, 0, 0, // 忽略颜色位 0, // 没有非透明度缓存 0, // 忽略移位位 0, // 无累加缓存 0, 0, 0, 0, // 忽略累加位 32, // 32 位深度缓存 0, // 无模板缓存 0, // 无辅助缓存 PFD_MAIN_PLANE, // 主层 0, // 保留 0, 0, 0 // 忽略层,可见性和损毁掩模 }; int pixelformat; pixelformat = ::ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd);//选择像素格式 ::SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd); //设置像素格式 if(pfd.dwFlags & PFD_NEED_PALETTE) SetLogicalPalette(); //设置逻辑调色板 ::wglMakeCurrent(m_pDC->GetSafeHdc(), NULL); return TRUE; }
bool CLineComputeView::SetupPixelFormat() { PIXELFORMATDESCRIPTOR *pfd = new PIXELFORMATDESCRIPTOR(); pfd->nSize=sizeof(PIXELFORMATDESCRIPTOR); pfd->nVersion=1; pfd->dwFlags=PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL| PFD_DOUBLEBUFFER| PFD_STEREO_DONTCARE; pfd->iPixelType=PFD_TYPE_RGBA; pfd->cColorBits=32; pfd->cRedBits=8; pfd->cRedShift=16; pfd->cGreenBits=8; pfd->cGreenShift=8; pfd->cBlueBits=8; pfd->cBlueShift=0; pfd->cAlphaBits=0; pfd->cAlphaShift=0; pfd->cAccumBits=64; pfd->cAccumRedBits=16; pfd->cAccumGreenBits=16; pfd->cAccumBlueBits=16; pfd->cAccumAlphaBits=0; pfd->cDepthBits=32; pfd->cStencilBits=8; pfd->cAuxBuffers=0; pfd->iLayerType=PFD_MAIN_PLANE; pfd->bReserved=0; pfd->dwLayerMask=0; pfd->dwVisibleMask=0; pfd->dwDamageMask=0; //在COpenGLView中添加保护型的成员变量: int m_GLPixelIndex;CDC *m_pDC; HPALETTE m_hPalette;HGLRC m_hGLContext; //选择一个像素索引 m_GLPixelIndex=::ChoosePixelFormat(m_pDC->GetSafeHdc(),pfd); if (m_GLPixelIndex == 0) { m_GLPixelIndex = 1; if (DescribePixelFormat(m_pDC->GetSafeHdc(), m_GLPixelIndex,sizeof(PIXELFORMATDESCRIPTOR), pfd)==0) { return FALSE; } } //设置像素索引 if (::SetPixelFormat(m_pDC->GetSafeHdc(), m_GLPixelIndex, pfd) == FALSE) { return FALSE; } if (pfd->dwFlags & PFD_NEED_PALETTE) { SetLogicalPalette(); //有必要的话设置逻辑调色板 } return TRUE; }