glTexImage2D и проблема с загрузкой изображения - PullRequest
1 голос
/ 06 июля 2011

Я использую Corona (для загрузки изображений) / C ++ / Glut.

У меня странная проблема с загрузкой текстуры. Я знаю, что проблема с glTexImage2D, но странно, все в порядке, когда изображение 850 x 249 или 850 x 251 или 850 x 252 . Но когда это 850 x 250 , я получаю ошибку после компиляции:

Необработанное исключение в 0x024bfee9 в [...]. exe: 0xC0000005: Доступ нарушение считывания местоположения 0x0265c001.

Я использую:

glTexImage2D(GL_TEXTURE_2D, 0, TextureFormat, TextureImage->getWidth(), TextureImage->getHeight(), 0, TextureFormat, GL_UNSIGNED_BYTE, TextureImage->getPixels());

Что происходит?

редактировать

getpixels

edit2 - код

Загрузка кода текстуры:

GLuint LoadTexture(char *_filename)
{
    cout<<"loading image start"<<endl;
    GLuint ttemp=0;
    // Load texture

    cout<<"1"<<endl;
    corona::Image *TextureImage = corona::OpenImage(_filename);

    cout<<"2"<<endl;
    if (TextureImage)
    {
        glGenTextures(1, &ttemp);
        glBindTexture(GL_TEXTURE_2D, ttemp);

        // get the format of image
        GLuint TextureFormat;

        switch (TextureImage->getFormat())
        {
            case corona::PF_B8G8R8A8:
                TextureImage = ConvertImage(TextureImage, corona::PF_R8G8B8A8);
                TextureFormat = GL_RGBA; break;

            case corona::PF_R8G8B8A8:
                TextureFormat = GL_RGBA; break;

            case corona::PF_B8G8R8:
                TextureImage = ConvertImage(TextureImage, corona::PF_R8G8B8);
                TextureFormat = GL_RGB; break;

            case corona::PF_R8G8B8:
                TextureFormat = GL_RGB; break;

            case corona::PF_I8: // for example gif - convert to RGB
                TextureImage = ConvertImage(TextureImage, corona::PF_R8G8B8);
                TextureFormat = GL_RGB; break;
        }

        // Flip image
        FlipImage(TextureImage, corona::CA_X);

        // Generate The Texture
        cout<<"3"<<endl;
        cout<<"-"<<endl;

        cout<<"TextureFormat "              <<TextureFormat<<endl;
        cout<<"TextureImage->getWidth() "   <<TextureImage->getWidth()<<endl;
        cout<<"TextureImage->getHeight() "  <<TextureImage->getHeight()<<endl;
        cout<<"TextureImage->getPixels() "  <<TextureImage->getPixels()<<endl;


        cout<<"-"<<endl;

        glTexImage2D(GL_TEXTURE_2D, 0, TextureFormat, TextureImage->getWidth(), TextureImage->getHeight(), 0, TextureFormat, GL_UNSIGNED_BYTE, TextureImage->getPixels());

        cout<<"4"<<endl;
        //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // Linear Filtering
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);  // Linear Filtering
        cout<<"5"<<endl;
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        cout<<"6"<<endl;
        delete TextureImage;
        cout<<"7"<<endl;
    }
    cout<<"8"<<endl;
    return ttemp;
}

Я использую это так:

GLuint texttest;
texttest= LoadTexture("test.png");
...