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

GR-PA

Treue Seele

  • »GR-PA« ist der Autor dieses Themas

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

1

07.04.2008, 21:49

Problem mit CreateDevice(mal wieder)

Hi,
Ich hab mal wieder ein Problem (*aufreg*). Diesen code zum initialisieren von Direct3D hab ich aus einem meiner anderen Spiele kopiert, in dem es einwandfrei lief. Ich hab nur die Namen der Variablen ein wenig abgeändert. Trotzdem funktioniert er nicht und ich finde einfach keinen Fehler. Hier der code:

C-/C++-Quelltext

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
// Initialiesierungsdaten aus der Datei laden

    if(IsError(res = LoadInitData()))
    {
        return res;
    }

    // Direct3D Schnittstelle erzeugen

    pd3d = Direct3DCreate9(D3D_SDK_VERSION);
    if(!pd3d)
    {
        MessageBox(NULL, TEXT("Fehler beim erzeugen der Direct3D-Schnittstelle"), TEXT("Fehler"), MB_ICONERROR);
        return TW_D3DINIT;
    }

    // Grafikeinstellungen des Betribssystems einlesen

    pd3d->GetAdapterDisplayMode(0, &d3ddm);

    // Präsentationsparameter-Struktur ausfüllen

    d3dpp.BackBufferHeight       = screenheight;
    d3dpp.BackBufferWidth        = screenwidth;
    d3dpp.BackBufferFormat       = D3DFMT_A8R8G8B8;
    d3dpp.BackBufferCount        = 2;
    d3dpp.SwapEffect             = D3DSWAPEFFECT_FLIP;
    d3dpp.hDeviceWindow          = hWnd;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
    d3dpp.Flags                  = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;
    d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_ONE;
    d3dpp.MultiSampleType        = (D3DMULTISAMPLE_TYPE)MultiSampleTyp;
    d3dpp.MultiSampleQuality     = MultiSampleQuality;
    if(Windowed)
    {
        d3dpp.FullScreen_RefreshRateInHz = 0;
    }
    else
    {
        d3dpp.FullScreen_RefreshRateInHz = d3ddm.RefreshRate;
    }

    // Geräteschnittstelle erzeugen

    if(FAILED(pd3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, 
                                 D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                 &d3dpp, &pd3dDevice)))
    {
        MessageBox(NULL, TEXT("Fehler beim Erstelllen der Grafikkartenschnittstelle"), TEXT("Fehler"), MB_ICONERROR);
        return TW_D3DINIT;
    }

Es gibt keinen Fehler beim compilieren, aber das Programm beendet sich mit der 2ten MessageBox.

Da dies mit 99,9 prozentiger Wahrscheinlichkeit schon wieder ein ganz dummer und offensichtlicher Fehler meinerseits ist hoffe ich, dass ihr mir schnell sagen könnt was falsch ist. ;)
cu
Signaturen werden überbewertet

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

GR-PA

Treue Seele

  • »GR-PA« ist der Autor dieses Themas

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

3

07.04.2008, 22:49

Bring nichts. Wie gesagt: Den Code hab ich einfach nur kopiert und ein par Variablennamen abgeändert. Eigentlich sollte er Laufen... tuts aber net :cry:
Signaturen werden überbewertet

4

07.04.2008, 22:52

Wann beendet er denn, im Vollbild- oder im Fenstermodus?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

07.04.2008, 23:31

Ja, dann übernimm mal den gesamten Code vom anderen Projekt und dann weisst du, dass es nicht am Code liegt, wenns geht.
Ich würde jetzt auch mal auf irgendwelche Einstellungen tippen.

6

07.04.2008, 23:56

Jo, Vertauschen von Width und Height sind gern genommene Kandidaten. Oder das falsche Backbuffer.Format, D3DSWAPEFFECT_FLIP...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

08.04.2008, 11:34

Du hast keinen wert für d3dpp.Windowed angegeben. Wenn du d3dpp nicht vorher irgendwo initialisierst, dann steht dort sicher alles außer TRUE oder FALSE drin und CreateDevice() ist böse auf dich.

btw: Was versprichst du dir von nem Backbuffer mit Alphakanal? Mittlerweile unterstützen das die Grafikkarten zwar, aber wenn du keinen expliziten Grund hast das zu verwenden, würd ich eher zu D3DFMT_X8R8G8B8 raten.
Weiters: Warum D3DSWAPEFFECT_FLIP? Benötigst du die spezielle Semantik von flip (z.b. was den Inhalt des Backbuffers angeht)!?
Auch hier wieder: Wenn du nicht einen speziellen Grund hast, würd ich dir raten D3DSWAPEFFECT_DISCARD zu verwenden.
Brauchst du wirklich 2 Backbuffer!?

GR-PA

Treue Seele

  • »GR-PA« ist der Autor dieses Themas

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

8

08.04.2008, 17:07

Zitat von »"dot"«

Du hast keinen wert für d3dpp.Windowed angegeben. Wenn du d3dpp nicht vorher irgendwo initialisierst, dann steht dort sicher alles außer TRUE oder FALSE drin und CreateDevice() ist böse auf dich.

Um genau zu sein stünde dort -842150451, da BOOL als int definiert ist.

Wusste ich doch dass es mal wieder ein total unnötiger Fehler war... :evil:
Signaturen werden überbewertet

Werbeanzeige