我正在尝试将 MyGUI 3.2.0 集成到我的 OpenGL 3 引擎中,但我遇到了一些问题。我的 OpenGL 引擎不使用在 OpenGL 3.3 中弃用/删除的任何 OpenGL 函数。我已经构建并链接了所有内容,并进行了一些处理以确保 FreeType 库最终位于正确的位置,以便 MyGUI 可以找到它们。
我按照快速入门指南进行了调整以使用 OpenGLPlatform,但我跳过了输入部分,以便首先显示它。我编写了图像加载器界面,它可以工作,但如果这有什么不同,我现在将保存功能留空。我没有收到任何编译错误或崩溃。日志文件中没有任何错误。我已经阅读了常见问题解答,我的情况与最后两个条目相同,但是他们提到的函数对于 OpenGLPlatform 不存在,因此它们可能不适用。
有一次,我的随机三角形看起来像是 MyGUI 的纹理从我从引擎中绘制的最后一个网格中伸出来,但我发现它们只是被我之前为网格绑定的着色器所吸引,它们消失了在我解开着色器之后。我检查了 gDEBugger 并且从 MyGUI 代码加载了顶点缓冲区和纹理,所以我很确定它们加载正确。我知道纹理至少可以正确加载,并且顶点缓冲区看起来没有损坏或任何东西。我还单步执行了代码,它似乎在绘制一些东西,但我没有从 MyGUI 的屏幕上得到任何输出。我错过了什么?
在我的 WindowMgr init() 中:
if (m_platform == NULL)
{
m_platform = new MyGUI::OpenGLPlatform();
m_platform->initialise(&m_imageLoader);
m_platform->getDataManagerPtr()->addResourceLocation("./data/ui/MyGUI", false);
}
if (m_GUI == NULL && m_platform != NULL)
{
m_GUI = new MyGUI::Gui();
m_GUI->initialise();
}
MyGUI::ButtonPtr button = m_GUI->createWidget<MyGUI::Button>("Button", 300, 10, 300, 26, MyGUI::Align::Default, "Main", "test");
button->setCaption("Test");
在 WindowMgr 渲染()中:
if (m_platform != NULL)
{
renderGlobals.shaderMgr.unbindAll();
m_platform->getRenderManagerPtr()->drawOneFrame();
}
在 WindowMgr resizeWindow() 中:
if (m_platform != NULL)
{
m_platform->getRenderManagerPtr()->setViewSize(_width, _height);
}
在 WindowMgr 中关闭():
if (m_GUI != NULL)
{
m_GUI->shutdown();
delete m_GUI;
m_GUI = NULL;
}
if (m_platform != NULL)
{
m_platform->shutdown();
delete m_platform;
m_platform = NULL;
}