第四纹理=分段错误

时间:2012-09-09 12:11:36

标签: opengl segmentation-fault textures

每次加载第四个纹理时,我都会继续分段错误 - 什么类型的纹理,我的意思是文件名,无关紧要。我检查了GL_TEXTURES_STACK_SIZE的值,结果是 10 ,所以远远超过 4 ,不是吗?

以下是代码片段:

png

加载纹理的功能
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);
        glBindTexture(GL_TEXTURE_2D, texture);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        glTexImage2D(GL_TEXTURE_2D, 0, img->iGlFormat, img->uiWidth, img->uiHeight, 0, img->iGlFormat, GL_UNSIGNED_BYTE, img->p_ubaData);
        img_free(img); //it may cause errors on windows
    } else printf("Error: loading texture '%s' failed!\n", filename);

    return texture;
}

实际装载

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!
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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的第一个参数是您希望生成的纹理数。您只为堆栈上的1个纹理分配了空间,但每次调用此方法时,都会再分配1个纹理。 (所以在第二次调用时你要分配2个纹理,第三次调用,3个纹理等等。)一旦超过1,你最有可能覆盖指向img的指针。调用应该是:< / p>

glGenTextures (1, &texture);