Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

11

04.12.2013, 15:39

Gut dachte die wird immer erst beim Rendern kopiert. Gibt es denn eine gute Anleitung für eine CollisionMap? Wenn ich meine Texture in einem SDL_Surface habe, dann leigt sie nicht im GPU-Speicher oder? Und wie lese ich dann ein Pixel aus einem Surface aus?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

12

04.12.2013, 15:45

Indem du danach suchst ;) In dem Wiki, dessen Link ich bereits gepostet habe, kann man auch nach anderen Dingen suchen, z.B. nach der SDL_Surface:
http://wiki.libsdl.org/SDL_Surface
Wie du siehst, kann man direkt auf die Pixel zugreifen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

13

04.12.2013, 15:51

Danke, ich habe wohl iergentwie einige Post hier überlesen. Dann hat sich das erste Problem schon gelöst. Jetzt werde ich mich mal an die eigentliche Erkennung machen

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

04.12.2013, 17:24

Wie David und ich schon sagten, speicher nicht das Bild unnötig doppelt, sondern erstell eine CollisionMap daraus, wahlweise geht das prima als Bitfeld.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

15

04.12.2013, 17:43

Die SDL_Surface liegt immer als Pointer vor und hat darüber hinaus internes ref counting. Wenn er also einfach auf die Pixel zugreift sollte das passen und kein unnötiges Doppelspeichern dürfte vorkommen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

04.12.2013, 17:49

Eine Textur allerdings liegt eben im VRAM. Zusätzlich noch ein SDL_Surface im RAM zu halten ist schlicht Speicherverschwendung, denn statt 32 Bit braucht man eben nur ein einziges pro Pixel für eine CollisionMap. Ob man also 10 MB oder 320 hält, sollte schon eine Überlegung wert sein.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

17

04.12.2013, 17:53

Eine Textur allerdings liegt eben im VRAM. Zusätzlich noch ein SDL_Surface im RAM zu halten ist schlicht Speicherverschwendung, denn statt 32 Bit braucht man eben nur ein einziges pro Pixel für eine CollisionMap. Ob man also 10 MB oder 320 hält, sollte schon eine Überlegung wert sein.

Ich weiß ja nicht wofür er die SDL_Texture benötigt, vllt. für einen SDL_Renderer oder aber die SDL_Texture ist nun, wo er weiß wie es geht, überflüssig. Ansonsten hast du natürlich recht, beides zu halten wäre unnötig. ;)
Ob aber eine SDL_Texture per se im VRAM liegt war mir bis dahin gar nicht klar. Woher stammt die Info?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

04.12.2013, 17:57

Es ist eine Texture. Wo soll die sonst liegen?
PS:
Eine SDL_Texture wrappt direkt eine OpenGL-Texture.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

19

04.12.2013, 18:06

Es ist eine Texture. Wo soll die sonst liegen?
PS:
Eine SDL_Texture wrappt direkt eine OpenGL-Texture.

Ah, das war mir nicht klar. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

20

04.12.2013, 21:46

Das mit der Collision-Map ist die optimierte Variante. Wenn du nur statische Bilder hast, ist der Fall klar. In dem Moment, wo du aber die Bilder rotieren, skalieren und gleichzeitig auf Kollision prüfen willst, hast du mit einer starren Kollisionsmap ein Problem. Rotierte, skalierte SDL_Surfaces lassen sich relativ einfach mit SDL_gfx berechnen. Andernfalls, die eigene Collisionmap neu zu berechnen ist da schon mit mehr bis viel mehr Aufwand verbunden. Es ist eben die Frage, wie viel Optimierung du für deine Anwendung brauchst und Sinnvoll ist und wieviel Optimierung du ausgehend von deinem derzeitigen Wissensstand in vernünftiger Zeit umsetzen kanns.

Werbeanzeige