Hi
ich habe mal kurz dein Programm getestet und schnell durchgeguckt. Also wenn ich auf den button klicke, dann kriege ich keinen Texturfehler oder sowas, sondern ich sehe das selbe wie davor: naemlich Schwarz.
Aber erstmal deine 2 Dateien:
adlog.txt
[TAdDraw] [Info] AdDraw was created: 9:47:48 PM
[TAdDraw] [Info] Try to initialize Andorra Direct3D 9 Plugin.
[TAdDraw] [Info] Try to initialize the device.
[TAdDraw] [Info] Device supports 8 lights
[TAdDraw] [Info] 382MB Texture Memory on this device.
[TAdDraw] [Info] Initialization complete.
[TAdDraw] [Info] Changed point of view to a 2D Szene.
[TAdDraw] [Info] Finalization Complete.
[TAdDraw] [Info] Try to initialize Andorra Direct3D 9 Plugin.
[TAdDraw] [Info] Try to initialize the device.
[TAdDraw] [Info] Device supports 8 lights
[TAdDraw] [Info] 382MB Texture Memory on this device.
[TAdDraw] [Info] Initialization complete.
[TAdDraw] [Info] Changed point of view to a 2D Szene.
[TAdDraw] [Info] Finalization Complete.
In der test.raw steht lediglich eine 4Byte-grosse 0 drinnen.
So, nun etwas weiter im Detail: So wie ich das registriert habe, erstellst du zuerst eine Textur (A8R8G8B8, 1x1 Pixel) und einen VertexBuffer (4 Vertices zu je (XYZ, Normale, Diffuse Farbe und 1x Texturkoordinaten)). Die Textur fuellst du mit $00FF0000, und den Vertexbuffer mit 4 Vertices, die ein schwarzes Quadrat mit abnormalen Normalen ergeben. *g*
Beim Buttonklick resettest du wahrscheinlich etwas in deiner Engine, jedenfalls wird die Textur inklusive Device und allem drum und dran uebern Haufen geschmissen und neu erstellt. Davor (schaetze ich mal) holst du dir aber noch den Inhalt der Textur und speicherst ihn in die test.raw.
Ich behaupte, dass beim Speichern der Fehler liegt, da ich beim Debuggen vor ihrem letzten Lock die Textur immernoch als kunterbuntes rotes Pixel dargestellt bekomme.
Und schlussendlich: Keine Ahnung, obs absicht ist oder nicht, aber der Grund, warum ich vor und nach dem Button-klick schwarz sehe sind deine Projektions- und ViewMatrix. Die verzaubern das Quadrat in ein (fuer den Rasterizer zu) kleines Pixel an der linken, oberen Ecke des Viewports und fliegen damit aus der Pipeline.
greets
Mike
PS: Ich weiss nicht, ob du das warst oder wer auch immer DebugSetMute aufruft:
Die D3D-Doku besagt
DebugSetMute
Note This function is internal and not intended to be used by software developers.