(Direct3D 9) Graka zeichnet im vollbildmodus farbige streifen



  • also, ich meine, was für eine todsünde soll ich denn an dieser stelle begangen haben???? 😞

    pVertexBuffer->Lock(0,0,(void**)(&pLockedVertexBuffer), D3DLOCK_DISCARD);
    


  • überschreibst du den _ganzen_ buffer?

    hFocusWindow 460044

    hast du das hardgecodet!?



  • ganzer buffer? jojo, tue ich... aber was bringts, wenn der ned ma gesperrt werden kann?

    hardgecodet??? 😃 😃 😃 nein... so bekloppt bin ich (noch) nich 🤡 des iss nur zum vergleich da, weil dieser parameter irgendwie zwei mal übergeben werden muss...


  • Mod

    du bist lustig;) D3D sagt dir dass da was nicht stimmt, du erzaehlst uns aber unwichtiges zeug wie "Nun hab ich meiner meinung nach alles vollkommen richtig initialisiert, es werden auch keine fehler gemeldet, weder während des compilliervorgangs, noch während der laufzeit", obwohl du weisst dass dir d3d in den nacken springt *lol*.

    fix dein problem, in der doku sollte stehen weshalb welche fehler auftreten, koennte an falscher groesse, format oder flags liegen, dass du nicht locken kannst.



  • Stell D3D auf Debug-Modus (DirectX Control Panel)!
    Dann wirst du mit Tonnen von Informationen in der Debug-Ausgabe überschüttet.
    Musst dir dann nur noch das raussuchen, wo er meckert.



  • D3DLOCK_DISCARD:
    This is a valid option when using dynamic textures, dynamic vertex buffers, and dynamic index buffers.

    ähm, okay, jetzt, wo ich nochma drauf hingewiesen wurde, fällt mir auf, dass d3dlock_discard nicht mit normalen vertexbuffern verwendet werden kann. Das steht in meinem buch. das steht in der doku. alle scheinen zu wissen, dass das nicht geht.
    aber DX hält sich leider nicht dran 😡
    Immerhin hat dieser offensichtlich fehlerhafte code auf 2/3 (!!!) der GraKA's einwandfrei funktioniert 😕 wie sollte ich denn auf die idee kommen, in dem codeschnipsel nach fehlern zu suchen? 😞
    Es ist echt n bissl schwierig zu lernen, wenn man für fehler nicht konsequent, sondern nachm zufallsprinzip "bestraft" wird...

    naja... egal... tut mir leid leute, bin nächstes mal aufmerksamer 🙄
    Vielen dank für den tipp!

    edit:
    ach ja übrigens...

    a) ich hab d3dx9d.lib gelinkt
    b) ich hab die konfiguration auf debug eingestellt
    c) ich habe Direct3D in den debugmode versetzt
    d) ich hab die debug-ausgaben auf maximum hochgeschraubt

    ich lass die anwendung ganz normal "ausführen", und werde jetzt trotzdem nicht von "tonnen von informationen überschüttet"...
    was mach ich denn da falsch 😞 ?


  • Mod

    Andrey schrieb:

    aber DX hält sich leider nicht dran 😡

    ja und gott haellt sich nicht daran dass jeder der ohne zu schauen ueber die strasse laeuft dann auch plattgefahren wird...

    microsoft denkt sich doch diese abhaengigkeiten nicht aus um dann einfach nur jeden der die regeln bricht zu bestrafen. es ist einfach nur eine eigenschaft auf die man sich geeinigt hat, wenn ein treiberhersteller das als optimierung nutzen moechte, kackt dein programm halt ab.

    Es ist echt n bissl schwierig zu lernen, wenn man für fehler nicht konsequent, sondern nachm zufallsprinzip "bestraft" wird...

    stell einfach deinen compiler und dein d3d auf debug und entwickel nicht in release/retail, dann wirst du bestraft, dafuer sind die modis da.

    @tomas
    den tip gab es hier schon und er hatte darauf auch schon geantwortet 😉



  • 😕 ..mal eine Frage zwischendurch.. wo befindet sich das DirectX Control Panel und wie kann ich D3D auf den Debugmodus umstellen?

    (Falls es hilft, ich nutze Visual C++ 2005 Express Edition und das DirectX SDK von Februar)

    Danke im Voraus!



  • Start > Programme > Microsoft DirectX SDK > DirectX Utilities > DirectX Control Panel



  • oh man, wo ist der smiley, der sich mit dem hammer auf den kopf haut?? 🤡 danke!



  • iop schrieb:

    ...und wie kann ich D3D auf den Debugmodus umstellen?...

    das ist mir mittlerweile klar, das habt ihr mir schon mal vor etwa nem halben jahr erklärt 👍 , nur irgendwie wars da schon zu spät, weil ich zu dem zeitpunkt alle fehler mit der logfile und den ganzen "DXGetError..."-funktionen grad wieder ausgebeult hab...

    aber wo landen denn jetzt die ganzen ausgaben von DX, der ja eigentlich andauernd "meckern" sollte, wenn fehler vorhanden sind? In dem "debug" fensterchen erscheint bei mir (hab MS VS 6.0) zumindest gar nichts... 🙄



  • Auch die Debug Libs gelinkt?



  • Andrey schrieb:

    a) ich hab d3dx9d.lib gelinkt
    b) ich hab die konfiguration auf debug eingestellt
    c) ich habe Direct3D in den debugmode versetzt
    d) ich hab die debug-ausgaben auf maximum hochgeschraubt

    was für debug lib_s_ gibts denn sonst noch? 😕



  • #define D3D_DEBUG_INFO

    aber wenn du gar keine debugausgabe bekommst, wird das auch net viel helfen.

    hab MS VS 6.0

    welche sdk version hast du?
    MS hat den support für MSVS6 nämlich eingestellt...



  • "Microsoft DirectX SDK 9.0 Update Summer 2004" heisst das ganze bei mir...

    MS hat den support für MSVS6 nämlich eingestellt...

    bedeutet das jetzt, dass MSVS 6.0 sich selbst sabotiert? 😃



  • hm, mit summer 2004 sollte es afaik eigentlich gehen...



  • "sollte es" "sollte es" "sollte es"...
    ja sollte es, aber letztendlich endet alles wie immer damit, dass ich hier völlig umsonst herumnerve, um schlieslich die fehler alleine mit der logfile gradzubiegen zu dürfen 🙄
    Naja, egal...

    Irgendwie scheint's jetzt zu funktionieren, ich lass erstma einfach alles wie es ist, und mach mit den interessanteren teilen des programms weiter, anstatt mich da weiterhin mit der initialisierung herumzuprügeln, 100%-ig wirds wohl nie funktionieren... aber ist ja auch egal, bis ich damit fertig bin, ist das alles sowieso schon hoffnungslos veraltet^^ 😃

    Danke leute! 🤡



  • hast du auch wirklich im output fenster geschaut?
    mein VS minimiert das nämlich wenn ich das programm starte...



  • khm... hab jetzt den ganzen kram einfach neuinstalliert, und das gesamte projekt neukompiliert, jetzt erscheint im "Debug" fenster tatsächlich was! 😃
    (verdammt, warum hab ichs nich gleich getan? 😞 )

    naja, wie auch immer... Jetzt funktioniert's, aber ebn nur dann, wenn mit dem programm alles mehr oder weniger glatt läuft.
    Und was ist jetzt, wenn das doofe programm die graka voll wegfetzt, und die gar nix mehr anzeigt, bis der rechner komplett neugestartet wird? Kann ich die debug ausgaben in irgendeine datei umleiten? das muss doch irgendwie gehen! Kann mir aber irgendjemand mal sagen wie? 🤡

    ...thx @ all...



  • jo ^^ würd mich auch interresieren

    also das was die debug variante ausspückt ... auf dem anderen system hab ich ne andere Grafikkarte ... die ja eher wegen sonstwas "mekert" und per rückgabe werte lässt sich da _gar_nix_ herausfinden...

    zB:

    skybox ... jetzt hab ich glaube insgesamt 10 stunden dran gerödelt das sie auf dem einem rechner hinhaut ... (nur weil ich es nicht einsehen will das ne skybox mehr als nur eine texturbrauch) ... so auf nvidia sieht man nun nicht mehr die kanten ... aber mit einmal auf ATI ...

    das zweite ... was ich eben mal so nebenbei festgestellt hab ... bei nvidia wird eine grüne textur schwarz gezeichnet aber tranzparenz funktioniert (per D3DXcreatetexturfromfile(,,,,,,,,,D3DColor...,,, halt)
    auf ATI hat ist sie aber grün ...

    nun kann man ja nich verlangen das ich auf _jeden_ rechner VS installiere um mir die debug ausgabe an zu schauen ... also wie setzt man die debug output location auf eine datei ?!

    schätze mal das geht nich -.- wäre ja auch zu einfach 😉

    ich werd mal was die eine textur angeht mal aufs lightning tippen ... das nvidia irgendwas noch haben möchte ... oder so .. ich finds net lustig ...

    und skybox naja ... werd ich halt es doch mit verschiedenen texturen machen und die render funktion mit ner if abfrage mehr belassten ... wenns nich anders geht -.-

    (gibts solche "probleme" auch bei openGL ?
    wäre mal nen grund um zusteigen ... so unterschiedlich ist d3d und opengl ja nun auch nicht ... hat ja beides das selbe ziel)


Anmelden zum Antworten