diff --git a/Client/mods/deathmatch/logic/CClientVectorGraphicDisplay.cpp b/Client/mods/deathmatch/logic/CClientVectorGraphicDisplay.cpp index 1625403685..65c957cdab 100644 --- a/Client/mods/deathmatch/logic/CClientVectorGraphicDisplay.cpp +++ b/Client/mods/deathmatch/logic/CClientVectorGraphicDisplay.cpp @@ -42,8 +42,7 @@ void CClientVectorGraphicDisplay::Render() if (HasUpdated()) { m_pVectorGraphic->OnUpdate(); - } - + } } void CClientVectorGraphicDisplay::UpdateTexture() @@ -52,46 +51,41 @@ void CClientVectorGraphicDisplay::UpdateTexture() return; Document* svgDocument = m_pVectorGraphic->GetSVGDocument(); - - if (svgDocument == nullptr) + if (!svgDocument) return; CVectorGraphicItem* pVectorGraphicItem = m_pVectorGraphic->GetRenderItem(); - if (!pVectorGraphicItem) return; IDirect3DSurface9* surface = m_pVectorGraphic->GetRenderItem()->m_pD3DRenderTargetSurface; - if (!surface) return; - IDirect3DDevice9* device = pVectorGraphicItem->m_pDevice; - - uint width = pVectorGraphicItem->m_uiSizeX; - uint height = pVectorGraphicItem->m_uiSizeY; - - Bitmap bitmap = svgDocument->renderToBitmap(width, height); + Bitmap bitmap = svgDocument->renderToBitmap(pVectorGraphicItem->m_uiSizeX, pVectorGraphicItem->m_uiSizeY); + if (!bitmap.valid()) + return; // Lock surface D3DLOCKED_RECT LockedRect; - surface->LockRect(&LockedRect, nullptr, 0); + if (SUCCEEDED(surface->LockRect(&LockedRect, nullptr, D3DLOCK_DISCARD))) + { + auto surfaceData = static_cast(LockedRect.pBits); + auto sourceData = static_cast(bitmap.data()); - auto surfaceData = static_cast(LockedRect.pBits); - auto sourceData = static_cast(bitmap.data()); + for (uint32_t y = 0; y < bitmap.height(); ++y) + { + memcpy(surfaceData, sourceData, bitmap.width() * 4); // 4 bytes per pixel - for (uint32_t y = 0; y < bitmap.height(); ++y) - { - memcpy(surfaceData, sourceData, bitmap.width() * 4); // 4 bytes per pixel + // advance row pointers + sourceData += bitmap.stride(); + surfaceData += LockedRect.Pitch; + } - // advance row pointers - sourceData += bitmap.stride(); - surfaceData += LockedRect.Pitch; + // Unlock surface + surface->UnlockRect(); } - // Unlock surface - surface->UnlockRect(); - m_bHasUpdated = false; } @@ -101,25 +95,22 @@ void CClientVectorGraphicDisplay::ClearTexture() return; CVectorGraphicItem* pVectorGraphicItem = m_pVectorGraphic->GetRenderItem(); - if (!pVectorGraphicItem) return; IDirect3DSurface9* surface = pVectorGraphicItem->m_pD3DRenderTargetSurface; - if (!surface) return; - IDirect3DDevice9* device = pVectorGraphicItem->m_pDevice; - // Lock surface D3DLOCKED_RECT LockedRect; - surface->LockRect(&LockedRect, nullptr, 0); - - device->ColorFill(surface, nullptr, D3DCOLOR_ARGB(0, 0, 0, 0)); + if (SUCCEEDED(surface->LockRect(&LockedRect, nullptr, D3DLOCK_DISCARD))) + { + std::memset(LockedRect.pBits, 0x0, LockedRect.Pitch * pVectorGraphicItem->m_uiSurfaceSizeY); - // Unlock surface - surface->UnlockRect(); + // Unlock surface + surface->UnlockRect(); + } m_bIsCleared = true; } diff --git a/Client/mods/deathmatch/logic/luadefs/CLuaVectorGraphicDefs.cpp b/Client/mods/deathmatch/logic/luadefs/CLuaVectorGraphicDefs.cpp index c9f6683f8f..e70cfa77ae 100644 --- a/Client/mods/deathmatch/logic/luadefs/CLuaVectorGraphicDefs.cpp +++ b/Client/mods/deathmatch/logic/luadefs/CLuaVectorGraphicDefs.cpp @@ -126,7 +126,7 @@ CClientVectorGraphic* CLuaVectorGraphicDefs::SVGCreate(lua_State* luaVM, CVector g_pClientGame->GetManager()->GetRenderElementManager()->CreateVectorGraphic(static_cast(size.fX), static_cast(size.fY)); if (!vectorGraphic) - return false; + return nullptr; if (pathOrRawData.has_value()) { @@ -151,7 +151,7 @@ CClientVectorGraphic* CLuaVectorGraphicDefs::SVGCreate(lua_State* luaVM, CVector if (!didLoad) { delete vectorGraphic; - return false; + return nullptr; } } else @@ -177,7 +177,7 @@ CClientVectorGraphic* CLuaVectorGraphicDefs::SVGCreate(lua_State* luaVM, CVector if (!didLoad) { delete vectorGraphic; - return false; + return nullptr; } } else @@ -185,7 +185,7 @@ CClientVectorGraphic* CLuaVectorGraphicDefs::SVGCreate(lua_State* luaVM, CVector delete vectorGraphic; m_pScriptDebugging->LogCustom(luaVM, SString("Unable to load SVG (invalid file path) [%s]", pathOrRawData.value().c_str())); - return false; + return nullptr; } } }