c++ - 在 wxGLCanvas 上调整大小之前无法初始化着色器

标签 c++ opengl wxwidgets

wxGLCanvas 似乎讨厌 OpenGL 着色器,因为它不提供像 Qt 中那样的初始化回调函数;即使在构造函数中自己创建上下文后,我也无法创建着色器,如下所示:

m_context = new wxGLContext(this);

还试过:

SetCurrent(*m_current);

仍然没有运气,GLEW 不断抛出“缺少 GL 版本”,这表明上下文尚未创建(来自 Google)。

我试过:

  1. 使用 WX_EVT() 显示和激活事件,仍然没有成功。
  2. 在调整大小事件中初始化着色器,仍然没有运气。

有没有办法让wxGLCanvas先调用我的初始化函数?

最佳答案

在 wxWidgets 中,没有特定的方法来初始化 OpenGL,该方法在其他所有事情之前被调用,而是在窗口显示之后被调用。您可以使用指示 OpenGL 是否已初始化的成员变量自己滚动,如果该变量为假,则在 Paint 事件处理程序中进行初始化。

根据我的经验,仅在 Paint 事件处理程序中发出所有 OpenGL 命令是最安全的,因此在您的 Size 事件处理程序中,您应该保存新的视口(viewport)大小并更新 Paint 处理程序中的投影矩阵(或仅查询视口(viewport)使用 wxGLCanvas 的 GetClientRect() 方法调整大小)。

关于c++ - 在 wxGLCanvas 上调整大小之前无法初始化着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17782108/

相关文章:

c++ - 如果用户从数组中输入数字,我如何获取二维数组的索引

c++ - cUrl 命令 C++ 代码替换

java - 使用 libgdx 绘制带纹理的多边形

c++ - 调整我简单的 OpenGL/GLUT 窗口的大小会产生奇怪的线条

c++ - wxWidgets 试图填满整个区域

c++ - 模板化类中的模板化方法的 "ambiguating new declaration"错误

c++ - 使用 C++ 类成员函数作为 C 回调函数

opengl - 为什么我必须 "use"着色器程序才能设置它的制服?

gtk - G信号 "instance X has no handler with id Y"错误

wxwidgets - 如何改变wxFreeChart中的系列颜色和画笔?