0

サイズ 1024x1024 の BMP 画像を読み込んで、openGL のテクスチャとしてバインドしようとしています。サイズが 256x256 の BMP の場合、出力は希望どおりですが、サイズが 1024x1024 の BMP の場合、次のエラーがスローされます。

The program has unexpectedly finished.
C:\Users\xxxx\Desktop\lapping-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK__Debug\debug\lapping.exe exited with code -1073741819

BMP をロードするためのコード、

Texture2d* loadBMP( char *fname){
    int i,j, w, h, bits;
    unsigned long l;
    GLubyte c[3];
    Texture2d* tex;
    FILE *fin;
    unsigned char head[54];
    fin = fopen( fname,"rb");
    if( fin == NULL){
        printf("Bitmap '%s' not found\n", fname);
        return NULL;
    }
    fread( head, 54, 1, fin);
    w = (head[21]<<24)|(head[20]<<16)|(head[19]<<8)|head[18]; //returns the width of the image
    h = (head[25]<<24)|(head[24]<<16)|(head[23]<<8)|head[22];//returns the height of the image          
    tex = new Texture2d[1];
    tex->w = w;
    tex->h = h;
    tex->buf = new GLubyte[h*w*4];
    tex->id = avTotalTextures++;
    for(i=h-1;i>=0;i--){
        l = i*w*4;
        for(j=0;j<w;j++){
            fread( c, 1, 3, fin);
            tex->buf[l++] = c[2];
            tex->buf[l++] = c[1];
            tex->buf[l++] = c[0];
            tex->buf[l++] = 255;

        }
    }
    fclose( fin);
    printf("Bitmap_load '%s' loaded\n", fname);
    return tex;
}

テクスチャをバインドするためのコード

void Object3d::bindTexture( Texture2d *t)
{
    if( t == NULL)
        return;
    tex = t;

    glBindTexture(GL_TEXTURE_2D, tex->id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex->buf);
    gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, tex->buf);
    delete [] tex->buf;
    tex->buf = NULL;
}

これは、サイズが 256x256 の BMP でうまく機能します。しかし、幅と高さのパラメーターを変更して、1024x1024のbmpでこれを機能させようとすると

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex->buf);
gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, tex->buf);

それぞれ 0,0 および 256,256 から 1024, 1024 まで、前述のエラーがスローされます。私はopenGL仕様を参照しましたが、これが機能しない理由については思いつきませんでした.

4

0 に答える 0