我有来自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秒钟,然后返回正常状态。
答案 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);