(Direct3D 9) Graka zeichnet im vollbildmodus farbige streifen
-
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 hochgeschraubtich lass die anwendung ganz normal "ausführen", und werde jetzt trotzdem nicht von "tonnen von informationen überschüttet"...
was mach ich denn da falsch
?
-
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 hochgeschraubtwas 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)
-
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 ?!
nna... dieses vorhaben ist recht sinnlos, VS ist nähmlich nicht nur dafür verantwortlich, während des debugs schöne tabellen mit den variablenwerten hinzuzeichnen, VS ist notwendig, um überhaupt irgendeine debug-version des programms auszuführen. wenn du's auf einem anderen rechner laufen lässt, dann muss es ja eine release-version sein, da werden gar keine debug ausgaben produziert, und können somit auch nirgendwohin geschrieben werden.

aber mal zwischedurch alle renderstates in eine logfile zu schreiben kann auch schon recht hilfreich sein. Untersuch dann mal die ganzen surface typen auf kompatibilität mit den ganzen anderen einstellungen, vielleicht findest du irgendetwas, was laut der dokumentation nicht funktionieren dürfte, jedoch trotzdem funktioniert. Das ist nervig, weil das programm dann anfängt, auf unterschiedlichen grafikkarten verschiedene ergebnisse zu liefern, was wirklich verwirrend ist.

-
Andrey schrieb:
VS ist notwendig, um überhaupt irgendeine debug-version des programms auszuführen.
Eigentlich sollte es jeder Debugger tun, das muss nicht der von VS sein. Es gibt kostenlose Debugger.
-
*ja, gut, hab jetzt "VS" representativ für alle debugger genommen, aber bei release-version gibts sowieso keine debug-ausgaben, egal was man für einen debugger benutzt...
-
man sollte einfach fallbacks einbauen fuer graphikkarten die einige features nicht unterstuetzen die man haben will, dann hat man keine probleme die fallbacks einzuschalten wenn die caps das gewuenschte feature nicht aufweisen. jedenfalls falls man fuer mehr als nur sich selbst eine engine programmiert.
-
ok featuers deaktivieren ist eine möglichkeit ... was aber wenn man keine nutzt ...
also die skybox nutzt wirklich gar nix ... nich mal Z-buffer ... also sollte das ja wohl funzen ... mir viel grad eben ein das ich evtl was mitn nebel an hab
das einzigste was ich nutze ist licht ... und eigentlich bislang nur ambient also sollten ja alle grafiken gleich dargestellt werden ...zur debugversion ... das lustige ist ja wenn ich die release version im debuger starte ist es wie die debug version, und sie funzt auch auf anderen PCs ... und da ich mal bei debug _alles_ eingestellt hatte und mal ne realse version machen wollte war die konfig _leer_ ... also nette idee von MS ... aber irgendwie überflüssig
MfG