Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Otscho Super JLI'ler

Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 04.02.2007, 17:27 Titel: unterstützt Bildschirmauflösungen |
|
|
Weiß jemand, wie man in einem Game herausfinden kann, welche Auflösungen ein Bildschirm unterstützt ? Bei der msdn hab ich schon nachgeschaut und in der _D3DADAPTER_IDENTIFIER9 steht dazu auch nichts drin. |
|
Nach oben |
|
 |
Dr. Best Senior JLI'ler

Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 04.02.2007, 17:29 Titel: |
|
|
Ich glaube IDirect3D9::CheckDeviceFormat(...) müsste dir da weiterhelfen. |
|
Nach oben |
|
 |
Otscho Super JLI'ler

Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 04.02.2007, 18:45 Titel: |
|
|
Ne, mit dem testet man nur welche Farbpalette die Graka unterstützt. Da lässt sich z.B. rausfinden ob sie Texturen im Format D3DFMT_A8R8G8B8 unterstützt. |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 04.02.2007, 19:48 Titel: |
|
|
IDirect3D9::EnumAdapterModes(...)
Und dann den D3DDISPLAYMODE Parameter ansehen, der hat dann
Width und Height als Strukturmember. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
Otscho Super JLI'ler

Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 04.02.2007, 21:55 Titel: |
|
|
Ich hab mal folgende Funktion geschrieben mit der man die Auflösung testen könnte :
CPP: | BOOL CMenuGraphic::IsDisplayModeOk(D3DXVECTOR2 size){
D3DDISPLAYMODE pMode = {
static_cast<UINT>(size.x),
static_cast<UINT>(size.y),
static_cast<UINT>(72),
D3DFMT_A8R8G8B8 };
HRESULT hr = (*m_lpD3D)->EnumAdapterModes(
D3DADAPTER_DEFAULT,
D3DFMT_A8R8G8B8,
(*m_lpD3D)->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_A8R8G8B8),
&pMode);
return SUCCEEDED(hr);
} |
Nur kommt da immer false raus. Entdeckt da vielleicht jemand nen Fehler ? |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.02.2007, 00:03 Titel: |
|
|
1.
CPP: | (*m_lpD3D)->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_A8R8G8B8) |
Wenn du das so schon benutzen willst dann solltest du wohl noch ein -1 dazu schreiben. Zum testen könnte 0 auch reichen.
2.
CPP: | D3DDISPLAYMODE pMode = {
static_cast<UINT>(size.x),
static_cast<UINT>(size.y),
static_cast<UINT>(72),
D3DFMT_A8R8G8B8 }; |
Bringt dir AFAIK absolut nichts da dir die Methode EnumAdapterModes diese Struktur füllt. Du müsstest also gegen das Ergebniss testen und dementsprechend true oder false zurück liefern. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 05.02.2007, 09:01 Titel: |
|
|
Mit EnumAdapterModes werden alle potentiellen Auflösungen deiner Grafikkarte ermittelt. Wenn der Displaytreiber Einschränkungen in den unterstützten Auflösungen anbietet werden diese Einschränkungen gleich mit beachtet. (was heute meisstens der Fall ist, aber ich hatte auch schon auf einem 15 Zoll Röhrenmoni angebotene Auflösungen von 1600x1200 bei 180 Hz gesehen, nur weil die Graka es schaffen würde)
Dann kennt man zwar die Liste der möglichen Auflösungen, muss jetzt aber noch die dazu unterstützten Farbtiefen und Wiederholfrequenzen ermitteln. CheckDeviceFormat hilft dann. Nicht jede Auflösung stehe in jeder Wiederholfrequenz und jeder Farbtiefe zur verfügung (zumindest früher oft nicht, heute ist das für die meissten Grakas kein problem mehr)
PS.: der Hintergrundbuffer selbst unterstützt meisst nur D3DFMT_X8R8G8B8. Ein Alphakanal im Hintergrundbuffer ist meißt nur bedingt zu gebrauchen - zu was soll denn im Hintergrund transparenz erzeugt werden? (zu den Kondensatoren und Wiederständen im inneren des Monitors...) _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.02.2007, 09:41 Titel: |
|
|
AFE-GmdG hat Folgendes geschrieben: | PS.: der Hintergrundbuffer selbst unterstützt meisst nur D3DFMT_X8R8G8B8. Ein Alphakanal im Hintergrundbuffer ist meißt nur bedingt zu gebrauchen - zu was soll denn im Hintergrund transparenz erzeugt werden? (zu den Kondensatoren und Wiederständen im inneren des Monitors...) |
Ich habe schon Beispiele gesehen in denen diese Eigenschaft genutzt wurde um das Fenster semi/transparent zu machen, was dazu diente dem Fenster beliebige Formen zu geben. Ich bin aber grade nicht sicher obs wirklich der Backbuffer eines SwapChains war oder doch nur eine RenderTargetTexture. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
Otscho Super JLI'ler

Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 05.02.2007, 15:27 Titel: |
|
|
Fallen hat Folgendes geschrieben: | Wenn du das so schon benutzen willst dann solltest du wohl noch ein -1 dazu schreiben. Zum testen könnte 0 auch reichen. | Wo sollte das stehen ?
Fallen hat Folgendes geschrieben: | Bringt dir AFAIK absolut nichts da dir die Methode EnumAdapterModes diese Struktur füllt. |
Aber die Methode könnte dann doch jeweils nur eine Auflösung ausgeben.
Ich dachte mit der kann man eine Auflösung im D3DDISPLAYMODE testen.
Kannst du vielleicht mal den vollständigen Code von dieser Funktion posten, bevor wir uns noch ewig lang aneinader vorbeireden. |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 06.02.2007, 12:37 Titel: |
|
|
Ein vollständiges Beispiel dazu findest du in deinem DX-SDK:
*\Microsoft DirectX SDK\Samples\C++\Common\DXUTenum.cpp
*\Microsoft DirectX SDK\Samples\C++\Common\DXUTenum.h
Der Stil ist zwar mehr als mies aber dort solltest du alles finden können. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
|