Opengl未定义的行为

时间:2014-08-09 14:38:11

标签: c++ c opengl graphics

我一直在使用Opengl遇到一些奇怪的行为。我做错了什么,但我无法弄清楚它是什么。

我有HD Graphics 3000加速器,我在Ubuntu 14.04上安装了Opengl 3.0。

问题在于,有时候不会画任何东西,特别是在做一个小的翻译时会导致它可见。渲染纹理时,我会遇到分段错误。

以下是代码的重要部分:

启动SDL,创建opengl上下文等

if (SDL_Init(SDL_INIT_VIDEO) < 0) {
    exit(1);
}

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);



mainwindow = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
    512, 512, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);


maincontext = SDL_GL_CreateContext(mainwindow);

glewInit();;


SDL_GL_SetSwapInterval(1);

启动opengl:

glClearColor(0.0,0.0,0.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45,(double)width/(double)height,1,100.0);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);  //we enable lighting, to make the 3D object to 3D
glEnable(GL_LIGHT0);
glEnable(GL_TEXTURE_2D);
float col[]= {1.0,1.0,1.0,1.0}; //light color is white
glLightfv(GL_LIGHT0,GL_DIFFUSE,col);
glEnable(GL_NORMALIZE);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

渲染:

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor ( 0.0, 0.0, 0.0, 1.0 );
glLoadIdentity();
glTranslatef(0,0,-5);

glColor3f(1,0,0);

glBegin(GL_TRIANGLES);
    glVertex3f(-1,-1,-5);
    glVertex3f(1,-1,-5);
    glVertex3f(0,1,-5);
glEnd();

我实际上渲染了一些加载的模型,但是由于某种原因,甚至没有显示这个三角形。如果我渲染模型,在加载纹理时,使用SOIL提供的自动例程将图像加载到opengl时会发生分段错误。

有什么想法吗? 我也检查了opengl中的错误以及启动GLEW时的错误,但是没有。

1 个答案:

答案 0 :(得分:0)

好的,问题是我使用Opengl(调用闪电,设置视图等)而不启动SDL并创建上下文。奇怪的是,Opengl没有说出任何错误。