OpenGL跳过visual studio上的主要功能

OpenGL skips main function on visual studio

本文关键字:功能 跳过 visual studio OpenGL      更新时间:2023-10-16

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

#include <iostream>
#include <glopenglut.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解决方案之间的供过于求、gl语句后,它的行为正确(在断点处停止)。如果我不清理解决方案,它的行为就不正确,但我看到visual studio在我做了更改后正在编译代码。这些奇怪的行为只有在我包含opengl代码时才会发生。在我正常进行更改后,我不需要清洗溶液。这是什么原因?

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

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

把它想象成一个while(true)循环。

原来我应该把freeglut.dll文件放在可执行文件附近。在我把它放进system32文件夹之前,不要把东西弄得一团糟。代码现在可以工作了。Visual Studio本应给出某种错误,但它没有显示任何错误或警告。