<分区>
我正在开发一个引擎 + 一个基于 C++ 构建的游戏,每当我运行我的引擎时,我都会遇到奇怪的行为,因为我已经运行了一些其他应用程序,这些应用程序显示任何类型的 Java 用户界面或GTK。一旦我运行这些应用程序之一,我的引擎就会陷入 30 或更低的 fps。我将 FPS 限制在 60,但它能够运行超过 4000,所以陷入 30 告诉我我的显示驱动程序中有错误,或者 openGL 中有一些神奇的调用我没有包括在我的绘制循环或其他东西。我不知道。
注意:通常重新启动会清除问题并且一切恢复正常,直到基本上我使用另一个不能与直接 GL 或 WDF 一起工作的程序。
我的问题是,在使用 C++ 中的 openGL 进行开发时,是否有人知道我上面描述的已知问题?这可能是我的渲染代码中的问题吗?
注意:我怀疑是我的代码覆盖了显示驱动程序的主要原因之一是我有使用 GL(如 quake 3)的 C/C++ 编写的游戏,这些游戏不受此影响问题。
这是我的抽奖相关代码:
***Init Code***
glDisable( GL_DITHER );
glDisable(GL_ALPHA_TEST);
glDisable( GL_LIGHTING );
glShadeModel(GL_SMOOTH);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
***Draw Loop***
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_ACCUM_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
if(stage != NULL){
stage->render();
}
//Yes I know, singletons are disgusting. I'm removing them eventually.
Ascengine::VBOManager::getInstance().bindVBO(0);
Ascengine::GLTextureManager::getInstance().bindTexture(0);
glfwSwapBuffers();
请注意,在 stage->render();
中没有发生任何特殊情况,它只是一个显示列表,因此它只是向下遍历子项并调用 translate、scale 等,并从中绘制纹理和顶点坐标伊博人。