Dx9 Texture->Release() RenderTarget



  • D3DXCreateTexture(this->TexMan->GetDevice(),breite,hoehe,1,
                        D3DUSAGE_RENDERTARGET,
    		    D3DFMT_A8R8G8B8,
             	    D3DPOOL_DEFAULT,
                        &Textur)))
    

    So lege ich eine Textur an, jedesmal wenn sich etwas ändert lösche ich dieses RenderTarget mit:

    Textur->Release();
    

    allerdings bricht die Anwendung irgendwann ab wegen zu wenig Speicher.

    GetAvailableTextureMem()

    bestätigt das!
    es scheint als ob dieses Release nicht richtig funktioniert?!?
    Hab ich was vergessen?

    Hat jemand eine Idee? braucht ihr mehr Infos?

    muli



  • Wieso gibst du jedesmal die Textur frei, wenn sich was ändert?



  • also ich rendere in die Textur um Text auszugeben. und mach das auf eine Textur weil ich den rotieren lasse. Naja und wenn ich nun z.B. die Farbe ändern will brauch ich doch ne neue Textur weil die alte doch schon vollgeschmiert ist.
    Fand das selbst auch nicht so effizient! reicht aber für meine Vorhaben.
    Gibts da etwa eine noch bessere Vorgehensweise?

    Den Fehler hab ich übrigens gefunden.
    GetSurfaceLevel gibt speicherleck wenn man das Surface nach Gebrauch nicht auch noch released. Steht genau so in der msdn (ich weiss: RTFM!)

    Danke für deine Mühen
    muli



  • muli schrieb:

    also ich rendere in die Textur um Text auszugeben. und mach das auf eine Textur weil ich den rotieren lasse. Naja und wenn ich nun z.B. die Farbe ändern will brauch ich doch ne neue Textur weil die alte doch schon vollgeschmiert ist.

    Nö, kannst doch einfach über das Surface der Textur die Textur clearen, wie einen Backbuffer.

    muli schrieb:

    GetSurfaceLevel gibt speicherleck wenn man das Surface nach Gebrauch nicht auch noch released. Steht genau so in der msdn (ich weiss: RTFM!)

    Japp, weil GetSurfaceLevel den Referenz Counter der Surface erhöht.



  • Hab ich gemacht und ist natürlich viel schneller!
    muli


Anmelden zum Antworten