Problema con libreria sdl

di il
10 risposte

Problema con libreria sdl

Salve a tutti
vorrei gentilmente sapere come posso passarmi da una funzione ad un altra le seguenti
informazioni:
k = grafica(screen,screenren,larghezza,lunghezza,moda);
cosi definite nel main
SDL_Window *screen=NULL;
SDL_Renderer *screenren=NULL;

queste 2 variabili vengono modificate nella funzione grafica che dovrebbe poi restituirmele modificate ma non lo fa!
la funzione grafica e la seguente:
int grafica(SDL_Window *screen,SDL_Renderer *screenren,int &larghezza,int &lunghezza,int &moda)
   {
     int k=0;
     if (screen != NULL) { return -20; }
     if (screenren != NULL) { return -20; }
     if (SDL_Init(SDL_INIT_VIDEO)==-1) { return -1; }
     SDL_DisplayMode dm;
     if (SDL_GetDesktopDisplayMode(0,&dm) != 0) { return -2; }
     if (larghezza < 0)  { return -3; }
	  if (larghezza > dm.w) { return -3; }
     if (lunghezza < 0) { return -3; }
     if (lunghezza > dm.h) { return -3; }
     if (larghezza == 0 && lunghezza == 0) 
       { larghezza = dm.w; lunghezza = dm.h; k = 1;}
     SDL_Window *s;
     SDL_Renderer *r;
     if (k == 1)
       {
         (SDL_CreateWindowAndRenderer(larghezza,lunghezza,SDL_WINDOW_FULLSCREEN_DESKTOP,&s,&r));
	   }
     else
       {
         (SDL_CreateWindowAndRenderer(larghezza,lunghezza,SDL_WINDOW_BORDERLESS,&s,&r));
       }
	 if (s == NULL) { return -6;};
	 if (r == NULL) { return -7;};
     screen = s; screenren = r; moda = 1;
	 cout << "  sono in grafica! screen window = " << screen << " screen renderer = " << screenren << "\n";
     return 0;
               }
ho già provato:
k = grafica(&screen,&screenren,larghezza,lunghezza,moda);
ma in fase di compilazione mi restituisce
impossibile convertire il parametro 1 da 'SDL_Window **' a 'SDL_Window *'
ho provato anche
k = grafica(*screen,*screenren,larghezza,lunghezza,moda);
ma mi restituisce error C2664: 'grafica': impossibile convertire il parametro 1 da 'SDL_Window' a 'SDL_Window *'

qualche suggerimento su come risolvere il problema?
grazie anticipatamente a tutti

10 Risposte

  • Re: Problema con libreria sdl

    Non ho capito la questione, che è un po' confusa ...

    La chiamata corretta è

    k = grafica(screen, screenren, larghezza, lunghezza, moda);

    non vedo il problema ...
  • Re: Problema con libreria sdl

    Prova ad utilizzare direttamente screen e screenren come parametri delle varie SDL_*, piuttosto che s e r.
  • Re: Problema con libreria sdl

    Il problema sta nel fatto che quella chiamata è interna ad un altra funzione
    int pulisci(SDL_Window *screen,SDL_Renderer *screenren,int moda,int colo)
       {
    	   int k=0; int larghezza=0; int lunghezza=0; 
         if (screen == NULL && screenren == NULL) 
    	   {  k = grafica(screen,screenren,larghezza,lunghezza,moda);	   }
    	 if (k != 0) {return k; } 
         if (moda == 0) { return -99; }
         if (colo > 255) { return -11; }
    	 int r,g,b,a; a=0; r=100; g=149; b=237;
         SDL_SetRenderDrawColor( screenren, r,g, b, a );
         SDL_RenderClear(screenren);
         SDL_RenderPresent(screenren);
         return 0;
    e quando esegue la
    SDL_RenderClear(screenren);
    SDL_RenderPresent(screenren);
    lo schermo non va in modalità grafica perchè screenren cosi come screen valgono zero
  • Re: Problema con libreria sdl

    Adesso è un po' più chiaro ... quindi devi passare i puntatori per puntatore con

    int grafica(SDL_Window **screen,SDL_Renderer **screenren,int &larghezza,int &lunghezza,int &moda)

    e quindi assegnare i nuovi valori con

    *screen = s;
    *screenren = r;

    La chiamata sarà

    k = grafica(&screen, &screenren, larghezza, lunghezza, moda);
  • Re: Problema con libreria sdl

    Ho provato la soluzione
    ma il compilatore mi restituisce
    error C2664: 'grafica': impossibile convertire il parametro 1 da 'SDL_Window **' a 'SDL_Window *'
    in fase di chiamata

    oregon ha scritto:


    k = grafica(&screen, &screenren, larghezza, lunghezza, moda);
    mentre in fase di assegnazione
    *screen = s;
    mi restituisce :
    error C2582: funzione 'operator =' non disponibile in 'SDL_Window'
  • Re: Problema con libreria sdl

    Ci mostri nuovamente il codice completo delle modifiche ... ?
  • Re: Problema con libreria sdl

    Certo
    funzione grafica.
    quella che dovrebbe modicifare le variabili screen e screenren
    int grafica(SDL_Window *screen,SDL_Renderer *screenren,int &larghezza,int &lunghezza,int &moda)
       {
         int k=0;
         if (screen != NULL) { return -20; }
         if (screenren != NULL) { return -20; }
         if (SDL_Init(SDL_INIT_VIDEO)==-1) { return -1; }
         SDL_DisplayMode dm;
         if (SDL_GetDesktopDisplayMode(0,&dm) != 0) { return -2; }
         if (larghezza < 0)  { return -3; }
    	  if (larghezza > dm.w) { return -3; }
         if (lunghezza < 0) { return -3; }
         if (lunghezza > dm.h) { return -3; }
         if (larghezza == 0 && lunghezza == 0) 
           { larghezza = dm.w; lunghezza = dm.h; k = 1;}
         SDL_Window *s;
         SDL_Renderer *r;
         if (k == 1)
           {
           (SDL_CreateWindowAndRenderer(larghezza,lunghezza,SDL_WINDOW_FULLSCREEN_DESKTOP,&s,&r));
    	   }
         else
           {
             (SDL_CreateWindowAndRenderer(larghezza,lunghezza,SDL_WINDOW_BORDERLESS,&s,&r));
           }
    	 if (s == NULL) { return -6;};
    	 if (r == NULL) { return -7;};
         *screen = s; *screenren = r; moda = 1;
    	 cout << "  sono in grafica! screen window = " << screen << " screen renderer = " << screenren << "\n";
         return 0;
                   }
    funzione pulisci dove c'è la chiamata
    int pulisci(SDL_Window *screen,SDL_Renderer *screenren,int moda,int colo)
       {
    	   int k=0; int larghezza=0; int lunghezza=0; 
         if (screen == NULL && screenren == NULL) 
    	   { 
    		   k = grafica(&screen,&screenren,larghezza,lunghezza,moda);
    		   }
    	 if (k != 0) {return k; } 
         if (moda == 0) { return -99; }
         if (colo > 255) { return -11; }
    	 int r,g,b,a; a=0; r=100; g=149; b=237;
    	 SDL_SetRenderDrawColor( screenren, r,g, b, a );
          SDL_RenderClear(screenren);
         SDL_RenderPresent(screenren);
         return 0;
       }
  • Re: Problema con libreria sdl

    Ma non hai modificato l'intestazione della funzione come ti avevo suggerito! Rileggi la prima parte della mia risposta e attenzione ai doppi puntatori **
  • Re: Problema con libreria sdl

    Grazie oregon ora funziona correttamente.
  • Re: Problema con libreria sdl

    Prego ...
Devi accedere o registrarti per scrivere nel forum
10 risposte