OpenGL窗口没有打开

时间:2011-12-02 12:02:58

标签: c++ visual-c++ opengl glut glew

我有来自OpenGLBook(openglbook.com)的代码,它编译但不加载。我完全不知道它为什么不加载。代码如下:

的main.cpp

#include "main.h"

/// Methods
/// -----------------------------

int main(int argc, char* argv[])
{
    Initialize(argc, argv);

    glutMainLoop();

    exit(EXIT_SUCCESS);
}

main.h

#ifndef main_h
#define main_h

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <GL/glew.h>
#include <GL/freeglut.h>

#define WINDOW_TITLE_PREFIX "CHAPTER 1"

void Initialize(int, char*[]);
void InitWindow(int, char*[]);
void ResizeFunction(int, int);
void RenderFunction(void);

#endif

functions.cpp

#include "main.h"

int CurrentWidth = 800,
    CurrentHeight = 600,
    WindowHandle = 0;

void Initialize(int argc, char* argv[])
{
    InitWindow(argc, argv);

    fprintf(
        stdout,
        "INFO: OpenGL Version: %s\n",
        glGetString(GL_VERSION)
        );

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}

void InitWindow(int argc, char* argv[])
{
    glutInit(&argc, argv);

    glutInitContextVersion(4, 2);
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
    glutInitContextProfile(GLUT_CORE_PROFILE);</pre>

    glutSetOption(
        GLUT_ACTION_ON_WINDOW_CLOSE,
        GLUT_ACTION_GLUTMAINLOOP_RETURNS
        );

    glutInitWindowSize(CurrentWidth, CurrentHeight);

    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);

    WindowHandle = glutCreateWindow(WINDOW_TITLE_PREFIX);

    if(WindowHandle < 1) {
        fprintf(
            stderr,
            "ERROR: Could not create a new rendering window.\n"
            );
        exit(EXIT_FAILURE);
    }

    glutReshapeFunc(ResizeFunction);
    glutDisplayFunc(RenderFunction);

}

void ResizeFunction(int Width, int Height)
{
    CurrentWidth = Width;
    CurrentHeight = Height;
    glViewport(0, 0, CurrentWidth, CurrentHeight);
}

void RenderFunction(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSwapBuffers();
    glutPostRedisplay();
}

当我编译并尝试使用Visual Studio 2010运行我的.exe时,根本没有任何事情发生。 OpenGL窗口甚至没有打开。 Visual Studio的运行方式就好像运行了大约2秒钟,然后返回正常状态。

2 个答案:

答案 0 :(得分:3)

glutInitContextVersion(4, 2);

您当前的图形驱动程序是否真的支持OpenGL 4.2?如果没有,那么您的窗口创建将失败。 4.2仍然相当新;尝试4.1而不是。

答案 1 :(得分:1)

尝试调试!在主函数上放置一个断点并逐步执行,直到某些操作导致程序退出。

正如Nicol Bolas所说,你可能没有支持OpenGL 4.2的显卡。继续访问AMD或nVidia的网站,了解您的显卡是否支持OpenGL 4.2。如果没有,请将以下行更改为您的卡支持的任何版本。

glutInitContextVersion(4, 2);