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

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

1

31.10.2010, 13:35

Fehler bei Device erzeugung

Hi

Ich wollte eine DLL schreiben, bei der ich einige Dinge von DirectX 9 implementiere. Zu beginn wollte ich das Direct3D Device erzeugen. Doch wenn ich nun die DLL im Hauptprojekt eingebunden habe, dann kommt die Meldung, dass das Device nicht richtig erzeugt werden konnte.

Hier ein Codeausschnitt:

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
HRESULT hResult;

        // Instance of the structure VEEditorProperties
        VEEditorProperties VEEP;
        // Instance of the class VisualEngine
        pVisualEngine = new VisualEngine();
        // Instance of the class VECamera
        pCamera = new VECamera();

        VEEP = pVisualEngine->VEEProperties;

        g_pD3D->d3d = Direct3DCreate9(D3D_SDK_VERSION);

        D3DPRESENT_PARAMETERS d3dpp;

        ZeroMemory(&d3dpp, sizeof(d3dpp));
        d3dpp.Windowed = VEEP.VEbWindowed;
        d3dpp.hDeviceWindow = hwnd;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;

        if(FAILED(hResult = g_pD3D->d3d->CreateDevice(D3DADAPTER_DEFAULT,
                                                      D3DDEVTYPE_HAL,
                                                      hwnd,
                                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                                      &d3dpp,
                                                      &g_pD3D->d3ddev)))
        {
            MessageBox(NULL, TEXT("There was an error at device creating!"), TEXT("There was an error!"),
                       MB_OK | MB_ICONEXCLAMATION);

            // Write in the LogFile
            g_pLogFile->VELogFileWrite("<center><p>There was an error at device creating</p></center><br>");

            return false;
        }


Kann mir jemand sagen, was ich hier falsch programmiert habe?

LG Patrick

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

2

31.10.2010, 14:02

lass dir mal werte wie hwnd ausgeben; wo wird das initialisiert?

Und warum schreibt ihr euch alle Engines o.O

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

3

31.10.2010, 14:06

ich würde die D3DPRESENTPARAMETERS Struktur noch ein bisschen füllen, wenigsten noch:
d3dpp.BackBufferWidth
d3dpp.BackBufferHeight
d3dpp.BackBufferFormat

4

31.10.2010, 14:45

Ich glaube man muss sogar die Werte für Höhe, Breite und Format angeben.
Wäre auch schwer für DX das selbst rauszufinden :D

@CBenny::O
Warum nicht? ;)
Und warum benutzen alle die SFML anstelle von der SDL, Ogre3D oder Irrlicht? :P
Wenns einem Spaß macht oder wenn man wie ich alles gerne selber macht, kann mans ja tun.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

31.10.2010, 15:38

Um statt Vermutungen mal Fakten zu posten: http://msdn.microsoft.com/en-us/library/bb172588.aspx

Ich würde stark davon abraten solche Strukturen mit ZeroMemory zu "initialisieren". Setz stattdessen alle Parameter manuell auf den richtigen Wert (auch wenn der 0 sein mag). So kannst du nie einen Parameter vergessen und ungültige Parameterkombinationen die wie eben gerade dann zu Fehlern führen bleiben zumindest nicht ganz im Verborgenen. Stell dir nur vor alles würde funktionieren und dann änderst du einen Wert. Durch den neuen Wert wird die Angabe eines weiterern Parameters erforderlich der in deinem Code aber gar nicht explizit auftaucht weil er bisher per ZeroMemory auf 0 gesetzt wurde. Da der Parameter von ZeroMemory so schön versteckt wurde vergisst du natürlich darauf und wunderst dich dann stundenland warum CreateDevice nun genau fehlschlägt...

Werbeanzeige