Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// gekürzt Result TextureManager::DeleteAllTextures() { NXETerminal::DebugWrite("DeleteAllTextures"); for(int iEntry = 0; iEntry < m_iListSize; iEntry++) { if(m_pTextureList[iEntry].bExists && m_pTextureList[iEntry].pTextureRV) { while(m_pTextureList[iEntry].pTextureRV->Release() > 0) { } m_iNumTextures--; } } return NXE_OK; } |
C-/C++-Quelltext |
|
1 2 3 4 5 |
// m_pShaderTexture: ID3DX11EffectShaderResourceVariable* if(m_pShaderTexture && m_pShaderTexture->IsValid()) m_pShaderTexture->SetResource(NULL); m_pShaderTexture = NULL; |
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Result TextureManager::ReleaseTexture(ShaderResourceView* pTextureRV) { NXETerminal::DebugWrite("Release Texture"); int iIndex; iIndex = GetTextureIndex(pTextureRV); if(iIndex == -1) { LOG_WARNING("Could not find texture"); return NXE_NOT_FOUND; } if(m_pTextureList[iIndex].pTextureRV->Release() == 0) { ZeroMemory(&m_pTextureList[iIndex], sizeof(TextureListEntry)); m_iNumTextures--; } return NXE_OK; } |
Zitat von »dot«
Kann es passieren, dass der Referenzzähler von m_pTextureList[iEntry] bereits vor dem ersten Release() in der Schleife 0 ist?
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
Wenn man alles richtig macht, löscht DeleteAllTextures nichts mehr.
Ich glaube ihr sucht an einem falschen Ort. Es geht lediglich darum, dass ich mein ID3D11Device nicht mehr löschen kann, wenn ich den selben Pointer auf eine Textur (bzw. ID3DX11EffectShaderResourceVariable) an zwei verschiedenen Orten auf die Pipeline binde.
Zitat von »dot«
Meinst du damit, dass m_pTextureList dann leer ist? Mit anderen Worten: Wenn m_pTextureList in DeleteAllTextures() nicht leer ist, ist irgendwo was schiefgelaufen!? In dem Fall würde ich empfehlen, statt der Schleife ein assert(m_pTextureList.empty()); zu installieren...
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
Zitat von »dot«
Meinst du damit, dass m_pTextureList dann leer ist? Mit anderen Worten: Wenn m_pTextureList in DeleteAllTextures() nicht leer ist, ist irgendwo was schiefgelaufen!? In dem Fall würde ich empfehlen, statt der Schleife ein assert(m_pTextureList.empty()); zu installieren...
Ich habe oben als Kommentar geschrieben, dass der Code gekürzt ist. Die Schleife ist eine Sicherheit, dass auch wirklich alles weg kommt.
Ich brauche die selbe Textur zweimal in unterschiedlichen Klassen und lade sie dadurch einmal und kopiere den Zeiger. Dann binde ich die Textur einmal in Klasse 1 und rendere und einmal in Klasse 2 und rendere. Es wäre sinnfrei dieselbe Textur zwei mal zu laden, wenn ich zwei Pointer auf sie haben kann.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (14.10.2013, 18:33)
Zitat von »dot«
Müssen wirklich beide Klassen die Textur auch besitzen?
Zitat von »dot«
Wie ist dafür gesorgt, dass die Textur auch freigegeben wird?
Zitat von »dot«
Ich nehme an, diese beiden Klassen versuchen, diese Textur an unterschiedliche Punkte zu binden!?
Zitat von »dot«
Gleichzeitig? [...] Was genau wird damit gemacht?
Zitat von »FSA«
Dann binde ich die Textur einmal in Klasse 1 und rendere und einmal in Klasse 2 und rendere.
Zitat von »dot«
Was genau sind das für Punkte?
Zitat von »dot«
Was genau ist das für eine Textur?
Zitat
Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.
Werbeanzeige