[英]How to properly initialize OpenGL in ActiveX controls?
我正在嘗試使用OpenGL創建一個簡單的ActiveX控件。 我在PreCreateWindow中添加了一些樣式:
BOOL CMFCActiveXControl1Ctrl::PreCreateWindow(CREATESTRUCT& cs) {
cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
cs.lpszClass = _T("STATIC");
return COleControl::PreCreateWindow(cs);
}
OpenGL的初始化:
int CMFCActiveXControl1Ctrl::OnCreate(LPCREATESTRUCT lpCreateStruct) {
PIXELFORMATDESCRIPTOR pfd = { 0 };
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;
hDC = ::GetDC(m_hWnd);
int format = ChoosePixelFormat(hDC, &pfd);
SetPixelFormat(hDC, format, &pfd);
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
return 0;
}
然后我嘗試用紅色清除顏色緩沖區,但我看到的只是一個黑色方塊:
void CMFCActiveXControl1Ctrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
if (!pdc)
return;
glClearColor(1, 0, 0, 0);
SwapBuffers(wglGetCurrentDC());
}
glClearColor (...)
實際上不會清除顏色緩沖區,它只是設置調用glClear (...)
時將使用的顏色。
GL3中有一個新功能: glClearBuffer (...)
可用於在一次調用中將緩沖區清除為所有顯式值,但是通常情況下,您需要在設置透明顏色后調用glClear (GL_COLOR_BUFFER_BIT)
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.