Guten Abend,
ich verzweifle gerade an folgender Situation:
Ich erstelle mit folgendem Code eine Textur:
Code
TextureInterface* FrTextureManager::CreateTexture(unsigned int width, unsigned int height)
{
// Create texture
UTexture2D* pTexture = UTexture2D::CreateTransient(width, height, PF_B8G8R8A8);
pTexture->Resource = pTexture->CreateResource();
pTexture->AddToRoot();
// Wrap the texture
return new FrTexture(pTexture);
}
Alles anzeigen
Während FrTexture so definiert ist:
Code
class UE_API FrTexture : public TextureInterface
{
public:
FrTexture(UTexture2D* pUTexture);
virtual ~FrTexture();
// [...]
private:
UPROPERTY()
UTexture2D* m_pTexture;
};
Alles anzeigen
...also eine "ganz normale" C++ Klasse ist, die nicht von UObject ableitet.
Laut Dokumentation müsste der Aufruf von AddToRoot dafür sorgen, dass die Textur nicht vom GC geholt wird. Das ist aber offensichtlich nicht der Fall, d.h. ein paar Zeilen mit dem Debugger später ist der Pointer ungültig.
Auch das Hinzufügen von UPROPERTY in FrTexture, um ein den Referenzzähler zu erhöhen, zeigt keine Verbesserung.
Woran kann das liegen? Habe ich einen Denkfehler?
Viele Grüße