0

我无法在我的主窗口中的子窗口下渲染我的场景。我有两个注册窗口:

mainwindow = CreateWindow(bgwinNAME,     
                    TEXT("Benchmark"),
                    WS_OVERLAPPEDWINDOW,   
                    CW_USEDEFAULT,     
                    CW_USEDEFAULT,     
                    CW_USEDEFAULT,     
                    CW_USEDEFAULT,     
                    NULL,              
                    NULL,              
                    hInstance,         
                    NULL);             

ShowWindow(mhwnd, SW_MAXIMIZE);
UpdateWindow(mainwindow);

childwindow = CreateWindow(benchwinNAME,       
                    NULL,
                    WS_CHILD, 
                    (GetSystemMetrics(SM_CXSCREEN)-width)/2,     
                    (GetSystemMetrics(SM_CYSCREEN)-hight)/2,     
                    width,       
                    hight,       
                    mainwindow,              
                    NULL,              
                    hInstance,         
                    NULL);             

UpdateWindow(childwindow);

(子窗口稍后显示)

我的循环看起来像:

while(TRUE)
{
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
}
if(msg.message == WM_QUIT)
break;

StartOpenGL(childwindow, &hdc, &hrc );
   // .... my GL functions
SwapBuffers(hdc);
}
StopOpenGL(childwindow, hdc, hrc );
return msg.wParam;  
}

childwindow设置为 hwnd 时StartOpenGL();没有反应,我只能看到一个在窗口类 (hbrBackground) 中定义的带有白色背景的窗口。当 hwnd 设置为mainwindow场景渲染时,范围为SW_MAXIMIZE.

我的 StartOpenGL 和 StopOpenGL 函数来自: 链接

4

1 回答 1

1

请停止使用启动/停止 OpenGL 功能。StartOpenGL 设置只能执行一次的窗口 PIXELFORMATDESCRIPTOR (PFD)。您最好在创建窗口后立即执行此操作。如果您的两个窗口共享一个兼容的 PFD(如果您在设置父窗口的 PFD 之后创建子窗口就是这种情况;您仍然需要为子窗口设置相同的PFD ,您可以简单地使用wglMakeCurrent两个窗口之间的单个 OpenGL 上下文,由它们的 HDC 标识。

于 2013-08-13T08:08:03.480 回答