D3DERR_DEVICELOST-woran kanns liegen?



  • *schulterzuck* kenn ich net^^ und ich bin mir doch schon sehr sehr sicher, dass meine matrix klasse astrein gecodet ist,operatoren, drehungen, translationen,skalierungen, projektionsmatrix, alles drin 😃



  • Hi,

    ALT+TAB war nur *ein* Beispiel 😉

    Wenn der Reset fehlschlägt prüfe den Rückgabewert bzw. den Status des Devices. Wenn es immer noch lost oder unresettet ist dann gehst Du einfach in der Schleife weiter bis sich das Device wiederherstellen lässt. Nach einem Lost geht das i.d.R. nicht sofort wieder. Beachte auch, dass Du unmanaged Ressourcen neu erstellen musst.

    Ciao,
    Stefan



  • Es gibt einen Device State, der nennt sich irgendwo DEVICE_NOTRESET oder so. Der sagt, dass du das Device jetzt wiederherstellen kannst.



  • so, hab das mal auf ne schleife umgestellt:

    if(FAILED(hresult=g_pD3DDevice->Present(NULL,NULL,NULL,NULL))){
            writetolog(DXGetErrorString9(hresult));
            while(FAILED(hresult=g_pD3DDevice->Reset(DirectXParameter.parameter))){
                writetolog("versuch die device wiederherzustellen");
                writetolog(DXGetErrorString9(hresult));
            }
            if(FAILED(hresult=g_pD3DDevice->Present(NULL,NULL,NULL,NULL))){
                writetolog(DXGetErrorString9(hresult));
            }
        }
    

    und hier mal das complette logbuch

    parameterliste erfolgreich erstellt
    S_OK
    S_OK
    S_OK
    D3DERR_DEVICELOST//ab hier wirds wichig 😃
    versuch die device wiederherzustellen
    D3DERR_DEVICELOST

    noch irgendwelche tipps?^^



  • hmm, würde er die device verlieren, wenn ich mir bei der adapter/caps auswahl einen groben patzer geleistet hätte?



  • kann durchaus sein



  • IMO erstellt er das Device gar nicht erst, wenn das nicht passt.



  • würde er dann trotzdem sein ok geben?
    ich meine, is doch ein leichtes mal nen falschen bildbuffer anzugeben 😃



  • wie nen falschen Bildbuffer? Es geht doch jetzt um das Device.



  • jep, bei createdevice muss man etliche parameter angeben, zb auch den bildbuffer,vielleicht verliert er ja die device, wenn man die grafikkarte vergewaltigt 🙄



  • nein, ich denke, dann kriegst du es erst gar nicht. Aber du kannst ja auch einfach mal den InitCode von nem Tutorial kopieren und schauen...



  • eigentlich würds ja reichen die device auf ref zu stellen^^



  • Also ich nehm immer HAL. Funktioniert wunderbar.



  • aber mit ref is man absolut graka unabhängig
    so, da ref irgendwie nich klappen wollte(D3DERR_NOTAVAIBLE)
    hab ichs nochmal mit hal probiert
    folgende einstellungen kamen zum einsatz:

    D3DPARAM->BackBufferWidth=800;
                        D3DPARAM->BackBufferHeight=600;
                        D3DPARAM->FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
    					D3DPARAM->BackBufferFormat=D3DFMT_R5G6B5;
    					D3DPARAM->BackBufferCount=1;
    					D3DPARAM->MultiSampleType=D3DMULTISAMPLE_NONE;
    					D3DPARAM->SwapEffect=D3DSWAPEFFECT_DISCARD;
    					D3DPARAM->hDeviceWindow=NULL;
    					D3DPARAM->Windowed=false;
    					D3DPARAM->EnableAutoDepthStencil=false;
    					D3DPARAM->PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
    

    ich glaub, das waren die wichtigsten, und auch die niedrigsten einstellungen die überhaupt gingen
    die createdevice methode:

    hresult=g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_MIXED_VERTEXPROCESSING,DirectXParameter.parameter,&g_pD3DDevice);
    

    nunja, klappt immernochnet^^
    hab ich vielleicht was vergessen?



  • Und was sagen die debug runtimes dazu?

    Bye, TGGC (Der Held ist zurück)



  • ich weis, die frage ist dumm, aber was meinst du damit 😃

    //edit meinste den d3dspy?





  • ich danke 😉 ich lads mir mal runner, und dann gehts los..
    //irgendwie bin ich jetzt auch nich schlauer,hab da szeug installiert, und was hab ich jetzt davon,bzw wie kann ich das jetzt aktivieren(borland c++6.0)



  • otze an Gehrin: Wo stellt man in Windows was an?
    Gehirn an otze: in der Systemsteurung!

    😉

    Bye, TGGC (Der Held ist zurück)



  • otze an tggc das hab ich schon längst gefunden, aber ich dachte, man müsste noch irgendwo was anstellen,zb im debug von borland c++,weil er mir nämlich sogar bei höchster fehlereinstellung nichts ausgespuckt hat :p

    dafür hat sich meine logfunktion mal wieder als nützlich erwiesen 😃

    rotation.MrotationZ(40);
    translation.Mtranslation(0,0,2.0f);
    world=rotation*translation;
    

    klappt nämlich nicht 😉

    hier der logteil:

    rotation
    -0.666938 0.745113 0.000000 0.000000
    -0.745113 -0.666938 0.000000 0.000000
    0.000000 0.000000 1.000000 0.000000
    0.000000 0.000000 0.000000 1.000000

    translation
    1.000000 0.000000 0.000000 0.000000
    0.000000 1.000000 0.000000 0.000000
    0.000000 0.000000 1.000000 0.000000
    0.000000 0.000000 2.000000 1.000000

    world
    0.000000 0.000000 0.000000 0.000000
    0.000000 0.000000 0.000000 0.000000
    0.000000 0.000000 0.000000 0.000000
    0.000000 0.000000 0.000000 0.000000

    wie man sieht klappt die multiplikation nich richtig,ich weis nich, obs meinen fehler behebt,wenn ich das fertig mach, aber einen versuch is es sicher wert 😃

    hmm...
    eine frage noch:

    world=rotation*translation;
    

    ist doch das gleiche wie:

    world.operator=(rotation.operator*(translation))
    

    oder?


Anmelden zum Antworten