Opengl未定义行为

Opengl undefined behavior

本文关键字:未定义 Opengl      更新时间:2023-10-16

我一直在使用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时的错误,但没有任何错误。

好吧,问题是我使用Opengl (call lightning, set view等)而没有启动SDL并创建上下文。奇怪的是,Opengl没有调用任何错误