使用OpenGL在Win32窗口的部分区域进行渲染

3
我有一个普通的Win32窗口,我想仅使用OpenGL来渲染该窗口的一部分。我找到了这个问题:在常规窗口中使用OpenGL(Win32),但我不知道他们如何在窗口内创建面板并获取其DC。
基本上,我想要一个窗口,它可以使用win32绘制按钮、列表及其他元素,并在同一窗口中的某个指定区域内渲染OpenGL内容。
我尝试使用glScissor并清除缓冲区,但这只会用黑色填充整个屏幕和我在清除颜色中指定的部分。
我还尝试使用glViewport,但没有任何效果。

问题归结为:“如何在WinAPI中创建控件”吗?如果是这样,这个教程提供了很好的概述。但我强烈建议不要直接使用WinAPI,因为它需要大量的工作。最好使用一个抽象出来的UI框架。 - BDL
2个回答

3

最终我创建了一个新的小部件,如下所示:

HWND OpenglHWND = CreateWindowW(L"Static", L"",
                  WS_CHILD | WS_VISIBLE | WS_BORDER,
                  200, 10, 300, 300, ParentWindowHandle, 0, 0, NULL);

接下来,您将获得所创建面板的 HWND ,从此处只需像平常一样初始化OpenGL即可。但是,在创建上下文时,使用我们之前获得的HWND的DC!(基本上是为OpenGL上下文使用 GetDC(OpenGLHWND))


-1
你需要创建一个WinForms面板控件(假设你正在使用WinForms?),然后调用GetDC(panel.Handle)方法,将面板的Handle属性作为参数传递。这将为您提供创建OpenGL上下文所需的DC。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接