mein colorkey mag mich nicht :(
-
also ich dachte eigentlich ich hätte das mit den colorkeys unter directdraw gerafft. immerhin hatte ich schonmal nen programm am laufen, wo es wunderbar geklappt hat.
nun habe ich in einem anderen programm direct draw gewrapped und unter anderem eine spriteklasse erstellt, die neben der dd7-surface auch die eigenen koordinaten und kleinkrams enthält.
zum setzen des color keys verwende ich die methode
HRESULT CVisualObject::SetColorKey(DWORD low, DWORD high) { DDCOLORKEY key; ZeroMemory(&key, sizeof(key)); key.dwColorSpaceLowValue = low; key.dwColorSpaceHighValue = high; return m_lpdds->SetColorKey(DDCKEY_SRCBLT, &key); }m_lpdds ist die private dd7-surface des sprites LPDIRECTDRAWSURFACE7 m_lpdds
naja, scheint auf den ersten blick zu klappen: testobjekt->SetColorKey(RGB(...), RGB(...)) liefert DD_OK...geblittet wird das ganze wieder von einer anderen klasse, die die gesamte technische directdraw-funktionalität wrappen soll:
void CDDEngine::BlitObject(CVisualObject *sourceobj) { // Gegebenes Objekt unter Verwendung des Colorkeys auf den Backbuffer blitten lpddsBack->Blt(sourceobj->GetCoords(), sourceobj->GetDDS(), NULL, DDBLT_WAIT | DDBLT_KEYSRC, NULL); }nun ist es aber so, dass mein objekt zwar brav geblittet wird, eigentlich auch genau wie ich es mir vorstelle, nur eben wird der colorkey nicht angwendet.
in meinem anderen programm bin ich genauso vorgegangen (colorkey gesetzt, geblittet mit DDBLT_KEYSRC-flag) und es hat wunderbar geklappt. der einzige unterschied war halt, dass der code linear abgearbeitet wurde und nix gewrapped war.
alle dokus und tutorials die ich bisher finden konnte, sagen im prinzip, dass ich alles richtig mache, jedoch wird nirgendwo etwas gewrapped. ist vielleicht ein problem damit bekannt, dass, wenn man dd7-surfaces in klassen steckt, so etwas nicht klappt? kann ich mir eigentlich kaum vorstellen.
ich bin nun seit gestern dabei, den code nach möglichen flüchtigkeitsfehlern zu durchsuchen, aber ich finde nix. es sollte alles prima funktionieren und so eine große sache sollte es nicht sein, einen colorkey zu adden. das sind ja eigentlich nur die vier zeilen, die ich oben gepostet habe. was mache ich falsch?
wäre super, wenn mir wer helfen kann
danke
-
Du wirst wohl beim wrappen irgendwo einen Fehler gemacht haben.
DirectDraw bekommt davon auf jeden Fall nix mit wenn du irgendwelche Interfaces in irgendwelche Helperklassen wrappst.