Opengl 第四纹理=分割错误

Opengl 第四纹理=分割错误,opengl,segmentation-fault,textures,Opengl,Segmentation Fault,Textures,每次加载第四个纹理时,我都会出现分割错误——我指的是文件名,什么类型的纹理并不重要。我检查了GL\u纹理\u堆栈大小的值,结果是10,比4要多,不是吗 以下是代码片段: 从png加载纹理的函数 实际载荷 static GLuint textures[4]; static void gl_init() { (...) //setting up OpenGL /* loading textures */ textures[0] = gl_loadTexture("imag

每次加载第四个纹理时,我都会出现分割错误——我指的是文件名,什么类型的纹理并不重要。我检查了
GL\u纹理\u堆栈大小的值,结果是10,比4要多,不是吗

以下是代码片段:

从png加载纹理的函数

实际载荷

static GLuint textures[4];

static void gl_init() {
    (...) //setting up OpenGL

    /* loading textures */
    textures[0] = gl_loadTexture("images/background.png");
    textures[1] = gl_loadTexture("images/spaceship.png");
    textures[2] = gl_loadTexture("images/asteroid.png");
    textures[3] = gl_loadTexture("images/asteroid2.png"); //this is causing SegFault no matter which file I load!
}

有什么想法吗?

如何生成纹理至少有一个问题。你写道:

static GLuint gl_loadTexture(const char filename[]) {
    static int iTexNum = 1; 
    GLuint texture = 0;
    img_s *img = NULL;

    img = img_loadPNG(filename);
    if (img) {
        glGenTextures(iTexNum++, &texture);
glGenTextures
的第一个参数是要生成的纹理数。您只为堆栈上的一个纹理分配了空间,但每次调用此方法时,您都会再分配一个纹理。(所以在第二次调用中,您分配了2个纹理,在第三次调用中,分配了3个纹理,等等)一旦超过1,您很可能会覆盖指向
img
的指针。电话应为:

glGenTextures (1, &texture);

回答:“我检查了
GL_纹理_堆栈(SIZE
)的值,该枚举正好是它所说的:纹理堆栈的大小。这与你可以绑定的纹理数量或你可以创建的纹理数量无关。因为这是交叉发布到那里并在那里回答的,所以我关闭这个变体。
glGenTextures (1, &texture);