diff --git a/src/renderer/dx9/renderer.cpp b/src/renderer/dx9/renderer.cpp index ecc47723..4b1a57df 100644 --- a/src/renderer/dx9/renderer.cpp +++ b/src/renderer/dx9/renderer.cpp @@ -558,13 +558,15 @@ void Renderer::DrawMaskedSpriteOverlay(Sprite const& sprite, Sprite const& mask, RectF const& dest, glm::vec4 tint, int alpha, int fadeRange, bool isInverted, float angle, - bool useMaskAlpha) { + bool useMaskAlpha, bool isScreencap) { if (!Drawing) { ImpLog(LL_Error, LC_Render, "Renderer->DrawMaskedSpriteOverlay() called before BeginFrame()\n"); return; } + if (isScreencap) Flush(); + if (alpha < 0) alpha = 0; if (alpha > fadeRange + 256) alpha = fadeRange + 256; diff --git a/src/renderer/dx9/renderer.h b/src/renderer/dx9/renderer.h index 44e2c4b8..27f63524 100644 --- a/src/renderer/dx9/renderer.h +++ b/src/renderer/dx9/renderer.h @@ -76,7 +76,7 @@ class Renderer : public BaseRenderer { void DrawMaskedSpriteOverlay(Sprite const& sprite, Sprite const& mask, RectF const& dest, glm::vec4 tint, int alpha, int fadeRange, bool isInverted, float angle, - bool useMaskAlpha) override; + bool useMaskAlpha, bool isScreencap) override; void DrawCHLCCMenuBackground(const Sprite& sprite, const Sprite& mask, const RectF& dest, float alpha) override; diff --git a/src/renderer/opengl/renderer.cpp b/src/renderer/opengl/renderer.cpp index e60ef548..2c1f599a 100644 --- a/src/renderer/opengl/renderer.cpp +++ b/src/renderer/opengl/renderer.cpp @@ -515,13 +515,15 @@ void Renderer::DrawMaskedSpriteOverlay(Sprite const& sprite, Sprite const& mask, RectF const& dest, glm::vec4 tint, int alpha, int fadeRange, bool isInverted, float angle, - bool useMaskAlpha) { + bool useMaskAlpha, bool isScreencap) { if (!Drawing) { ImpLog(LL_Error, LC_Render, "Renderer->DrawMaskedSpriteOverlay() called before BeginFrame()\n"); return; } + if (isScreencap) Flush(); + if (alpha < 0) alpha = 0; if (alpha > fadeRange + 256) alpha = fadeRange + 256; diff --git a/src/renderer/opengl/renderer.h b/src/renderer/opengl/renderer.h index 3e9991d5..b0380f48 100644 --- a/src/renderer/opengl/renderer.h +++ b/src/renderer/opengl/renderer.h @@ -84,7 +84,7 @@ class Renderer : public BaseRenderer { void DrawMaskedSpriteOverlay(Sprite const& sprite, Sprite const& mask, RectF const& dest, glm::vec4 tint, int alpha, int fadeRange, bool isInverted, float angle, - bool useMaskAlpha); + bool useMaskAlpha, bool isScreencap); void DrawCHLCCMenuBackground(const Sprite& sprite, const Sprite& mask, const RectF& dest, float alpha) override; diff --git a/src/renderer/renderer.h b/src/renderer/renderer.h index 87454c39..2e6d6f3c 100644 --- a/src/renderer/renderer.h +++ b/src/renderer/renderer.h @@ -82,7 +82,8 @@ class BaseRenderer { int alpha, int fadeRange, bool isInverted = false, float angle = 0.0f, - bool useMaskAlpha = true) = 0; + bool useMaskAlpha = true, + bool isScreencap = false) = 0; virtual void DrawSprite3DRotated(Sprite const& sprite, RectF const& dest, float depth, glm::vec2 vanishingPoint, diff --git a/src/renderer/vulkan/renderer.cpp b/src/renderer/vulkan/renderer.cpp index 1bb8fc5d..ac282048 100644 --- a/src/renderer/vulkan/renderer.cpp +++ b/src/renderer/vulkan/renderer.cpp @@ -1439,13 +1439,15 @@ void Renderer::DrawMaskedSpriteOverlay(Sprite const& sprite, Sprite const& mask, RectF const& dest, glm::vec4 tint, int alpha, int fadeRange, bool isInverted, float angle, - bool useMaskAlpha) { + bool useMaskAlpha, bool isScreencap) { if (!Drawing) { ImpLog(LL_Error, LC_Render, "Renderer->DrawMaskedSpriteOverlay() called before BeginFrame()\n"); return; } + if (isScreencap) Flush(); + if (Textures.count(sprite.Sheet.Texture) == 0 || Textures.count(mask.Sheet.Texture) == 0) return; diff --git a/src/renderer/vulkan/renderer.h b/src/renderer/vulkan/renderer.h index 07415aab..ec2fd64f 100644 --- a/src/renderer/vulkan/renderer.h +++ b/src/renderer/vulkan/renderer.h @@ -144,7 +144,7 @@ class Renderer : public BaseRenderer { void DrawMaskedSpriteOverlay(Sprite const& sprite, Sprite const& mask, RectF const& dest, glm::vec4 tint, int alpha, int fadeRange, bool isInverted, float angle, - bool useMaskAlpha); + bool useMaskAlpha, bool isScreencap); void DrawCHLCCMenuBackground(const Sprite& sprite, const Sprite& mask, const RectF& dest, float alpha) override; diff --git a/src/ui/widgets/cc/backlogentry.cpp b/src/ui/widgets/cc/backlogentry.cpp index 8bed6aae..99d8dc2c 100644 --- a/src/ui/widgets/cc/backlogentry.cpp +++ b/src/ui/widgets/cc/backlogentry.cpp @@ -18,12 +18,15 @@ BacklogEntry::BacklogEntry(int id, uint8_t* str, int audioId, glm::vec2 pos, void BacklogEntry::Render() { if (AudioId != -1) { - // TODO: Use transparency mask - Renderer->DrawSprite( - VoiceIcon, - glm::vec2(Bounds.X - VoiceIcon.ScaledWidth(), Bounds.Y) + - VoiceIconOffset, - Tint); + RectF bounds = RectF(Bounds.X - VoiceIcon.ScaledWidth() + VoiceIconOffset.x, + Bounds.Y + VoiceIconOffset.y, VoiceIcon.ScaledWidth(), + VoiceIcon.ScaledHeight()); + Sprite mask; + mask.Sheet = BacklogMaskSheet; + mask.Bounds = bounds; + + Renderer->DrawMaskedSpriteOverlay(VoiceIcon, mask, bounds, Tint, + Tint.a * 256, 20, false, 0, false, true); } if (BacklogPage->HasName) {