Frage zu LockRect bei Texturen (dx9)



  • Ich baue zzt eine kleine Klasse die für mich mehrere kleine Texturen zu einer großen vereint, ich arbeite dabei nur mit Managed Texturen.
    Dabei stellt sich mir die Frage ob das RECT das man übergibt überhaupt irgendeinen Zweck erfüllt? Eigentlich solte das RECT ja eigentlich die Stelle sein die man bearbeitet und die dann zur dirty region wird und damit geupdatet wird, so habe ich das in der Doku zumindest verstanden.

    Nun habe ich verschiedenes mal versucht um einfach zu schaun was passiert. Dabei stellen sich mir gleich mehrere fragen, ist es so beabsichtigt das eine Managed (und damit nicht Dynamic) Textur sich trotdzem mit Discard locken lässt, obwohl das Flag eigentlich für nicht Dynamic Resourcen nicht gültig ist und somit ja eigentlich das Locken Fehlschlagen müsste?

    Außerdem stellt sich mir die Frage ob es Sinnvoll ist eine region zum locken anzugeben da ich 1. immer die gesammte Textur so oder so als pointer bekomme obwohl d3dlocked_rect eigentlich nur den gelockten Bereich beinhalten sollte und 2. er auch änderungen außerhalb des rects überträgt. Mache ich hier irgendwelche Fehler oder ist es tatsächlich so das hier die Doku total vond er Realität abweicht, was mich etwas verwundern würde?



  • Dabei stellen sich mir gleich mehrere fragen, ist es so beabsichtigt das eine Managed (und damit nicht Dynamic) Textur sich trotdzem mit Discard locken lässt, obwohl das Flag eigentlich für nicht Dynamic Resourcen nicht gültig ist und somit ja eigentlich das Locken Fehlschlagen müsste?

    Bist du sicher, dass sie nicht fehl schlägt? - In DX werden ein paar Fehler einfach geschluckt und höchstens im DX Debugger ausgegeben. Sprich es irgendwas passiert, aber es ist grundsätzlich gelaufen. (Sprich keine Laufzeitfehler)



  • Aso ok, das wäre Möglich, ich habe den Rückgabewert von LockRect an eine Exception gekopelt, dh gelaufen ist es, ich schätze dann mal das er das Discard einfach Ignoriert.



  • Schalt mal ein wenig mehr Output im DirectX Control Panlen an. (ist ein Tool, welches mit dem SDK mitgeliefert wird).

    Da kannst du den "Debug Output Level" höher schalten. (Ich habe es atm auf Mitte, was für die meisten Fehler reicht). Natürlich auch noch auf "Use Debug Version of Direct3D 9" Klicken.

    Das würde ich jedem empfehlen, da es viele Sachen gibt, die einfach mal ignoriert werden und man lediglich so sehen kann.

    btw:
    Der Output kommt in der Output Konsole bei Visual Studio.


  • Mod

    Die regeln die du in DirectX liest sind keine die dir vorgeschrieben werden wie die 10 gebote, es ist eher so, dass sie dir sagen unter welchen umstaenden dir ordentliches verhalten garantiert wird. Du kannst ganz freakige sachen weiterhin versuchen und musst aber damit rechnen dass irgend ein treiber oder eine hardware oder eine windows version dir dann dein ganzes programm zerschiessen.


Log in to reply