【问题标题】:OpenGL skips main function on visual studioOpenGL跳过Visual Studio上的主要功能
【发布时间】:2025-11-23 23:40:02
【问题描述】:

我正在尝试在 Visual Studio 2010 中运行以下 c++ opengl 代码。我使用 openglut 作为 opengl 实用工具包。

#include <iostream>
#include <gl\openglut.h>

using std::cout;
using std::endl;

void RenderScene()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
}

void SetupRC()
{
    glClearColor(0, 0, 1.0f, 1.0f);
}

int main(int argc, char* argv[])
{
    cout << "Test1" << endl;

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
    glutCreateWindow("Simple");
    glutDisplayFunc(RenderScene);

    SetupRC();

    glutMainLoop();

    cout << "Test2" << endl;

    return 0;
}

代码编译正确,但是当我在没有调试的情况下运行时,控制台上没有显示任何内容。当我在第一个 cout 语句创建断点并使用调试运行时,它不会在断点处停止。它似乎正在跳过主要功能。在我注释掉 2 个 cout 语句和 clean 解决方案之间的 glut,gl 语句之后,它的行为正确(在断点处停止)。如果我不清理解决方案,它的行为就会不正确,但我看到 Visual Studio 在我进行更改后编译代码。这些奇怪的行为只有在我包含 opengl 代码时才会发生。正常进行更改后,我不需要清洁解决方案。这是什么原因?

【问题讨论】:

  • 难道Glut没有自己的main方法吗?而你,作为实施者,只是应该实施某些其他方法吗? (凭记忆说,我已经很久没有看过 Glut 了,所以可能是完全错误的/考虑不同的框架......)
  • 我是opengl的新手,但我直接从“OpenGL SuperBible 4th Edition”一书中拿了这个例子,所以它应该是正确的。
  • @TJMonk15:没有 GLUT 不提供 main。
  • @TJMonk15:不,GLUT 没有自己的 Main。如果 OpenGLUT 有,那么这就是与标准 GLUT 布局的偏差。
  • 我可以尝试任何建议来找出问题所在

标签: c++ visual-studio opengl glut


【解决方案1】:

事实证明,我应该将 freeglut.dll 文件放在可执行文件附近。在我把它放入 system32 文件夹之前,不要把东西弄乱。该代码现在有效。 Visual Studio 应该给出某种错误,但它没有显示错误或警告。

【讨论】:

    【解决方案2】:

    通常,函数glutMainLoop 不会返回。当您关闭窗口时,该功能将完全停止应用程序。因此,在该函数调用之后将不会执行任何操作。

    即使稍后的代码被执行,它也只会在您关闭窗口时发生。 glutMainLoop 是坐着等待你对你的窗户做事的东西。当窗口中发生事件(鼠标移动、鼠标点击、显示需要更新、计时器等)时,它会调用您注册的回调函数。

    将其视为while(true) 循环。

    【讨论】:

    • 我知道这一切,但如果你仔细阅读,我说过它不会在第一个 cout 语句处中断,这是 main 函数中的第一个语句,在所有 glut 代码之前。