Hi,
kennt sich hier jemand richtig gut mit DirectDraw aus? Dann bitte helft mir. Ok jetzt kommt der Hammerpost, bitte nicht erschrecken
Problem ist folgendes. Ich zeichne derzeit eine kleine Vorschau in ein Fenster. Nun ist aber die Ausgabe dermassen langsam das die CPU Last dabei schon auf 100% springt. Die GDI is einfach zu langsam. Gut dacht ich mir, versuch ichs mit DirectDraw.
Habe mir x Tutorials angeschaut, alle schreiben das selbe. Ich habe die Sachen auch genauso initialisiert wie es dort drin steht. Geht.
Nun das Problem. Sobald ich DirectDraw initialisiert habe, ist meine Anwendung dermaßen langsam, das ist unzumutbar. Ich meine damit speziell ein einfaches Verschieben des Fensters sieht jetzt so aus wie damals mit ner 256k VGA Grafikkarte unter HiColor. Was ist das?
Dann habe ich ein Surface als Frontbuffer initialisiert (PRIMARYSURFACE). Hier stoße ich mich schon das erste mal. Ist es denn nicht möglich dieses Surface auf eine kleine Fläche von sagen wir 100x100 Pixel zu begrenzen? Alle Tutorials initialisieren auf volle Bildschirmgröße und auch ich bekomm es nicht hin. Wenn es kleiner wäre würde doch einiges an Geschwindigkeit rausspringen.
Desweiteren habe ich ein Backbuffer initialisiert (OFFSCREENPLAIN) auf den ich zeichnen will und dann auf den Frontbuffer blitten will. Und hier wieder ein Problem. Da ich Speicher sparen will initialisiere ich doch den Backbuffer nicht auch wieder auf volle Bildschirmgröße sondern das was ich brauche (320x240). So nun kommt es zum Zeichnen. Ich mache folgendes:
(1) Backbuffer.Lock
(2) hohle mir den Pointer vom Backbuffer Surface (Pointer auf Longword bei 32bit Farbtiefe)
(3) Zeichne eine Linie von 0 bis 319 und erhöhe dabei den Pointer immer mit Inc (inc sollte den Pointer immer um 4 erhöhen da sizeof(longword) =32)
(4) Wiederhohle (3) das 239 mal immer mit abwechselnd schwarz und dann wieder weisse Linie
Nun ein Blit auf den Frontbuffer mit dem Frontbuffer-"Rahmen" (ich weiß nicht wie ich das sonst sagen soll) von 0,0,319,239 (die Koordinaten natuerlich auf das Fenster angepasst) und einem Backbuffer-"Rahmen" von dem selben Außmaß (hier aber nur 0,0,319,239)
Nun ist auch fast das zu sehen was ich wollte nur ist das ganze Verzogen so wie wenn man ein Bitmap einließt und bei der Breite immer ein Byte vergißt. Ihr wisst sicher was ich meine. Das ganze ist dann so schräg.
Irgendwie will mir das nicht in den Kopf warum er das so macht. Ich habe dann eine Lösung gefunden das er das richtig anzeigt indem ich den Backbuffer auf 382 Pixel Breite initialisiere, dann geht es auf einmal.
Hat das irgendwas mit irgendwelchen Seitenverhältnissen zu tun oder so? Ich sehe keine Zusammenhang z.w. 382 und meine Auflösung von 1024x768 32bit und den initialisierten andern Werten.
Kennt das Phänomen jemand? Ich sitz jetzt schon 2 Tage...ich werd mich gleich zu OpenGL umorientieren, das ist wenigstens 100% Fensterbezogen und nicht so ne Art Overlay wie DirectDraw.
So lonG
Daniel