WPF中winforms面板中的原生OpenGL
Native OpenGL in winforms panel in WPF
在我的项目中,我已经有一个本机c++库包装在c++ CLI中,然后在我的WPF应用程序中引用。在我的应用程序中,我有一个水色的Winforms面板显示:
<WindowsFormsHost x:Name="openGLWF">
<winForms:Panel x:Name="openGLPanel1"
Dock="Fill"
BackColor="Aqua" Paint="Panel_Paint" />
</WindowsFormsHost>
我想做的是让面板被用来从我的本地库绘制我的OpenGL内容。我四处搜索并阅读了暗示这是可能的书籍,但我找到的"解决方案"并不彻底,而且太模糊而无法实现。
注意:在被用户gbjbaanb标记为5年前回答的可能副本后,我的问题不同于他引用的"原始"处理。net 4.0和Winforms,在那里我处理。net 4.5.2和WPF,其中有一个Winforms面板。
工作流程基本上与每个窗口控件或窗口相同。唯一的区别是,不需要构造hwnd,因为这已经由WinForms控件完成了。因此,在Windows-Forms控件上创建OpenGL上下文的示例可能看起来像这样(c++/CLI):
public void InitGL(System::Windows::Forms::UserControl^ userControl)
{
HWND hwnd = (HWND)userControl->Handle.ToPointer();
HDC hdc = GetDC(hwnd);
//From now on everything is similar to initializing a context on any other hdc
PIXELFORMATDESCRIPTOR pfd;
ZeroMemory(&pfd, sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cDepthBits = 24;
int iFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc, iFormat, &pfd);
HGLRC hrc = wglCreateContext(hdc);
wglMakeCurrent(hdc, hrc);
//From now on we have a valid OpenGL context
//Do other stuff like glewInit etc. now
}
请注意,这段代码与这里的代码类似,它已经链接在重复的答案建议中。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 了解 GLM- openGL 中的相机转换
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- OpenGL大的3D纹理(>2GB)非常慢
- OpenGl glm rotate
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- OpenGL在启用深度测试时不会丢弃我的碎片
- OpenGL相机和相机空间转型的困惑
- OpenGL将纹理四边形渲染为(0,0)
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 发布旋转矩阵(openGL/glm)
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何使用Qt的原生OpenGL获得总GPU内存?
- 无法构建opengl es 2.0 c++原生android项目.(致命错误:android/sensor.h:没有这样
- 跨平台硬件原生OpenGL库,可能带有多媒体
- 在opengl原生Android中显示原始数据的纹理
- WPF中winforms面板中的原生OpenGL