wxGLCanvas似乎讨厌OpenGL着色器,因为它没有像Qt中那样提供初始化回调函数;使我即使在构造函数中自己创建上下文之后也无法创建着色器,如下所示:
m_context = new wxGLContext(this);
也曾尝试过:
SetCurrent(*m_current);
仍然没有运气和GLEW不断抛出“缺少GL版本”,这表明上下文尚未创建(从谷歌)。
我试过:
有什么办法让wxGLCanvas先调用我的初始化函数吗?
发布于 2013-07-22 18:26:17
没有特定的方法来初始化在所有其他内容之前调用的OpenGL,而是在wxWidgets中显示窗口之后。您可以使用一个成员变量(该变量指示OpenGL是否已被初始化)滚动您自己的变量,如果该变量为false,则可以在画图事件处理程序中进行初始化。
根据我的经验,只在画板事件处理程序中发出所有OpenGL命令是最安全的,因此在Size事件处理程序中,您应该保存新的视口大小并在绘制处理程序中更新投影矩阵(或者只使用wxGLCanvas‘GetClientRect()方法查询视口大小)。
发布于 2014-10-29 09:07:22
在http://wiki.wxwidgets.org/WxGLCanvas中的示例中,建议您对EVT_PAINT事件(BasicGLPane::render)进行初始化,就像上面的注释中Kristian所说的那样。
相反,您可以在任何其他地方初始化OpenGL,只需首先显示wxwidget窗口或框架(例如frame-> show () )。
我这样做:
canvas = new Canvas( (wxFrame*) frame, args);
frame->Show()
现在调用画布类中的自定义OpenGL初始化方法(仅一次):
wxGLCanvas::SetCurrent(*m_context);
glewExperimental = GL_TRUE;
GLenum err = glewInit();
之后,我在画图事件中编译着色器等,然后只执行绘图:glDrawArrays()
和SwapBuffers()
https://stackoverflow.com/questions/17782108
复制相似问题