OpenGL多子窗口问题

Posted

技术标签:

【中文标题】OpenGL多子窗口问题【英文标题】:OpenGL multiple subwindow problems 【发布时间】:2013-04-22 07:19:53 【问题描述】:

我的 GL 代码有问题。我在 Ubuntu 12.10 平台上运行,我试图在我创建的两个子窗口中呈现顶点数组数据。我创建了一个主窗口,然后创建了两个子窗口。

我将顶点数据渲染到两个子窗口,但问题是,顶点数据仅渲染到最后声明的子窗口。另一个子窗口保持黑色。

这些是显示回调函数:

void display1( void )

    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);     // clear the window
    glDrawArrays( GL_TRIANGLES, 0, 59);   

    glutSwapBuffers();


void display2( void )


    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );     // clear the window
    glDrawArrays( GL_TRIANGLES, 0, 59);       
    glutSwapBuffers();

【问题讨论】:

【参考方案1】:

要渲染到另一个窗口或子窗口,您需要使用glutSetWindow 将其设置为活动状态。

这取决于您从哪里发布图像更新,也就是您设置活动窗口的位置。例如,如果您通过重塑功能执行此操作,则需要在此处执行:

void Reshape1( int width, int height )

  // activate sub-window 1
  glutSetWindow(subWin1);
  // ...
  glutPostRedisplay();

void Reshape2( int width, int height )

  // activate sub-window 2
  glutSetWindow(subWin2);
  // ...
  glutPostRedisplay();

【讨论】:

这并没有解决问题,也没有真正改变我所观察到的程序状态, @user1610329 当然它改变了。每个子窗口都有自己的 opengl 上下文。您没有观察到差异的事实表明您可能还有其他问题。

以上是关于OpenGL多子窗口问题的主要内容,如果未能解决你的问题,请参考以下文章

qt:在一个 gui 窗口中包含 opencv 和 opengl 子窗口

OpenGL 闪烁/损坏,窗口调整大小和 DWM 处于活动状态

当作为子进程运行时,OpenGL 窗口不会在 xcode (7.2) 中打开

如何让 OpenGL 和 GDI 同时正常工作?

WPF 如何把子窗口放到主窗口的Panel中?

带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?