【问题标题】:How to implement two same OpenGL UserControl in the same one form with C++?如何使用 C++ 以相同的一种形式实现两个相同的 OpenGL UserControl?
【发布时间】:2013-08-16 08:20:47
【问题描述】:

我试图以相同的形式实现(即绘制)两个具有相同 OpenGL 上下文的 UserControl。换句话说,我想在表格上同时显示两张相同的图片。我的工具是VC6,使用C++。

我尝试了很多方法,但都失败了。谁能给我一个简单的示例代码或一些建议?

【问题讨论】:

  • 什么是“用户控件”?
  • VC6 太老了,安装 Qt 5 + mingw,你的表单和 UserControl 就会活起来。
  • 我理解您的问题的方式是,您希望在 opengl 画布中显示两个图像,并在这些图像之上实现类似按钮的行为。对吗?
  • @NicolBolas 这是一个 3D 对象。

标签: c++ multithreading opengl visual-c++-6


【解决方案1】:

编辑

看起来有两种可能性 - 要么将最终图像复制到第二个 GUI 元素,要么为第二个元素创建第二个“设备上下文”,使用 *MakeCurrent 更改它(参见下面的链接和讨论)并重新渲染或 blit 结果。

复制: 假设 GL 上下文直接绘制到您的主要 GUI 元素(这将阻止您使用 GUI 库进行复制),您可以通过 glReadPixels 复制数据或通过帧缓冲区对象研究绘制到纹理并使用 @987654322 @。然后我想找到一些方法在第二个 GUI 元素上显示原始图像数据(这部分我没有经验)。

使当前: Make current OpenGL context on Linux

【讨论】:

  • 这是不正确的:OpenGL only supports a single main framebuffer。 OpenGL 实际上根本没有定义主帧缓冲区。它确实声明,当绑定到可绘制对象时,存在某种可见的帧缓冲区,但它并不特定于上下文。 OpenGL 上下文可以绑定到与其兼容的任何可绘制对象,每个可绘制对象都是自己的独立帧缓冲区。
  • @datenwolf 好的,让我改一下。当我使用过 OpenGL(webgl、android、java、python、c/c++)时,总是有一个可以绘制的默认缓冲区(不管规格如何)。除了 webgl,我可以明确地请求双缓冲。我还可以绑定一个 FBO 来更改我的渲染目标,而不是我们所称的默认(或“主”)目标。我从未见过的是多个默认/“主要”目标,我已经向 OP 询问了这些目标。你能帮忙......你知道这是否可能吗?
  • WebGL 不是 OpenGL。 OpenGL 的 Android/Java 绑定将其包装在约束中。但是,如果您在系统级别使用 OpenGL,即使用 WGL、GLX 或 EGL 创建上下文,您将有一个名为 {wgl,glX,egl}MakeCurrent 的特定函数,它将上下文 它应该制作的可绘制对象作为参数活跃于。只要上下文与可绘制对象兼容,您就可以在可绘制对象之间任意切换上下文,它们甚至可以驻留在不同的顶级窗口中,或者完全不在屏幕上。你给出的答案是完全错误的。
  • 假设的默认帧缓冲区只是 OpenGL 上下文被便利包装器绑定到的窗口。但实际上,当第一次创建 OpenGL 上下文时,会调用 *MakeCurrent
  • 谢谢。我以前从未在 OpenGL 中使用过多个线程、上下文甚至窗口。这听起来与OP想要的相似。也许您可以更详细地描述将上下文附加到“可绘制对象”的想法,或者简单地链接到这样做的地方。指出不正确的假设是好的(如果你能减少贬义:)),提供答案和帮助会更好。在这种情况下,否决这个问题当然没有帮助。
猜你喜欢
  • 2010-09-29
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多