From 4374453cb76e13123f844121ba9a85fcb53e8552 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 12 Jun 2025 01:45:07 +0200 Subject: [PATCH] Align cache destruction callback in software renderer (#284) --- .../src/d3drm/backends/software/renderer.cpp | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/miniwin/src/d3drm/backends/software/renderer.cpp b/miniwin/src/d3drm/backends/software/renderer.cpp index 24fd1e92..dbfb871c 100644 --- a/miniwin/src/d3drm/backends/software/renderer.cpp +++ b/miniwin/src/d3drm/backends/software/renderer.cpp @@ -436,18 +436,18 @@ void Direct3DRMSoftwareRenderer::DrawTriangleProjected( } } -struct TextureDestroyContext { +struct CacheDestroyContext { Direct3DRMSoftwareRenderer* renderer; - Uint32 textureId; + Uint32 id; }; void Direct3DRMSoftwareRenderer::AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture) { - auto* ctx = new TextureDestroyContext{this, id}; + auto* ctx = new CacheDestroyContext{this, id}; texture->AddDestroyCallback( [](IDirect3DRMObject* obj, void* arg) { - auto* ctx = static_cast(arg); - auto& cacheEntry = ctx->renderer->m_textures[ctx->textureId]; + auto* ctx = static_cast(arg); + auto& cacheEntry = ctx->renderer->m_textures[ctx->id]; if (cacheEntry.cached) { SDL_UnlockSurface(cacheEntry.cached); SDL_DestroySurface(cacheEntry.cached); @@ -525,18 +525,18 @@ MeshCache UploadMesh(const MeshGroup& meshGroup) return cache; } -struct MeshDestroyContext { - Direct3DRMSoftwareRenderer* renderer; - Uint32 id; -}; - void Direct3DRMSoftwareRenderer::AddMeshDestroyCallback(Uint32 id, IDirect3DRMMesh* mesh) { - auto* ctx = new MeshDestroyContext{this, id}; + auto* ctx = new CacheDestroyContext{this, id}; mesh->AddDestroyCallback( - [](IDirect3DRMObject*, void* arg) { - auto* ctx = static_cast(arg); - ctx->renderer->m_meshs[ctx->id].meshGroup = nullptr; + [](IDirect3DRMObject* obj, void* arg) { + auto* ctx = static_cast(arg); + auto& cacheEntry = ctx->renderer->m_meshs[ctx->id]; + if (cacheEntry.meshGroup) { + cacheEntry.meshGroup = nullptr; + cacheEntry.vertices.clear(); + cacheEntry.indices.clear(); + } delete ctx; }, ctx