ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4410597
Jetzt (Chat):
11 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
DirectX API
Enumeration von DX9
GepinntSeite: < 1 2 3 >
AutorThema
jigga Offline
ZFX'ler


Registriert seit:
12.05.2002

Deutschland
79266204
Re: Enumeration von DX9Nach oben.
Vielleicht komm ich ja dieses WE dazu nen Tutorial über die Enumeration zu schreiben... Oder gibt es ein Tutorial (bis auf das SDK) wo die Enumeration genau beschrieben/erklärt/erläutert wird??
31.01.2003, 16:27:16 Uhr
dryas Offline
ZFX'ler


Registriert seit:
28.01.2003

Nordrhein-Westfalen
20320644
Re: Enumeration von DX9Nach oben.
Hallo,

bitte, bitte, bitte!!! *auf die Knie geh!* Also ich muß sagen das ich bisher alles was ich zu DirectX gelesen haben (zumindest) logisch verstanden habe, aber die enumeration ist da wirklich ein ziemlich blöder Brocken, vielleicht denke ich auch zu kompliziert (das werfen mir meine Kollegen hin und wieder vor...

Ich hab bei Deinem Programm zum Beispiel das Problem die ganzen unterschiedlichen Modi a la "D3DFMT_X8R8G8B8" zuzuordnen und in leserliche Forum umzuwandeln... Wenn man einem Benutzer diese Grafikmodi zur Auswahl lässt kann der damit ja nix anfangen...

Traumtutorial:

Dialog mit folgender Auswahl:

- ComboBox mit Grafikkartenauswahl
- ComboBox Auswahl der Bildschirmmodi a la "Höhe x Breite x bpp x Herz(?)"
- Automatisches raussuchen des besten Z-Buffers (automatisch den höchsten nehmen?)
- Aktivieren von VSync
- Aktivieren von Anti-Aliasing (mit Check wievielfaches Aliasing möglich ist und Auswahl in ComboBox)
- Speichern der Werte
- Erklärung wie man in der Anwendung hinterher Anti-Aliasing aktiviert (z.B. 5faches AntiAliasing)

Das versuch ich grade hinzubekommen. Ich geb zu daß das sehr viel ist für 'nen Tutorial, aber das sind die Hauptprobleme vor denen ich als Anfänger im Moment stehe, und 'ne ordentliche Doku z.B. über Anti-Aliasing hab ich immer noch nicht gefunden (ausser vieleicht in der SDK Hilfe, aber die ist recht schwer zu verstehen)...

Wenn Du das hinbekommst, dann bekommste alles von mir! Wie gesagt, daß sind die Hauptprobleme vor denen ich grade stehe, und ich seh da im Moment kein Land. Ich denke mal auch das viele weitere Anfänger vor dem Problem stehen...

Mmmmh... kannst Dir gar nicht vorstellen wie froh ich wäre so'n Tutorial zu haben... werd mich dann irgendwie revangieren! Versprochen!

Benny
31.01.2003, 16:53:07 Uhr
Linuworx.de
xcvb Offline
ZFX'ler


Registriert seit:
09.06.2002

Deutschland
Re: Enumeration von DX9Nach oben.
du kannst ja meinen code als basis nehmen:

erledigt:
- ComboBox mit Grafikkartenauswahl
- ComboBox Auswahl der Bildschirmmodi a la "Höhe x Breite x bpp x Herz(?)"
- Automatisches raussuchen des besten Z-Buffers (du kannst die formate in dem depthstencil_fmt array umsortieren, so dass die favorisierten ganz oben stehen. der höchstmögliche wird dann vorausgewählt)
- Aktivieren von VSync (D3DPRESENT_INTERVAL_ONE und D3DPRESENT_INTERVAL_IMMEDIATE sind immer für windowed und fullscrenn möglich. das muss nicht enumeriert werden. ne einfache checkbox reicht.)

todo:
- Aktivieren von Anti-Aliasing
wie schon gesagt mit CheckDeviceMultiSampleType in einer schleife alle modes durchgehen und die verfügbaren in ne combobox packen.
- Speichern der Werte
hallo? das solltest du selber hinkriegen.
- Erklärung wie man in der Anwendung hinterher Anti-Aliasing aktiviert
beim erstellen des devices in D3DPRESENT_PARAMETERS unter MultiSampleType und MultiSampleQuality die ausgewählten werte reinsetzen.

thats it.

zum thema kryptische formatbezeichnungen. du kannst ja die format beschreibungen in den beiden globalen structs ändern. z.b. "16Bit (5R6G5B)".
31.01.2003, 17:07:35 Uhr
Linksammlung
dryas Offline
ZFX'ler


Registriert seit:
28.01.2003

Nordrhein-Westfalen
20320644
Re: Enumeration von DX9Nach oben.
Hi,

wow! Danke, das hat mich wesentlich weiter gebracht! Super! *freu* Klar, daß mit dem Speichern bekomm ich hin, es spiegelte ja nur das wieder was ich machen will bzw. schon hab...

Ist der höchste Z-Buffer (Bsp. 32bit) auch gleichzeitig der Beste (also auch gleich der favorisierte?)

Und noch was: Es gibt ja mehrere Farbtiefen Modi, z.B. D3DFMT_A1R5G5B5 und D3DFMT_A4R4G4B4 ist ja vom Überbegriff her das gleiche (also 16bit)... kann es auch vorkommen das eine Grafikkarte zwei 16bit Modi kann? Wenn ja, welchen favorisiere ich dann?

Also generell meine ich bei beidem sowas hier:

D3DFMT_D24S8 75 32-bit z-buffer bit depth using 24 bits for the depth channel and 8 bits for the stencil channel.

D3DFMT_D24X8 77 32-bit z-buffer bit depth using 24 bits for the depth channel.

D3DFMT_D24X4S4 79 32-bit z-buffer bit depth using 24 bits for the depth channel and 4 bits for the stencil channel.

Benny



31.01.2003, 17:30:08 Uhr
Linuworx.de
xcvb Offline
ZFX'ler


Registriert seit:
09.06.2002

Deutschland
Re: Enumeration von DX9Nach oben.
Zitat:

Allowable pixel formats. The application specifies a pixel format, and the enumeration is restricted to those display modes that exactly match the format. Valid formats are: D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8, D3DFMT_A2R10G10B10, D3DFMT_X1R5G5B5, D3DFMT_A1R5G5B5, and D3DFMT_R5G6B5, which are members of D3DFORMAT.


D3DFMT_A4R4G4B4 ist also kein gültiger displaymode. bei 16bit sollta man D3DFMT_R5G6B5 den anderen beiden vorziehen, weil das eine bit nicht verschenkt sondern für grün benutzt wird. bei 32bit ist eben D3DFMT_A2R10G10B10 besser, weil 10 anstelle von 8 bit pro farbe.

bei depth/stencil buffern ist es unterschiedlich. reine depthbuffer gibt es D3DFMT_D16, D3DFMT_D24X8 und D3DFMT_D32 (von den lockable varianten mal abgesehen). höher ist schon besser, wenn man mal von der benötigten bandbreite absieht. du kannst ja einen performance- und einen qualitymode anbieten. einmal das schnellere format (das kleinste) und einmal das genaueste. btw. ist D3DFMT_D24X8 vermutlich langsamer als D3DFMT_D32 weil über masken oder read-modify-write nur ein teil der kompletten 32bit verwendet werden.

wenn man den stencil channel verwenden will, muss man erst entscheiden wieviele stencil bits man braucht. dann hat man meistens eh nur noch ein passendes format. und wenn es z.b. kein 1bit stencil format gibt (meine gf2mx) muss man das nächst höhere nehmen.

wie gesagt, die beschreibungen der formate kannst du bei mir im code ja ohne weiteres ändern.
31.01.2003, 18:45:12 Uhr
Linksammlung
dryas Offline
ZFX'ler


Registriert seit:
28.01.2003

Nordrhein-Westfalen
20320644
Re: Enumeration von DX9Nach oben.
Hallo,

hat MS eigentlich irgendwelche Wertigkeiten direkt in die Formatbeschreibung eingebaut, nach denen man sortieren kann?

Benny

03.02.2003, 17:11:21 Uhr
Linuworx.de
dryas Offline
ZFX'ler


Registriert seit:
28.01.2003

Nordrhein-Westfalen
20320644
Re: Enumeration von DX9Nach oben.
Hallo,

hab xcvbs Programm soweit weiterentwickelt, als das ich eine neue Funktion in der die Multisample-Fähigkeit der GraKa getestet wird in die d3d9enum.cpp geschrieben.
Leider ist es so, daß diese mir nur als gültige Rückgabe D3DMULTISAMPLE_NONE und D3DMULTISAMPLE_NONMASKABLE zurückgibt. Die anderen Formate werden nicht aufgenommen. Ich hab eine GeForce2MX, die auch 2x und 4x kann, aber das wird von DirectX nicht erkannt, hat jemand 'ne Idee?

Ganze Funktion:

int GetMultiSampleFormats(
LPDIRECT3D9 pd3d,
UINT Adapter,
D3DDEVTYPE DeviceType,
D3DFORMAT AdapterFormat,
MULTISAMPLE *pMultisample)
{
int n = 0, c = 0;

// Parametercheck
if (pd3d == 0)
return 0;

for (n = 0; n < MULTISAMPLE_FORMAT_COUNT; n++)
{
if (pd3d->CheckDeviceMultiSampleType(
Adapter,
DeviceType,
AdapterFormat,
FALSE,
multisample_fmt[n].format,
NULL) == D3D_OK)
{
if (pd3d->CheckDeviceMultiSampleType(
Adapter,
DeviceType,
AdapterFormat,
FALSE,
multisample_fmt[n].format,
NULL) == D3D_OK)
{
if (pMultisample)
{
pMultisample[c] = multisample_fmt[n];
}
c++;
}
}
}
return c;
}

Wenn mir jemand helfen kann, gerne auch im ICQ.

Herzlichen Dank,

Benny
05.02.2003, 21:11:38 Uhr
Linuworx.de
xcvb Offline
ZFX'ler


Registriert seit:
09.06.2002

Deutschland
Re: Enumeration von DX9Nach oben.
das scheint seit dx9 so zu seni. anstelle der expliziten typen wird für die geforces nonmaskable mit verschiedenen quality levels angegeben. bei den sdk samples ist es genauso.
07.02.2003, 17:11:05 Uhr
Linksammlung
jigga Offline
ZFX'ler


Registriert seit:
12.05.2002

Deutschland
79266204
Re: Enumeration von DX9Nach oben.
Hi,
ich war gerade dabei ne Enumeration für eine Grafikkarte zu implementieren...
Da ist mir aufgefallen das meine Grafikkarte keinen Modus zur Verfügung stellt sobald ich ein Format mit Alpha Blending verwende...
Meine Grafikkarte unterstützt das aber (glaube ich zumindest --> GF4 TI 4200)...

Mein ProgrammCode ist zu 100% korrekt (laut SDK )... kann mir das einer erklären??

[edit]
mhh... wenn ich es mir so recht überlege wäre nen Alpha-Wert für den Bildschirm ja total unsinnig... benötigt man ja nur fürn Backbuffer/ZBuffer

Hat sich also eledigt

Gruß,
Torben
30.06.2003, 01:22:49 Uhr
Sayjionix Offline
ZFX'ler


Registriert seit:
03.03.2002

Hessen
84841416
Re: Enumeration von DX9Nach oben.
Hi,
welches Beispiel in der SDK demonstriert denn am besten die Enumeration unter DX9 ???
hab jetzt spontan keins gefunden

THX schonmal
Ciao, Sayjionix
08.07.2003, 16:34:53 Uhr
laprican Offline
ZFX'ler


Registriert seit:
25.09.2002

Schleswig-Holstein
172103202
Re: Enumeration von DX9Nach oben.
eigentlich ist es bei allen gleich.
08.07.2003, 17:09:23 Uhr
Biosphere
Unknown GER Offline
ZFX'ler


Registriert seit:
09.01.2003

Deutschland
Re: Enumeration von DX9Nach oben.
Kannst eigentlich jedes Projekt in Direct3D/Samples öffnen. Ist überall eine Enumeration.cpp und Enumeration.h drin.

ABer ich finde es ist einfach, in der Doku mal die DirectGraphics-Referenz zu öffnen und sich dort die Funktionen der IDirect3D9-Schnitstelle anzugucken. Erklärt sich dann eigentlich fast von selbst wie man eine schlanke Enumeration basteln kann.
07.08.2003, 21:49:48 Uhr
EyDu Offline
ZFX'ler


Registriert seit:
24.08.2002

Deutschland
224254930
Re: Enumeration von DX9Nach oben.
-Adapter enumerieren
-DeviceType für jeden Adapter enumerieren
-Videomouds für jeden DeviceType enumerieren
-BackBuffer-Format für jeden Videomodus enumerieren
-ZStencilBuffer-Format für jedes BackBuffer-Format enumerieren
-MultiSamplingType für jedes ZSB-Format enumerieren
-Und dann noch die Multisamplingqualität für jeden MS-Typ


Vielleicht solltest du noch die unterstützten Textur-Formate enumerieren.
18.09.2003, 22:28:59 Uhr
GameProgrammer Offline
ZFX'ler


Registriert seit:
03.01.2003

Baden-Württemberg
301698913 niko_horn@yahoo.de GameProgrammer14
Re: Enumeration von DX9Nach oben.
Hey wo gibt es denn das Tutorial über die Enumeration von DX9 in der Tutorial Sektion, sehe irgenwie keins....???
25.10.2003, 19:43:26 Uhr
ChrisM Offline
ZFX'ler


Registriert seit:
16.03.2002

Rheinland Pfalz
65348179
Re: Enumeration von DX9Nach oben.
Hi,

die Enumeration von DirectX 9 unterscheidet sich nur unwesentlich von der von DirectX 8.

Aber wenn ihr mich fragt, braucht man heutzutage überhaupt keine Enumeration mehr, die Standardformate überstützt sowieso jede Grafikkarte und kaum ein User hat mehrere Grafikadapter.

ChrisM
28.10.2003, 18:55:46 Uhr
ChrisMs Baustelle
GameProgrammer Offline
ZFX'ler


Registriert seit:
03.01.2003

Baden-Württemberg
301698913 niko_horn@yahoo.de GameProgrammer14
Re: Enumeration von DX9Nach oben.
Ja schon, aber brauche trotzdem ein Tutorial....kennt ihr noch eins ?
29.10.2003, 09:22:07 Uhr
jfuechsl Bitte nicht stören: Genie bei der Arbeit. Und ich schlafe gerade.
ZFX'ler


Registriert seit:
10.10.2002

Österreich
Re: Enumeration von DX9Nach oben.
Hallo.
Es wäre auch wahnsinnig nett, wenn jemand das ganze auf C# umschreibt (mit Windows.Forms). Ich habe nämlich versucht die Enumeration in ner C# Windows App zu machen und die Enumerierten Daten dann dem Spiel als Datei mitzuteilen.
Leider komme ich in letzter Zeit nicht dazu, da weiter zu machen (Schule).
10.01.2004, 20:45:07 Uhr
[PaC]Cabal Offline
ZFX'ler


Registriert seit:
23.09.2002

Thüringen
160220242
Re: Enumeration von DX9Nach oben.
Falls es jemanden interessiert, ich hab die komplette Enumeration in eine Funktion gepackt. Diese erstellt mir dann eine Liste mit allen Modi, die die GraKa kann. Als Speicherklassen habe ich 3 Stück gemacht. D3DMode ist für jeden einzelnen Modus und kann ja bei Bedarf noch erweitert werden, d3dadapter ist für jede Grafikkarte und besteht aus der Liste mit allen Modi und enumadapters enthält dann die liste von allen Grafikkarten.
Code:
struct d3dmode
{
    unsigned int m_width,m_height;
    unsigned int m_refresh;
    D3DFORMAT m_format;
};

class d3dadapter
{
public:
    D3DADAPTER_IDENTIFIER9 m_di;
    int m_modecnt;
    d3dmode* m_modes;
    d3dadapter(){ZeroMemory(&m_di,sizeof(m_di));m_modecnt=0;m_modes=NULL;}
    ~d3dadapter(){SAFE_DELETEALL(m_modes);}
};

class enumadapters
{
public:
    d3dadapter* m_ad;
    int m_adcnt;
    enumadapters(){m_ad=NULL;m_adcnt=0;}
    ~enumadapters(){SAFE_DELETEALL(m_ad);}
};


Die Enumfunktion sieht dann so aus:
Code:
HRESULT CD3DAdapterEnum::EnumAdapters()
{
    D3DFORMAT modeformat[]={D3DFMT_X8R8G8B8,
                            D3DFMT_A8R8G8B8,
                            D3DFMT_A2R10G10B10,
                            D3DFMT_X1R5G5B5,
                            D3DFMT_A1R5G5B5,
                            D3DFMT_R5G6B5};
    SAFE_DELETE(m_enum);
    if(!CD3DServer::GetDirect3D())
        return E_FAIL;
    LPDIRECT3D9 d3d=CD3DServer::GetDirect3D();
    int cnt=d3d->GetAdapterCount();
    m_enum=new enumadapters;
    m_enum->m_adcnt=cnt;
    m_enum->m_ad=new d3dadapter[cnt];
    for(int i=0;im_ad[i]);
        d3d->GetAdapterIdentifier(i,0,&ad->m_di);
        int nr=0;
        for(int j=0;jGetAdapterModeCount(i,modeformat[j]);
        ad->m_modecnt=nr;
        ad->m_modes=new d3dmode[nr];
        d3dmode* p=ad->m_modes;
        for(j=0;jm_modecnt;j++)
        {
            for(int k=0;kif(SUCCEEDED(d3d->EnumAdapterModes(i,modeformat[k],j,&dm)))
                {
                    p->m_format=dm.Format;
                    p->m_width=dm.Width;
                    p->m_height=dm.Height;
                    p->m_refresh=dm.RefreshRate;
                    p++;
                }
            }
        }
    }
    return S_OK;
}


Bei mir funktioniert das super und liefert alles, was man braucht. Das lässt sich dann auch einfach erweitern, weil man soweit immer schon alle Informationen in den Listen hat, die von den DX Funktionen benötigt werden.
11.01.2004, 01:59:02 Uhr
CYber-Studios
ZeroG Offline
ZFX'ler


Registriert seit:
11.11.2003


Re: Enumeration von DX9Nach oben.
Zitat:
Hallo.
Es wäre auch wahnsinnig nett, wenn jemand das ganze auf C# umschreibt (mit Windows.Forms). Ich habe nämlich versucht die Enumeration in ner C# Windows App zu machen und die Enumerierten Daten dann dem Spiel als Datei mitzuteilen.
Leider komme ich in letzter Zeit nicht dazu, da weiter zu machen (Schule).

Hi,

ist zwar ohne Auswahldialog, aber das sollte zumindest die Richtung zeigen die man einschlagen muss.
Tutorial

cu,
0G
27.01.2004, 14:11:52 Uhr
Timm von Puttkamer Offline
ZFX'ler


Registriert seit:
18.08.2002

Deutschland
217661920
Re: Enumeration von DX9Nach oben.
Also die Enumeration selbst ist kein Problem für mich, allerdings habe ich immer Probleme damit, dass irgendwie geschickt abzuspeichern und es möglichst einfach zu machen, wenn man dann in einem Auswahl-Dialog oder wie bei Spielen in-game die Ergebnisse der Enumeration präsentiert. Wie strukturiert man das am besten?
31.01.2004, 14:23:58 Uhr
Chrome Software
GameProgrammer Offline
ZFX'ler


Registriert seit:
03.01.2003

Baden-Württemberg
301698913 niko_horn@yahoo.de GameProgrammer14
Re: Enumeration von DX9Nach oben.
Ich hab mal ein kleines Programm gemacht das eine Enumeration durchführt und die verfügbaren Adapter und die dazu verfügbaren Videomodis
(16-32 Bit) in einem Protokoll, dass erzeugt wird, abspeichert.
HIER könnt ihr das Programm saugen.

4 Mal gendert, zuletzt am 21.02.2004, 20:34:28 Uhr von GameProgrammer.
21.02.2004, 20:29:09 Uhr
PsychoChris Offline
ZFX'ler


Registriert seit:
23.01.2003

Deutschland
72084302
Re: Enumeration von DX9Nach oben.
Zitat von ChrisM:

Aber wenn ihr mich fragt, braucht man heutzutage überhaupt keine Enumeration mehr, die Standardformate überstützt sowieso jede Grafikkarte und kaum ein User hat mehrere Grafikadapter.
ChrisM


Das ist wohl leider der Grund, warum sich Leute wie meine Wenigkeit darüber ärgern, das ihr 2-Monitor-System bei einigen Spielen nur zu Problemen führt. Mal kann man nicht bestimmen auf welchem Monitor das Spiel läuft, und Änderungen in den Systemeinstellungen übetragen sich auf alle Applikationen, mal startet ein Spiel dann aber auch überhaupt nicht, weil es Dualhead-Modi nicht akzeptiert, und sich daher entschließt gar nicht zu laufen, usw.
Denke das jeder, der seine Software mehr als nur einer Handvoll von Leuten zukommen lassen möchte sich darüber definitiv gedanken machen müsste.

Greetings,
PsychoChris
21.02.2004, 20:56:28 Uhr
iNzAnE Offline
ZFX'ler


Registriert seit:
30.07.2002

Deutschland
106246705 iNzAnE5684@hotmail.com iNzAnE5684
Re: Enumeration von DX9Nach oben.
@PsychoChris:
Hast absolut recht. Lustigerweise macht der großteil der Professionellen Spiele dich ich so habe auf meinen 2 Monitoren größte Probleme. Und dabei will ich sogar nur den Standardmonitor für Spiele benutzen. Teilweise verweigern sie den start total, teilweise ist der Input nicht exklusiv, und sobald ich mit der Maus mal auf dem anderen Monitor bin und klicke stürzt es ab. Schon irgendwie armselig, vor allem wenn man genau weiß das es im schlimmsten Fall ein paar Stündchen mehr arbeit kosten würde da etwas aufzubessern.
22.02.2004, 00:54:30 Uhr
Ordinary Story
Christoph1987 Offline
ZFX'ler


Registriert seit:
04.04.2004


Re: Enumeration von DX9Nach oben.
Schau mal in die DirectX 9 SDK von Microsoft. Du scheinst ja C++ zu verwenden, also sollte es kein Problem sein die komplette Initialisierung des besten Devices in deine Anwendung zu importieren...

Ich habe den Code auch etwas modifiziert in Delphi übersetzt, falls ihn jemand braucht, poste ich mal die 1400 Zeilen hier .
04.04.2004, 10:10:25 Uhr
Strukain Offline
ZFX'ler


Registriert seit:
18.07.2004

Berlin
Strukain@yahoo.de
Re: Enumeration von DX9Nach oben.
Sorry, dass ich mit ner anderen Frage reinplatze, aber sie passt zum Thema und ich wollte kein neues Thema aufmachen.
Ich habe Zerbies Tutorial über die Initialisierung von DX8 genutzt, aber nun gibt mir die CreateDevice-Funktion einen "Invalid Call" zurück, und ich hab keina Ahnung, wieso (Hab den Code 1:1 kopiert, nur ein paar Varialbennamen geändert). Wieso funktioniert die Enumeration nicht?
P.S.: Hat sich erledigt, hab den Code jetzt mit Variablen und allem kopiert, und obwohl ich keinen Unterschied feststellen kann, funkioniert es.

1 Mal gendert, zuletzt am 21.07.2004, 19:35:48 Uhr von Strukain.
20.07.2004, 20:04:21 Uhr
GepinntSeite: < 1 2 3 >


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel