Seite 1 von 1

Bug in PackMemory() ...

Verfasst: 06.12.2006 04:46
von PureLust
Moin, moin, ...

PackMemory() funktioniert nicht, wenn als QuellAdresse ein Speicherbereich auf der Grafikkarte angegeben wird (Rechner bzw. Programm hängt).

Entpacken mit UnpackMemory() in den Grafikkartenspeicher funktioniert hingegen einwandfrei.

Aufgefallen ist mir das, als ich Sprite-Daten packen wollte.
Sprites mit #PB_Sprite_Memory-Flag lassen sich packen, normale Sprites ohne das Flag (die ja meines Wissens nach im GraKa-Speicher liegen) hingegen nicht.

Wenn zur Veranschaulichung und Fehlersuche ein kleines Demoprog gewünscht wird, liefere ich das noch gerne nach.

Gruß, PL.

Verfasst: 06.12.2006 11:16
von Kaeru Gaman
guter hinweis, aber auch eigentlich logisch.

es heißt ja PackMemory, also sollte der angesprochene bereich sich auch im Memory befinden.

Verfasst: 06.12.2006 14:36
von PureLust
Da hast Du im Grunde natürlich recht, aber auch der GraKa-Speicher ist Speicher, den Du ja z.B. über Peek & Poke ganz normal ansprechen kannst - er liegt halt nur in einem anderen Speicherbereich.

Und da ja auch UnpackMemory() in den GraKa-Speicher problemlos entpackt, nehme ich also mal doch an, dass es sich um einen Bug in PackMemory() handelt.

Verfasst: 07.12.2006 19:29
von PBZecke
Man kann doch eigentlich nur auf Speicherbereiche zugreifen die man zuvor
allociert hat. Wie kommt man denn da in den Grfikkarten-Speicher? Mit
AllocateMemmory kannn man doch nur die Größe festlegen, jedoch den
Bereich nicht.

Verfasst: 07.12.2006 20:48
von PureLust
Durch erstellen (oder auch laden) eines Sprites wird der Speicherbereich des Sprites ja für Dich "allociert" - Du hast also von da an Zugriff auf das Sprite und auch auf dessen Speicherbereich.
Dieser Speicherbereich wird dann später bei Verwendung von FreeSprite() wieder freigeben.

Verfasst: 07.12.2006 21:50
von PBZecke
Ah, kapiert. Aber das ist ja ein ziemliches rumgetrickse. Verständlich, dass so
etws nicht vom PB-Team getestet wird.

Aber noch etwas: Führt das nicht zu Problemen wenn man so auf den
Grafikkarten Speicher zugreift? Oder ist das genauso geschützt wie der
"normale" Speicherzugriff?

Verfasst: 08.12.2006 07:47
von ts-soft
Grafikkartenspeicher ist normallerweise nicht direkt ansprechbar, macht ja
bei einem System das nur virtuelle Speicheradressen vergibt auch keinen
Sinn. Der Objectspeicher des Sprites läßt sich manipulieren, bzw. mit DirectX
ist auch fast direkter Zugriff möglich.

Verfasst: 08.12.2006 15:12
von Kaeru Gaman
also im grunde wie ich mir dachte:

dass das entpacken funktioniert, ist ein ungewollter zufall,
dass das packen nicht funktioniert, hat seine richtigkeit.