c++ - 基于 Java openGL 和 GTK 的应用程序搞砸了 C++ openGL?

标签 c++ opengl

<分区>

我正在开发一个引擎 + 一个基于 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 等,并从中绘制纹理和顶点坐标伊博人。

最佳答案

这些应用可能会将交换间隔设置为 30fps。如果您在将应用程序限制为以 60 fps 运行时还没有这样做,我会尝试更改应用程序启动时的交换间隔。例如。类似于以下内容(在 GNU/Linux 上,在 Windows 上使用 WGL_EXT_swap_control):

glXSwapIntervalSGI(1); // enable V-sycn
glXSwapIntervalSGI(0); // disable V-sync

关于c++ - 基于 Java openGL 和 GTK 的应用程序搞砸了 C++ openGL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510589/

相关文章:

c++ - 着色器语法 vector = vec3(a,b,c) 在 C++ 中?

opengl - 对数深度缓冲区

c++ - Google Mocked 成员函数中的 std::pair 参数编译失败

c++ - 从 void 子函数检索 int 值到 C++ 中的函数

c++ - 递归计算谢尔宾斯基三角形中三角形的数量

c - 无法使用opengl在c中旋转移动的物体

c++ - 如何使用混合类型的 c++ 结构并只将一些值传递给 OpenGL?

c++ - 如何对列表执行 GroupBy Sum 查询?

c++ - 在 C++ 中执行 sobel 过滤器函数时我做错了什么

c++ - Release模式下的 OpenGL 粉红色