JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=b0778d43358f21697e0356ccba670c9bMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

DD - AGP-/Haupt-/Videospeicher
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 18.07.2003, 18:45    Titel: Antworten mit Zitat

Nein, ich kopiere zwar den gesamten Bildschirm vom Videospeicher in den Systemspeicher, damit es aktuell ist, aber die Pixel werden vom Hauptspeicher aus genommen und verrechnet in den AGP geschrieben. Danach wird dann nur dieser geblendete Teil in den Videospeicher(Backbuffer) kopiert.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.07.2003, 23:24    Titel: Antworten mit Zitat

Wieso muss du den Videospeicher in den Hauptspeicher kopieren?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 08:07    Titel: Antworten mit Zitat

Damit die Szene im Hauptspeicher ist, wieder aktuell ist.
Ich verrechne ja immer die Pixel des Sprites im Hauptspeicher mit den Pixel der aktuellen Szene. Und damit das Surface im Hauptspeicher wirklich die aktuelle Szene darstellt, muss ich das vom Backbuffer in den Hauptspeicher kopieren.
Oder sollte ich lieber alle Sprites im Haupts. anlegen und dann anstatt in den Backbuffer in das Haupts.-surface kopieren?

<edit>
Hier ist mal ein anschauliches Beispiel:

Legende:

Zitat:
a, b, c - Sprites
/ - Spielfigur
\ - Zu blendendes Sprite


Initialisieren:

Videospeicher hat Folgendes geschrieben:
a
b
c
/
Backbuffer hat Folgendes geschrieben:
-Nix-


Hauptspeicher hat Folgendes geschrieben:
\


AGP-Speicher hat Folgendes geschrieben:
-Nix-



Szene blitten:

Videospeicher hat Folgendes geschrieben:
a
b
c
/
Backbuffer hat Folgendes geschrieben:
bbba
a/aa
aaca


Hauptspeicher hat Folgendes geschrieben:
\


AGP-Speicher hat Folgendes geschrieben:
-Nix-



Szene in HS aktualisieren:
(Im Hauptspeicher war zuvor nichts von der aktuellen Szene/ bzw. nur die alte Szene gespeichert.)

Videospeicher hat Folgendes geschrieben:
a
b
c
/
Backbuffer hat Folgendes geschrieben:
bbba
a/aa
aaca


Hauptspeicher hat Folgendes geschrieben:
\
bbba
a/aa
aaca


AGP-Speicher hat Folgendes geschrieben:
-Nix-



Blenden:
(Im AGP wird über die Spielfigur(/) das Zeichen \ geblendet.)

Videospeicher hat Folgendes geschrieben:
a
b
c
/
Backbuffer hat Folgendes geschrieben:
bbba
a/aa
aaca


Hauptspeicher hat Folgendes geschrieben:
\
bbba
a/aa
aaca


AGP-Speicher hat Folgendes geschrieben:
bbba
aXaa
aaca



Backbuffer aktualisieren:

Videospeicher hat Folgendes geschrieben:
a
b
c
/
Backbuffer hat Folgendes geschrieben:
bbba
aXaa
aaca


Hauptspeicher hat Folgendes geschrieben:
\
bbba
a/aa
aaca


AGP-Speicher hat Folgendes geschrieben:
bbba
aXaa
aaca



</edit>
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 21:02    Titel: Antworten mit Zitat

Okay,

vielleicht reden wir aneiander vorbei. Du willst Alphaeffekte im Spiel nutzen. Um es mal einfach zu machen, nehmen wir an, dass du genau ein halbtransparentes Sprite in den Hintergrund kopieren willst.

Dazu solltest du folgendes machen:

1. Surface für das Sprite im Hauptspeicher anlegen und Sprite laden.
2. Surface für den Hintergrund im Hauptspeicher anlegen und Hintergrund hineinkopieren.
3. Hilfssurface in der Größe des Hintergrunds im AGP-Speicher anlegen.
4. Surface für den Hintergrund im Videospeicher anlegen und den Hintergrund dort hineinladen.
5. Primärsurface und Backbuffer in Videospeicher anlegen.


Ablauf:

1. Hintergrund aus dem Videospeicher in den Backbuffer kopieren
2. Die Pixel des Sprites mit denen, des Hintergrunds (im Systemspeicher) blenden und das Ergebnis im Hilfsurface (im AGP) Speicher ablegen.
3. Den fertig geblendeten Teil des Hilfssurfaces (maximal so groß wie das Sprite) in den Backbuffer kopieren.
4. Flip aufrufen.

Du kopierst also nur die Stellen, die geblendet wurden auf die Grafikkarte. Es gibt überhaupt keinen Grund den Speicher von der Grafikkarte zurückzukopieren, NIE ! Da alles redundant auch im Hauptspeicher vorhanden ist.

Wenn du irgendwann mal sehr viele Sprites blenden willst ist es wahrscheinlich einfacher den gesamten Hilfssurface in den Backbuffer zu kopieren. Aber es wird NIE von der Grafikkarte in den Hauptspeicher kopiert.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 11:38    Titel: Antworten mit Zitat

Aber der Hintergrund besteht ja aus der Szene im Backbuffer. Und wie soll denn immer die aktuelle Szene im Surface(Systemspeicher) sein, wenn ich die Sprites in den Backbuffer blitte, aber den Backbuffer dann nicht kopiere?

Ich beschreibe die Situation mal konkreter:
Die Szene besteht jeweils aus verschiedenen Tiles, der Spielfigur, den Gegnern, etc...
Jetzt willich das Sprite eines Schriftzugs über die gesamte Szene blenden.


Christin Rousselle hat Folgendes geschrieben:
1. Hintergrund aus dem Videospeicher in den Backbuffer kopieren

1. Tiles, etc... in Backbuffer kopieren - kapiert.

Christin Rousselle hat Folgendes geschrieben:
2. Die Pixel des Sprites mit denen, des Hintergrunds (im Systemspeicher) blenden und das Ergebnis im Hilfsurface (im AGP) Speicher ablegen.

2. Pixel des Schriftzugs im Systemspeicher nehmen.
Aber im Surface(Systemspeicher) für den Hintergrund mit dem geblendet werden soll ist doch noch gar nichts drin Shocked oder?

Christin Rousselle hat Folgendes geschrieben:
3. Den fertig geblendeten Teil des Hilfssurfaces (maximal so groß wie das Sprite) in den Backbuffer kopieren.

Geblendeter Surfaceteil(AGP; Schriftzug über Szene geblendet) in Backbuffer blitten - kapiert.

Christin Rousselle hat Folgendes geschrieben:
4. Flip aufrufen.

OK, Flip aufrufen - kapiert.

Ich versteh jetzt alles, bis auf den 2. Schritt. Ich hab doch bis jetzt die Szene/den Hintergrund nur im Backbuffer.
Hab ich da jetzt einen Denkfehler?
Könntest du mir das plz nochmal erklären?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 21.07.2003, 12:26    Titel: Antworten mit Zitat

Zitat:
Aber der Hintergrund besteht ja aus der Szene im Backbuffer. Und wie soll denn immer die aktuelle Szene im Surface(Systemspeicher) sein, wenn ich die Sprites in den Backbuffer blitte, aber den Backbuffer dann nicht kopiere?


Wofür brauchst du die aktuelle Szene im Hauptspeicher?

Zitat:

2. Pixel des Schriftzugs im Systemspeicher nehmen.
Aber im Surface(Systemspeicher) für den Hintergrund mit dem geblendet werden soll ist doch noch gar nichts drin oder?


Du hast auch den Hintergrund im Systemspeicher (wie auch im Videospeicher).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 21.07.2003, 20:22    Titel: Antworten mit Zitat

Christian Rousselle hat Folgendes geschrieben:
Wofür brauchst du die aktuelle Szene im Hauptspeicher?


Weil der Hintergrund mit dem geblendet werden soll doch die aktuelle Szene ist.


Christian Rousselle hat Folgendes geschrieben:
Du hast auch den Hintergrund im Systemspeicher (wie auch im Videospeicher).


Dann muss ich aber die Sprites alle in den Hauptspeicher kopieren(Der Hintergrund fürs Blenden besteht aus der Szene!)
Das habe ich vorhin versucht zu erklären; ich will das eine Sprite mit der gesamten Szene blenden.

Christian Rousselle hat Folgendes geschrieben:
2. Surface für den Hintergrund im Hauptspeicher anlegen und Hintergrund hineinkopieren.

Der Hintergrund ist nicht irgendeine Bitmap, die ich in ein Surface lade, sondern die gesamte Szene.

Ich erläutere es nochmal kurz:
Ich habe z.B. das Sprite eines Grastiles und das eines Baumtiles.
Nun wird z.B. in der aktuellen Situation wie auf einem Schachbrett Gras- und Baumtile abgewechselt.
Dann habe ich einen Schriftzug, der sich über den ganzen Bildschirm erstreckt.
Nun will ich, dass dieser Schriftzug z.B. zu 50% durchscheint. Die anderen 50% haben die Pixel der Szene.

Und meine eizige Frage, die jetzt noch bleibt, ist, woher und wie jetzt hier plötzlich der Hintergund für die Blendung im Surface des Systemspeichers sein/kommen soll.

PS: Sry, wenn ich auf die Nerven falle, aber ich kapiers einfach nicht Rolling Eyes

<edit>
Ich zeigs wahrscheinlich morgen Nachmittag mal grafisch Wink
</edit>
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 21.07.2003, 21:41    Titel: Antworten mit Zitat

Normalerweise ist das Sprite nicht so groß wie der gesamte Hintergrund. Wenn dass aber doch so ist, dann muss du, wie schon mehrfach erklärt das Blenden im Hauptspeicher machen und den gesamten Hilfssurface aus dem AGP-Speicher in den Backbuffer kopieren.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 22.07.2003, 14:49    Titel: Antworten mit Zitat

Jetzt hab ich’s mal konkret mit Grafiken gemacht:
Mal angenommen, der gesamte Bildschirm hätte eine Auflösung von 200*150

Legende(Farbe zeigt an, in welchem Speicherbereich die beschriebene Grafik sich befindet):
Grafik-/Videospeicher
AGP-Speicher
System-/Hauptspeicher

Dann wäre eine Mögliche Szene im Spiel diese: Szene 1

Eine zweite mögliche Szene wäre dies: Szene 2

Diese beiden Szenen sind nicht in einer Grafik gespeichert, sondern sind während des Zeichenvorgangs aus den folgenden Sprites zusammengesetzt worden:

Sprite 1(Gras)
Sprite 2(Baum)
Sprite 3(Weg)


So ist das Spiel normal. Jetzt kommt noch ein Sprite hinzu: Schriftzug
Dieses Sprite soll nun links oben(Koordinaten 0/0) mit 50% Transparenz über die Szene geblittet bzw. geblendet werden.

Für die Berechnung der neuen geblendeten Pixel benötigt man die Pixel des Sprites(Schriftzugs) und die der Szene
Bei dieser Berechnung werden jetzt mal einfach beide (R-,G- und B-)Pixelwerte zusammengezählt, durch 2 geteilt und wieder in eine COLORREF-Variable umgewandelt.


Die errechneten Pixel werden nun in einem Surface gespeichert. Dieses müsste nun bei der 1. Szene dies hier enthalten.

Dieses Surface
wird nun in den Backbuffer kopiert und enthält folgendes:
Bei Szene 1
Bei Szene 2

Und damit ich jetzt nicht irgendwelche Blendungen mit weiß(o.Ä.) erhalte, wie hier zu sehen, und damit es bei beiden Szenen 1 und 2 (+ alle anderen Szenen) funktioniert, braucht man für die Blendung die Pixel der aktuellen Szene.


Aber was war vorhin in deiner Beschreibung(deinen Beschreibungen Smile )mit Hintergrund gemeint? Ich dachte eigentlich, die aktuelle Szene. Sonst gibt es keinen Hintergrund.

Ich glaube, das beruht auf einem Missverständnis, was dieses „Hintergrundsurface“ im Hauptspeicher angeht. Ich bitte um Korrektur, falls damit nicht die aktuelle Szene gemeint ist.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 23.07.2003, 16:49    Titel: Antworten mit Zitat

Hi, obwohl ich noch ein blutiger Anfänger bin, wage ich es jetzt mal hier reinzufunken.

Ich glaube Christian ist davon ausgegangen, dass als Hintergrund ein großes Bild vorliegt, aus dem dann immer ein Auschnitt auf den Bildschirm geblittet wird. In dem Fall müsstest du es nicht in den Hauptspeicher zurückkopieren, weil sich der Hintergrund ja nie ändert, es wird nur immer ein anderer Teil angezeigt.

In kann jetzt nur Vermutungen anstellen, wie man es mit Tiles macht, aber wenn du die Tiles im Hauptspeicher hast, kannst du dir doch dort genauso wie im Videospeicher dein aktuelles Hintergrundbild zusammenbauen (oder besser noch, nur den Teil den du fürs Blending brauchst), dann eben Blenden, rein in den AGP-Speicher und dann ab damit in den Backbuffer.

Ich hoffe ich lieg da jetzt nicht falsch und trage nur noch mehr zur Verwirrung bei...

-chewie
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 23.07.2003, 17:05    Titel: Antworten mit Zitat

@Chewie: Daumen hoch Idea Genauso meine ich es. Ich hoffe du wirst besser verstanden als ich. Confused
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 23.07.2003, 18:01    Titel: Antworten mit Zitat

Gut, jetzt glaube ich, es zu verstehen Very Happy
Das war wohl alles ein Missverständnis.

Genau das habe ich vor ein paar Posts gefragt.

The Lord of Programming hat Folgendes geschrieben:
Damit die Szene im Hauptspeicher ist, wieder aktuell ist.
Ich verrechne ja immer die Pixel des Sprites im Hauptspeicher mit den Pixel der aktuellen Szene. Und damit das Surface im Hauptspeicher wirklich die aktuelle Szene darstellt, muss ich das vom Backbuffer in den Hauptspeicher kopieren.
Oder sollte ich lieber alle Sprites im Haupts. anlegen und dann anstatt in den Backbuffer in das Haupts.-surface kopieren?


Als dann keine Antwort darauf kam, habe ich die Idee wieder verworfen.

Na ja, is ja jetzt auch egal. Ich versuchs jetzt mal so, wie gesagt Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 23.07.2003, 18:07    Titel: Antworten mit Zitat

Zitat:

Oder sollte ich lieber alle Sprites im Haupts. anlegen und dann anstatt in den Backbuffer in das Haupts.-surface kopieren?

Wobei du die Sprites die keine Transparenzeffekte haben, auch im Videospeicher halten kannst.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 24.07.2003, 10:34    Titel: Antworten mit Zitat

Ich hab jetzt doch noch mal ne Frage.

Der Ablauf wäre ja jetzt so:
1: Sprites(Sys) in Backbufferersatz(Sys) kopieren.
2: Bei jedem Blendvorgang:
3: {
4: Backbufferersatz(Sys) und Blendsprite(Sys) verrechnen und in Alphasurface(AGP) setzen.
5: Alphasurface(AGP) in Backbuffer(Vid) kopieren.
6: }
7: Flip aufrufen

Aber hier wären dann am Schluss nur die geblendeten Teile am Bildschirm zu sehen, da sich die sonstigen Szenenausschnitte(bzw. die Szene ohne Blendung) nur im Backbufferersatz(Sys) befinden.
Wäre es da nicht sinnvoller, das so zu machen?

1: Sprites(Sys) in Backbufferersatz(Sys) kopieren.
2: Bei jedem Blendvorgang:
3: {
4: Backbufferersatz (Sys) und Blendsprite(Sys) verrechnen und wieder in Backbufferersatz(Sys) setzen.
5: }
6: Backbufferersatz(Sys) in Alphasurface(AGP) kopieren.
7: Alphasurface(AGP) in Backbuffer(Vid) kopieren.
8: Flip aufrufen

Hier wäre jetzt alles im Backbuffer zu sehen: Alle Sprites + geblendete Ausschnitte.
Außerdem wäre eine doppelte Überblendung möglich, da bei der ersten Version immer nur die Szene ohne Blendung als Blendhintergrund genommen wird.

Was wäre in Zeile 6 & 7 am Besten?
So wie’s ist

oder statt mit BltFast den Backbufferersatz(Sys) zu kopieren, die Pixel
mit LockSurface einzeln nehmen und ins Alphasurface(AGP) setzen

oder die beiden Schritte zusammenfassen. D.h. Backbufferersatz(Sys) direkt in
Backbuffer(Vid) kopieren?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 24.07.2003, 11:12    Titel: Antworten mit Zitat

Ich verstehe den Unterschied zwischen den beiden Methoden nicht. Außerdem verstehe ich nicht, was du damit
Zitat:

Aber hier wären dann am Schluss nur die geblendeten Teile am Bildschirm zu sehen, da sich die sonstigen Szenenausschnitte(bzw. die Szene ohne Blendung) nur im Backbufferersatz(Sys) befinden.


sagen willst.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter
Seite 2 von 4

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum