2012-01-23 45 views
2

我想在Visual Studio 2010中运行下面的C++ opengl代码。我使用openglut作为opengl实用工具包。OpenGL跳过Visual Studio的主要功能

#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语句和干净的解决方案之间的过剩,gl语句之后,它的行为是正确的(停在断点处)。如果我没有清理解决方案,它的行为不正确,但我看到Visual Studio在执行更改后编译了代码。这些奇怪的行为只发生在我包含opengl代码的时候。正常更改后,我不需要清理解决方案。这是什么原因?

+1

不贪恋有自己的主要方法吗?你作为暗示者,是否应该实施某些其他方法? (从记忆角度讲,自从我看了Glut已经很长时间了,所以可能完全错误/想到不同的框架......) – TJMonk15

+0

我是opengl的新手,但我直接从这本书中学习了这个例子“OpenGL SuperBible第4版“,所以它应该是正确的。 –

+0

@ TJMonk15:没有GLUT不提供主菜单。 – datenwolf

回答

0

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

0

正常情况下,功能glutMainLoop不会返回。当你关闭窗口时,该函数将完全停止应用程序。所以在函数调用之后没有任何东西会被执行。

即使后面的代码被执行,它只会发生在关闭窗口时。 glutMainLoop是什么坐下来等待你做你的窗口的事情。它调用你在窗口发生事件时注册的回调函数(鼠标移动,鼠标点击,显示需要更新,定时器等)。

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

+0

我知道所有,但如果你仔细阅读我说,它不会在第一个cout语句,这是主函数的第一个声明,所有大量代码之前中断。 –