SDL - sry echt blöde frage...



  • Ich gurk wie üblich n bissel mit C++ und SDL rum als mir auf einmal schlagartig klar wird das ich keinen schimmer hab wieso ich z.b. "SDL_Surface *****screen" tippen muss, sondern es einfach nur stur jedesmal tu weil ichs mal im tutorial gelesen hab.
    Da es aber ziemlich sinnlos wäre weiter mit etwas zu arbeiten was ich net verstehe hab ich mich natürlich auf die suche nach antwort gemacht. Aber ich kann mir beim besten willen keinen Reim drauf machen wieso die spezielle struktur nem pointer zugeweisen wird.
    Könnte meine Wissenslücke daher rühren das ich zu C++ nicht den üblichen weg über C gegangen bin und mich deswegen eher wenig mit strukturen beschäftigt habe?



  • n00b 😕 schrieb:

    Aber ich kann mir beim besten willen keinen Reim drauf machen wieso die spezielle struktur nem pointer zugeweisen wird.

    Ich versteh die Problematik nicht ganz. Dich stört, dass mit Pointern auf SDL_Surfaces gearbeitet wird, statt mit den structs selber?

    Naja, würde jedesmal der komplette Surface-Struct kopiert werden, wäre das ziemlich langsam. Letztendlich hätte man durch simples struct-kopieren ja eh kein Surface-Dublikat, weil die internen Zeiger ja noch auf dieselben Stellen zeigen.



  • /* verklickt */



  • hmmm also SDL_Surface is doch per typedef aus ner struct generiert (in SDL_video.h)

    typedef struct SDL_Surface {
    	Uint32 flags;				/* Read-only */
    	SDL_PixelFormat *format;		/* Read-only */
    	int w, h;				/* Read-only */
    	Uint16 pitch;				/* Read-only */
    	void *pixels;				/* Read-write */
    	int offset;				/* Private */
    
    	/* Hardware-specific surface info */
    	struct private_hwdata *hwdata;
    
    	/* clipping information */
    	SDL_Rect clip_rect;			/* Read-only */
    	Uint32 unused1;				/* for binary compatibility */
    
    	/* Allow recursive locks */
    	Uint32 locked;				/* Private */
    
    	/* info for fast blit mapping to other surfaces */
    	struct SDL_BlitMap *map;		/* Private */
    
    	/* format version, bumped at every change to invalidate blit maps */
    	unsigned int format_version;		/* Private */
    
    	/* Reference count -- used when freeing surface */
    	int refcount;				/* Read-mostly */
    } SDL_Surface;
    

    also ne structure die bis dahin nich als variable existiert also auch keinen echten wert hat oder?
    Worauf zum teufel zeigt dann nen pointer der mit dem typ deklariert wurde?
    ich raffs net. irgendwie hängts heut bei mir total 😞



  • int x;
    erstellt eine Variable vom Typ int.
    int* x;
    erstellt eine Variable vom Typ Zeiger-auf-int.

    SDL_Surface* screen;
    erstellt einen Zeiger auf ein SDL_Surface. Zeigt bis dahin noch ins Nirvana.

    SDL_SetVideoMode() erstellt das Framebuffer-Surface und liefert einen Zeiger darauf zurück.
    Nach screen = SDL_SetVideoMode(..); zeigt screen also auf dieses Surface.



  • DrGreenthumb schrieb:

    int x;
    erstellt eine Variable vom Typ int.
    int* x;
    erstellt eine Variable vom Typ Zeiger-auf-int.

    SDL_Surface* screen;
    erstellt einen Zeiger auf ein SDL_Surface. Zeigt bis dahin noch ins Nirvana.

    SDL_SetVideoMode() erstellt das Framebuffer-Surface und liefert einen Zeiger darauf zurück.
    Nach screen = SDL_SetVideoMode(..); zeigt screen also auf dieses Surface.

    Falsch.

    SDL_Surface* screen;
    erzeugt einen Zeiger vom Typ SDL_Surface, welcher aber noch auf nichts zeigt, also ein Nullzeiger ist.

    Der Rest ist richtig.



  • Honkar schrieb:

    Falsch.

    SDL_Surface* screen;
    erzeugt einen Zeiger vom Typ SDL_Surface, welcher aber noch auf nichts zeigt, also ein Nullzeiger ist.

    Ich habs nicht so mit Begriffen. Für mich ist SDL_Surface* ein Zeiger auf ein SDL_Surface, unabhängig davon welchen Wert er hat. Aber ich habe mir sagen lassen, dass Nullzeiger auch kein korrekter Begriff ist. Wäre auch ziemlich unsinnig, da er eben, wie gesagt, in's Nirvana zeigt und nicht auf Null.

    Aber egal, wir meinen das gleiche.



  • mhm ich glaub ich habs kapiert. ^^

    ich danke euch vielmals! 🙂



  • hi dani! *lach*


Anmelden zum Antworten