problem z ładowaniem obrazu devil

0

niestety, moja klasa nie chce ładować obrazów, błąd występuje w funkcji initalize, bynajmniej przy debugowaniu tak jest

class Object2D
    {
    private:
        GLuint Id;
        int Width, Height;
    public:
        void Initalize(const char *Path)
        {
            ILuint img;

            if (!ilLoadImage(Path))
            {
                printf("Object2D.Initialize(const char *Path): Failed to load %s, image id = %d", Path, img);
                exit(0);
            }
            if (!ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE))
            {
                printf("Object2D.Initialize(const char *Path): Failed to convert %s, image id = %d", Path, img);
                exit(0);
            }

            ilGenImages(1, &img);
            ilBindImage(img);

            glGenTextures(1, &this->Id);
            glBindTexture(GL_TEXTURE_RECTANGLE_ARB, this->Id);
            glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
                         ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
                         ilGetData());
            this->Width = ilGetInteger(IL_IMAGE_WIDTH);
            this->Height = ilGetInteger(IL_IMAGE_HEIGHT);
            ilDeleteImages(1, &img);
        }
        void Draw()
        {
            glColor3f(1.f, 1.f, 1.f);
            glBindTexture(GL_TEXTURE_RECTANGLE_ARB, this->Id);
            glBegin(GL_QUADS);
            glTexCoord2i(0, 0);
            glVertex2i(0, 0);
            glTexCoord2i(this->Width, 0);
            glVertex2i(this->Width, 0);
            glTexCoord2i(this->Width, this->Height);
            glVertex2i(this->Width, this->Height);
            glTexCoord2i(0, this->Height);
            glVertex2i(0, this->Height);
            glEnd();
        }
    };

i funkcja wywolujaca

         
Object2D obb;
obb.Initalize("test.png");
obb.Draw();
0

A jaki błąd ? - stłukłem wczoraj szklaną kule :/

0

tj. program przestaje odpowiadać, a dokładniej segfault

0

Co robi ta funkcja - Ładuje plik?
Jeśli się nie mylę to ten błąd jest związany z pamięcią.

 void Initalize(const char *Path)
        {
            ILuint img;
 
            if (!ilLoadImage(Path))
            {
                printf("Object2D.Initialize(const char *Path): Failed to load %s, image id = %d", Path, img);
                exit(0);
            }
            if (!ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE))
            {
                printf("Object2D.Initialize(const char *Path): Failed to convert %s, image id = %d", Path, img);
                exit(0);
            }
 
            ilGenImages(1, &img);
            ilBindImage(img);
 
            glGenTextures(1, &this->Id);
            glBindTexture(GL_TEXTURE_RECTANGLE_ARB, this->Id);
            glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
                         ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
                         ilGetData());
            this->Width = ilGetInteger(IL_IMAGE_WIDTH);
            this->Height = ilGetInteger(IL_IMAGE_HEIGHT);
            ilDeleteImages(1, &img);
        }
0

hm ta funkcja ładuje obraz do pamięci, tylko problem polega na tym, że DevIL coś nie chce działać.

0

Znalazłem podobny kod może Ci coś pomoże, a w której liniach masz ten błąd wiesz?

    void Initialize( const char * szTitle, int Width, int Height, int X, int Y )
    {
        ILuint img;
        ILconst_string filename = "test.png";
       
        Width = Width;
        Height = Height;
        ClientWidth = Width;
        ClientHeight = Height;
       
        glutInitDisplayMode( GLUT_SINGLE );
        glutInitWindowSize( Width, Height );
        glutInitWindowPosition( X, Y );
        glutCreateWindow( szTitle );
       
        ilInit();
        ilGenImages( 1, & img );
        ilBindImage( img );
        if( !ilLoadImage( filename ) )
        {
            printf( "Failed to load %s, image id = %d", filename, img );
            exit( 0 );
        }
        if( !ilConvertImage( IL_RGBA, IL_UNSIGNED_BYTE ) )
        {
            printf( "Failed to convert %s, image id = %d", filename, img );
            exit( 0 );
        }
        glDisable( GL_LIGHTING );
        glDisable( GL_DITHER );
        glDisable( GL_DEPTH_TEST );
        glEnable( GL_TEXTURE_RECTANGLE_ARB );
        glGenTextures( 1, & texId );
        glBindTexture( GL_TEXTURE_RECTANGLE_ARB, texId );
        glTexParameteri( GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexImage2D( GL_TEXTURE_RECTANGLE_ARB, 0, ilGetInteger( IL_IMAGE_BPP ), ilGetInteger( IL_IMAGE_WIDTH ),
        ilGetInteger( IL_IMAGE_HEIGHT ), 0, ilGetInteger( IL_IMAGE_FORMAT ), GL_UNSIGNED_BYTE,
        ilGetData() );
        texW = ilGetInteger( IL_IMAGE_WIDTH );
        texH = ilGetInteger( IL_IMAGE_HEIGHT );
       
        ilDeleteImages( 1, & img );
       
       
       
    }
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1