Windows7/..PrimarySurface->SetPalette(.)

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

Windows7/..PrimarySurface->SetPalette(.)

Beitrag 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);
Es ist leichter, einen Sack Flöhe zu hüten.
Helmut
Establishment
Beiträge: 237
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

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

Beitrag von Helmut »

Vielleicht funktioniert es als Workaround, mit while(PeekMessage)bla; alle Nachrichten zwischendurch abzuarbeiten?
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

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

Beitrag von HeinzK »

Hab ich versucht .. hat aber nichts gebracht.
Trotzdem Danke für den Tipp.
Es ist leichter, einen Sack Flöhe zu hüten.
VirtualLabs2000
Beiträge: 15
Registriert: 26.02.2002, 10:34
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

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

Beitrag 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).
Es ist leichter, einen Sack Flöhe zu hüten.
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

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

Beitrag 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.
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

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

Beitrag 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!
Es ist leichter, einen Sack Flöhe zu hüten.
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

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

Beitrag 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).
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

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

Beitrag von HeinzK »

'Direct' nichts! Für mich ist neu, das man alles (XAudio, OpenGL, DirectInput, etc.) so mischen kann.
Es ist leichter, einen Sack Flöhe zu hüten.
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

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

Beitrag 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.
Benutzeravatar
HeinzK
Establishment
Beiträge: 234
Registriert: 05.11.2009, 08:37
Benutzertext: ZwiAner
Echter Name: Heinz Kempter
Wohnort: Wald
Kontaktdaten:

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

Beitrag 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.
Es ist leichter, einen Sack Flöhe zu hüten.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

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

Beitrag 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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
DomiOh
Establishment
Beiträge: 132
Registriert: 08.10.2002, 14:44

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

Beitrag 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 ;)
Helmut
Establishment
Beiträge: 237
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

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

Beitrag 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
Antworten