Seite 1 von 1

Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 07.11.2009, 17:47
von HeinzK
Hallo, ich habe folgendes Problem unter Windows 7:
Wenn SetPalette direkt auf CreatePalette folgt, ist meine Farbtabelle nicht gesetzt.

Beim Debuggen ist mir dann folgendes aufgefallen: Wenn durch einen
Debug-Stop zwischen CreatePalette und SetPalette ca. 7 Sekunden vergangen
sind, dann ist meine Farbtabelle auf einmal da.

Also habe ich einen 'Weg drumherum' programmiert .. siehe ::messagebox(...);
Hier ist es allerdings egal, wieviel Zeit verstrichen ist, so funktioniert es immer!

Der Code besteht schon seit 2000 und lief bisher unter Windows98, Windows2000,
WindowsXP immer problemlos.

Kann mir jemand einen Tipp geben .. ?

CodeSchnipsel:

k_lpDd->CreatePalette
(
(DDPCAPS_8BIT | DDPCAPS_ALLOW256),
ape,
&k_lpDdPalette,
NULL
);
if (g_sOS == "Windows 7")
{
::MessageBox
(
k_hWnd,
"Ist Windows 7 installiert ?",
"ZwiAner",
MB_OKCANCEL
);
}

k_lpDdPrimarySurface->SetPalette(k_lpDdPalette);

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 07.11.2009, 18:57
von Helmut
Vielleicht funktioniert es als Workaround, mit while(PeekMessage)bla; alle Nachrichten zwischendurch abzuarbeiten?

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 07.11.2009, 19:38
von HeinzK
Hab ich versucht .. hat aber nichts gebracht.
Trotzdem Danke für den Tipp.

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 08.11.2009, 00:54
von VirtualLabs2000
Ich weiß, das ist jetzt vielleicht von etwas weit hergeholt und ich habe auch keine Ahnung, ob das wirklich mit deinem Problem zusammenhängt: aber das gute alte Anno 1602 hatte wo ich's jetzt mal wieder ausprobiert hatte auch Probleme mit der Farbpalette. Bis Windows Vista lief das noch problemlos aber seit ich Windows 7 habe, scheint hier auch die Farbpalette nicht mehr korrekt gesetzt zu werden. Mal werden für ein paar Sekunden die richtigen Farben angezeigt und dann scheint es wieder so, als ob keine oder die falsche Farbpalette gesetzt ist.

Habe bis jetzt noch keine Lösung gefunden, habe aber auch noch nicht sonderlich danach gesucht, weil ich das Spiel nur noch seeeehr selten verwende. Aber es hört sich nach deiner Beschreibung nach möglicherweise genau dem gleichen Problem an und vielleicht findest du in dem Zusammenhang ja mehr Informationen, die dich weiterbringen.

Noch kurz zur Info: OS ist Windows 7 64 Bit Ultimate auf ner ATI Radeon HD3200 mit neustem Catalyst-Treiber.

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 08.11.2009, 09:24
von HeinzK
Auch bei mir ist es so, dass für einen kurzen Moment die richtigen Farben da sind, dann aber für immer verschwinden.
Mit einem der beiden Tricks (s.o.) kann ich dennoch meine Farbpalette setzen (diese bleibt ab da auch aktiv).

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 10.11.2009, 14:04
von DomiOh
Ich weiss es ist im Prinzip eine Kompatibilitätsfrage.
Aber wozu (ist echte neugier) benötigt man noch DirectDraw?

MS hat ja auch klammheimlich seit Vista den D3DRM abgeschafft. Somit laufen ältere Spiele auch nur dann, wenn man sich irgendwo die d3drm.dll besorgt und die in das Spielverzeichnis kopiert.

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 10.11.2009, 15:59
von HeinzK
;) Das ist wohl die Fangfrage ..
a) Ich habe mit DirectX 7 angefangen das Spiel zu programmieren und dann immer aktualisiert bis DirectX 9.
b) Ich will so viel wie möglich selbst machen (aus Spaß an der Sache und weil ich wissen will wie was läuft ..).
c) Ich will mich vorerst voll auf das Spielgeschehen konzentrieren (später ist alles noch möglich).
d) Ich habe ein 2D Spiel in Angriff genommen und will so wenig wie möglich 'overhead' erzeugen.

zu b) Von DirectDraw lasse ich mir Zeiger auf die Oberflächen geben. Dann Male ich los, alles, Punkt für Punkt .. und Flip.
Dazu bräuchte ich nicht unbedingt DirectDraw, da hast Du Recht .. aber ..

e) Ich nutze DirectInput für Maus und Tastatur.
f) Ich nutze DirectSound.
g) Ich habe auch schon Multiplayer mit DirectPlay vorbereitet.

zu d) Meine Spielidee wäre in 3D nicht so leicht bedienbar.

Du siehst, dass sind ganz schön viele Ichs und Directs!

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 10.11.2009, 20:57
von DomiOh
zu e,f,g: Was hat DirectSound, DirectInput und DirectPlay (wovon ich nur abraten kann) mit DirectDraw zu tun?

Ich habe bislang auch DirectSound und DirectInput zusammen mit D3D benutzt.
Inzwischen benutze ich DirectInput und XAudio (und für den XBox-Controller XInput).

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 10.11.2009, 22:15
von HeinzK
'Direct' nichts! Für mich ist neu, das man alles (XAudio, OpenGL, DirectInput, etc.) so mischen kann.

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 10.11.2009, 23:07
von DomiOh
Klar kann man das mischen. Gehört alles zum aktuellen DirectX-SDK und ist völlig unabhängig voneinander.
Wieso sollte man das nicht mischen können?
Ich benutze allerdings kein OpenGL sondern Direct3D - auch für 2D-Projekte.

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 10.11.2009, 23:58
von HeinzK
Ok, aber im Moment bin ich in der Spielgestaltungsphase und mein Grafiksystem
funktioniert. Bei nächster Gelegenheit, wenn wieder etwas Ruhe einkehrt,
werde ich die mich über die neuen Möglichkeiten informieren. Noch habe ich mein
selbst gestecktes Ziel noch nicht erreicht.

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 11.11.2009, 00:41
von Krishty
Da kommt einmal jemand hierher, der tatsächlich auf ein Spiel hinentwickelt (sogar mitsamt hier und jetzt existierender Spielmechanik!) und nicht nur hippe Grafiktechnologien zu sinnleeren Engine-Rohbauten zusammenschweißt (die dann eh kein Mensch jemals ausführt) – und schon wird versucht, ihm eine neue API aufzuschwatzen?

Der Fehler mag nervig sein, aber manchmal muss man eben drum herum bauen, statt deswegen (in einem Ein-Mann-nach-Feierabend-Projekt!) einen neuen Renderer aufzusetzen. (Soweit ich gelesen habe, hat Heinz ja schon dreimal bei Null angefangen.) Das nennt man dann Priorisierung.

Lieber etwas Spielbares, das nur auf einer virtuellen XP-Installation (oder von mir aus auch in einer DOS-Box oder sonstwo) läuft, als ein weiterer Tropfen in diesem Meer zielloser State-of-the-Art-Demos, in denen ich hier z.B. ertrinke. Das sollte hier also zu keiner Rechtfertigung ausarten … mein Senf. Und sorry, dass ich zur Lösung des ursprünglichen Problems nichts beitragen kann.

Gruß, Ky

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 11.11.2009, 12:42
von DomiOh
Hallo Ky,

ich schwatze ihm nichts auf. Ich selber entwickle übrigens auch auf ein Spiel hin und mache keine sinnlosen Techdemos.
Allerdings sieht man schon an diesem Fehler den er hat, dass meine Befürchtungen, dass es mit DDraw Probleme geben könnte, sich bewahrheiten.
Das gleiche Problem wenn man DirectSound3D unter Vista benutzt anstatt XAudio.
Ergebnis: Man hat keinen 3d-Sound mehr, da Vista DSound3D nicht mehr unterstützt. Und bei DirectPlay wird ja sogar von MS selbst empfohlen, es aus Sicherheitsgründen nicht mehr weiter zu verwenden.

Ich würde versuchen, das Spiel zu Ende zu bekommen, und dann die einzelnen Komponenten zu ersetzen durch moderne Varianten.

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 11.11.2009, 14:45
von Krishty
DomiOh hat geschrieben:Ich würde versuchen, das Spiel zu Ende zu bekommen, und dann die einzelnen Komponenten zu ersetzen durch moderne Varianten.
Okay, dann sind wir ja doch einer Meinung :) Ich meinte nur rauszulesen, dass DirectDraw die schlechtmöglichste API-Wahl überhaupt sei.

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 11.11.2009, 19:13
von DomiOh
Krishty hat geschrieben:
DomiOh hat geschrieben:Ich würde versuchen, das Spiel zu Ende zu bekommen, und dann die einzelnen Komponenten zu ersetzen durch moderne Varianten.
Okay, dann sind wir ja doch einer Meinung :) Ich meinte nur rauszulesen, dass DirectDraw die schlechtmöglichste API-Wahl überhaupt sei.
Nein so war es gar nicht gemeint. Aber ich kenne a) die Meinung vieler Leute, die weder gewillt sind, spiele über Virtual XP noch über die DosBox zu spielen und b) die schleichenden Inkompatibilitäten bei DirectX die speziell seit Vista begonnen haben.
Ich selber spiele sogar noch alte C-64 Spiele auf einem Emulator ;)

Re: Windows7/..PrimarySurface->SetPalette(.)

Verfasst: 12.11.2009, 20:29
von Helmut
Falls du noch nicht dran gedacht hast, du kannst auch einfach mal auf Paletten verzichten. Ich habe auch schonmal ein Spiel komplett mit DirectDraw und ohne Paletten vollendet (obwohl die meisten Grafiken wahrscheinlich sogar mit 16 Farben auskämen...). Allein das Konzept der Paletten ist ja schon ein Krampf, vor allem in heutiger Zeit.

Ciao