Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'écriture avec SDL-ttf sur un objet opengl

    3 avril 2008 à 17:47:10

    Salut, j'ai programmé un rubik's cube qui fonctionne bien, je peux faire tous les mouvements, mais maintenant ja voudrais pouvoir afficher du texte par dessus (Joue!). Mais j'ai un message d'erreur qui apparaît quand je compile, et je ne sais pas ce que ça veut dire.

    "Exception non gérée à 0x6f4c237b dans opengl.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000."

    Voici mon main (je vous ai épargné toutes les déclarations des autres fonctions que j'utilise à l'intérieur).


    int main(int argc, char *argv[])
    { int i,p,cpt=50,cptsol=0,place=0,max;
    int rdm[50],cout[1000];
    for(p=0;p<50;p++)
    rdm[p]=0;
    for(p=0;p<1000;p++)
    cout[p]=0;
    int x[2]={4,-4}, y[2]={4,-4}, z[2]={3,-3};
    int eyex=x[0], eyey=y[0], eyez=z[0];
    struct couleur **face;
    face=(struct couleur**)malloc(6*sizeof(struct couleur*));
    for(i=0;i<6;i++)
    face[i]=(struct couleur *)malloc(9*sizeof(struct couleur));
    SDL_Color blanc={65,65,65};
    SDL_Surface *ecran = NULL, *texte = NULL;
    SDL_Rect position;
    SDL_Event event;
    TTF_Font *police;
    ecran=SDL_SetVideoMode(960, 720, 32, SDL_OPENGL);
    melange(face,rdm);
    SDL_Init(SDL_INIT_VIDEO);
    TTF_Init();
    atexit(SDL_Quit);
    SDL_WM_SetCaption("Rubik's Cube", NULL);
    police = TTF_OpenFont("pointy.ttf", 12);
    texte = TTF_RenderText_Solid(police, "Joue!", blanc);
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
    position.x = 10;
    position.y = 10;
    SDL_BlitSurface(texte, NULL, ecran, &position);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective(70,(double)960/720,1,1000);
    glEnable(GL_DEPTH_TEST);
    dessine(eyex,eyey,eyez,face);
    while(1)
    {
    while(SDL_PollEvent(&event))
    { SDL_PollEvent(&event);
    switch(event.type)
    {case SDL_QUIT:
    return 0;
    case SDL_KEYDOWN:
    switch (event.key.keysym.sym)
    { case SDLK_RIGHT:
    if((eyex==x[0])&&(eyey==y[0]))
    {eyex=x[1];
    break;
    }
    if((eyex==x[1])&&(eyey==y[0]))
    {eyey=y[1];
    break;
    }
    if((eyex==x[1])&&(eyey==y[1]))
    {eyex=x[0];
    break;
    }
    if((eyex==x[0])&&(eyey==y[1]))
    {eyey=y[0];
    break;
    }
    break;
    case SDLK_LEFT:
    if((eyex==x[0])&&(eyey==y[0]))
    {eyey=y[1];
    break;
    }
    if((eyex==x[0])&&(eyey==y[1]))
    {eyex=x[1];
    break;
    }
    if((eyex==x[1])&&(eyey==y[1]))
    {eyey=y[0];
    break;
    }
    if((eyex==x[1])&&(eyey==y[0]))
    {eyex=x[0];
    break;
    }
    break;
    case SDLK_UP:
    if(eyez==z[1])
    eyez=z[0];
    break;
    case SDLK_DOWN:
    if(eyez==z[0])
    eyez=z[1];
    break;
    case SDLK_KP9:
    tournehtdr(face);
    place+=1;
    cout[place]=1;
    break;
    case SDLK_KP7:
    tournehtdr(face);
    tournehtdr(face);
    tournehtdr(face);
    place+=1;
    cout[place]=2;
    break;
    case SDLK_KP0:
    tournebsgh(face);
    place+=1;
    cout[place]=3;
    break;
    case SDLK_KP2:
    tournebsgh(face);
    tournebsgh(face);
    tournebsgh(face);
    place+=1;
    cout[place]=4;
    break;
    case SDLK_KP6:
    if((eyex==(-4))&&(eyey==4))
    {tournectht(face);
    place+=1;
    cout[place]=5;
    break;
    }
    if((eyex==4)&&(eyey==4))
    {tournecthtbis(face);
    tournecthtbis(face);
    tournecthtbis(face);
    place+=1;
    cout[place]=8;
    break;
    }
    if((eyex==(-4))&&(eyey==(-4)))
    {tournecthtter(face);
    tournecthtter(face);
    tournecthtter(face);
    place+=1;
    cout[place]=10;
    break;
    }
    if((eyex==4)&&(eyey==(-4)))
    {tournedvt(face);
    tournedvt(face);
    tournedvt(face);
    place+=1;
    cout[place]=12;
    break;
    }
    break;
    case SDLK_KP3:
    if((eyex==(-4))&&(eyey==4))
    {tournectht(face);
    tournectht(face);
    tournectht(face);
    place+=1;
    cout[place]=6;
    break;
    }
    if((eyex==4)&&(eyey==4))
    {tournecthtbis(face);
    place+=1;
    cout[place]=7;
    break;
    }
    if((eyex==(-4))&&(eyey==(-4)))
    {tournecthtter(face);
    place+=1;
    cout[place]=9;
    break;
    }
    if((eyex==4)&&(eyey==(-4)))
    {tournedvt(face);
    place+=1;
    cout[place]=11;
    break;
    }
    break;
    case SDLK_KP1:
    if((eyex==(-4))&&(eyey==(-4)))
    {tournectht(face);
    place+=1;
    cout[place]=5;
    break;
    }
    if((eyex==(-4))&&(eyey==4))
    {tournecthtbis(face);
    tournecthtbis(face);
    tournecthtbis(face);
    place+=1;
    cout[place]=8;
    break;
    }
    if((eyex==4)&&(eyey==(-4)))
    {tournecthtter(face);
    tournecthtter(face);
    tournecthtter(face);
    place+=1;
    cout[place]=10;
    break;
    }
    if((eyex==4)&&(eyey==4))
    {tournedvt(face);
    tournedvt(face);
    tournedvt(face);
    place+=1;
    cout[place]=12;
    break;
    }
    break;
    case SDLK_KP4:
    if((eyex==(-4))&&(eyey==(-4)))
    {tournectht(face);
    tournectht(face);
    tournectht(face);
    place+=1;
    cout[place]=6;
    break;
    }
    if((eyex==(-4))&&(eyey==4))
    {tournecthtbis(face);
    place+=1;
    cout[place]=7;
    break;
    }
    if((eyex==4)&&(eyey==(-4)))
    {tournecthtter(face);
    place+=1;
    cout[place]=9;
    break;
    }
    if((eyex==4)&&(eyey==4))
    {tournedvt(face);
    place+=1;
    cout[place]=11;
    break;
    }
    break;
    case SDLK_BACKSPACE:
    melange(face,rdm);
    place=0;
    max=0;
    cptsol=0;
    cpt=50;
    break;
    case SDLK_SPACE:
    max=maximum(cout,1000);
    if(cptsol!=max+49)
    {if(place==0)
    {cpt=cpt-1;
    soluce(rdm,cpt,face);
    if(cpt==0)
    {cpt=50;
    for(i=0;i<50;i++)
    rdm[i]=0;
    break;
    }
    }
    else
    {soluce(cout,place,face);
    place=place-1;
    }
    cptsol+=1;
    }
    break;

    }
    }
    }
    dessine(eyex,eyey,eyez,face);
    }
    TTF_CloseFont(police);
    TTF_Quit();
    SDL_FreeSurface(texte);
    SDL_Quit();
    }

    D'après vous, d'où provient ce message d'erreur et quel est son sens?
    merci
    • Partager sur Facebook
    • Partager sur Twitter
      3 avril 2008 à 17:54:38

      "lors de la lecture de l'emplacement 0x00000000"

      --> tu lis sur NULL. Tu as peut etre chargé une surface, le chargement a échoué, mais tu ne testes pas derriere si ça a marché ou non : grave erreur...

      Sinon, tout mettre dans le main comme ça est affreux, tu vas vite te noyer. Fait des fonctions.
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        4 avril 2008 à 14:39:23

        Et surtout nous noyer, les balises codes s'il te plaît.
        • Partager sur Facebook
        • Partager sur Twitter

        Problème d'écriture avec SDL-ttf sur un objet opengl

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown