Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

14.12.2003, 21:46

Fehler bei GetAdapterModeCount();

Hallo zusammen.
Listing 2.16 führt bei mir leider nicht zu dem im Buch beschriebenen Ergebniss. Hier mal das Listing (obwohl ich dreist behaupte, dass es frei von Fehlern ist)...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <Windows.h>
#include <StdIO.h>
#include <D3D9.h>

int                         g_iNumAdapters;
D3DADAPTER_IDENTIFIER9*     g_pAdapters;
PDIRECT3D9                  g_pD3D = NULL;


int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    char acAdapterInfo[1024];

    //Schnittstelle für Direct 3D erzeugen

    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if(g_pD3D == NULL) 
    {
        //Fehler aufgetreten
        MessageBox(NULL, "Fehler beim erzeugen der Direct 3D Schnittstelle !",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }

    // Anzahl der Adapter ermitteln
    g_iNumAdapters = g_pD3D->GetAdapterCount();

    // Speicher reservieren und Informationen über jeden Adapter sammeln
    g_pAdapters = new D3DADAPTER_IDENTIFIER9[g_iNumAdapters];

    for (int iAdapter = 0; iAdapter < g_iNumAdapters; iAdapter++)
    {
        if(FAILED(g_pD3D->GetAdapterIdentifier(iAdapter, 0,
                                              &g_pAdapters[iAdapter])))
        {
            MessageBox(NULL, "Adapterinformationen konnten nicht abgefragt werden!",
                       "Fehler", MB_OK | MB_ICONEXCLAMATION);
            g_pD3D->Release();
            delete[] g_pAdapters;
            return 1;
        }

        // Adapterinformationen anzeigen
        sprintf(acAdapterInfo, "Adapter-ID: %d\n Name: %s\n Treiber: %s\n Treiberversion: %d",
                iAdapter, 
                g_pAdapters[iAdapter].Description, 
                g_pAdapters[iAdapter].Driver, 
                g_pAdapters[iAdapter].DriverVersion);
    
        MessageBox(NULL, acAdapterInfo, "Adapter gefunden",
                   MB_OK | MB_ICONINFORMATION);
    }
    
    // die Variable iAdapter enthält die id des momentanen Adapters

    int             iNumModes;
    D3DDISPLAYMODE* pModes;
    char            acModes[16384];


    // ermitteln wieviele 16-bit Videomodi verfügbar sind
    iNumModes = g_pD3D->GetAdapterModeCount(iAdapter, D3DFMT_R5G6B5);
    if(iNumModes >0)
    {
        // Speicherplatz reservieren und den Stirng zurücksetzen
        pModes = new D3DDISPLAYMODE[iNumModes];
        strcpy(acModes, "");

        // jeden Videomodi durchgehen
        for (int iMode = 0;iMode <iNumModes;iMode++)
        {
            g_pD3D->EnumAdapterModes(iAdapter, D3DFMT_R5G6B5, iMode, &pModes[iMode]);
            sprintf(acModes, "%s\nModes %d: %dx%d bei %d Hz (0: Standard)",
                    acModes,
                    iMode,
                    pModes[iMode].Width,
                    pModes[iMode].Height,
                    pModes[iMode].RefreshRate);
        }

        MessageBox (NULL, acModes, "Verfügbare 16-Bit-VideoModi", MB_OK | MB_ICONINFORMATION);

        //Speicher wieder freigeben
        delete[] pModes;
    }

    g_pD3D->Release();
    delete[] g_pAdapters;

    return 0;
}


iNumModes ist bei mir leider = 0 was wohl soviel bedeutet, dass meine Grafikkarte GForce TI 4200 keinerlei Videomodi unterstützt obwohl ich hier eindeutig was sehen kann :-)

Über Hilfe würde ich mich freuen..

In Deinem Beitrag befinden sich noch Fehler.
Bitte bearbeite die rot markierten Stellen und lösche diesen Text.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

14.12.2003, 22:22

Hast Du den neuesten Grafikkartentreiber?

Anonymous

unregistriert

3

14.12.2003, 22:48

Ja, gerade runtergeladen...
Funktioniert leider immer noch nicht

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

14.12.2003, 22:52

Funktionieren die DirectX-SDK-Samples?
Edit: Mir fällt grade auf, dass Du ja nur nach R5G6B5-Modes suchst. Es kann sein, dass die GeForce die garnicht unterstützt. Such doch nach 32-Bit-Modi! Oder teste es mal mit D3DFMT_X1R5G5B5, das ist auch 16-Bit.

Anonymous

unregistriert

5

14.12.2003, 23:08

Funktioniert immer noch nicht...

Ich habe nun alle Formate auf Seite 86 ausprobiert.
Kann es sonst noch eine Fehlerquelle geben ?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

14.12.2003, 23:36

Jo, wie schon im C++-Forum geschrieben:
Die for-Schleife ist der Fehler. iAdapter ist nach der Schleife auf jeden Fall um eins zu groß.

Anonymous

unregistriert

7

20.02.2005, 13:05

GetAdapterModeCount Problem gelöst?

Hallo,

also ich habe nun das Forum durchforstet, aber leider noch keine Erklärung für das Problem gefunden. Ich kann bestätigen, dass iAdapter nach dem Schleifendurchlauf um Eins zu groß ist. Wenn ich aber folgendes schreibe

<c p p>
int iNumModes = pD3D->GetAdapterModeCount(0, D3DFMT_R8G8B8);
</c p p>

dann müsste es doch funktionieren?? Oder nicht? Das erste Fenster mit den verfügbaren Adaptern wird bei mir korrekt angezeigt und die Adapter-ID ist gleich 0. Verschiedene Formate (z.B. R5G6B6) habe ich auch schon ausprobiert. Es wäre nett, wenn mir jemand weiterhelfen könnte, denn sonst brauche ich das nächste Beispiel mit dem Dialog erst gar nicht auszuprobieren :crying: Danke!

Anonymous

unregistriert

8

21.02.2005, 15:30

Berichtigung

Ok, hat sich erledigt...

Werbeanzeige