Win32 像素格式描述符学习
像素格式(PIXELFORMATDESCRIPTOR)明確了OpenGL繪制平面的特性,如象素緩沖區(qū)是單緩沖還是雙緩沖,數(shù)據(jù)是 RGBA方式還是Color Index方式等。
每個OpenGL顯示設(shè)備都支持一種指定的像素格式。一般用一個名為PIXELFORMATDESCRIPTOR的結(jié)構(gòu)來表示某個特殊的像素格式,這個結(jié)構(gòu)包含26個屬性信息。Win32定義PIXELFORMATDESCRIPTOR如下所示:
typedef struct tagPIXELFORMATDESCRIPTOR
{
WORD nSize;
WORD nVersion;
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;
前兩個成員,結(jié)構(gòu)體大小,版本;
第三個成員,多個標志 | 起來;
具體參閱:
https://docs.microsoft.com/en-us/previous-versions//ms537569(v=vs.85)?redirectedfrom=MSDN
bReserved只能設(shè)為0,
最后三個變量Windows 95都不支持,故全設(shè)置為0;
The PIXELFORMATDESCRIPTOR structure describes the pixel format of a drawing surface.
像素格式描述符結(jié)構(gòu)體描述了一個繪圖表面的像素格式。
iLayerType
Ignored. Earlier implementations of OpenGL used this member, but it is no longer used.
倒數(shù)第五個成員;早期OpenGL版本使用這個成員,它已不再使用;
?
VC++ 2012,新建一個單文檔工程;
先初始化此結(jié)構(gòu)體;把返回地址選擇進設(shè)備描述表;然后才能進行后續(xù)的繪圖;
看一下是否初始化成功;把相關(guān)返回值輸出一下;
void CpixeltestView::OnDraw(CDC* pDC) {CpixeltestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此處為本機數(shù)據(jù)添加繪制代碼CDC* pmyDC;CString str1;PIXELFORMATDESCRIPTOR pfd ={sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER, PFD_TYPE_RGBA,24,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,0,0};str1.Format(_T("%x"), pfd);pDC->TextOutW(50, 50, str1);pmyDC = new CClientDC(this);int pixelFormat = ChoosePixelFormat(pmyDC->GetSafeHdc(), &pfd);str1.Format(_T("%x"), pmyDC);pDC->TextOutW(50, 80, str1);str1.Format(_T("%d"), pixelFormat);pDC->TextOutW(50, 110, str1); }運行如下;
?
總結(jié)
以上是生活随笔為你收集整理的Win32 像素格式描述符学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初次使用Windbg调试简单C++程序
- 下一篇: VC++格式化输出单个字符和格式化输出十