Skip to content

Commit

Permalink
Clean up the background render functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Dextinfire committed Feb 8, 2025
1 parent 73b8d60 commit 62d60d0
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 80 deletions.
74 changes: 36 additions & 38 deletions src/background2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ void Background2D::Render(int bgId, int layer) {
}

const int renderType = ScrWork[SW_BG1FADETYPE + ScrWorkBgStructSize * bgId];
BackgroundRenderTable[renderType](this, col);
std::invoke(BackgroundRenderTable[renderType], this, col);
}

void Background2D::RenderCapture(int capId, int layer) {
Expand All @@ -123,7 +123,7 @@ void Background2D::RenderCapture(int capId, int layer) {

const int renderType =
ScrWork[SW_CAP1FADETYPE + ScrWorkCaptureStructSize * capId];
BackgroundRenderTable[renderType](this, col);
std::invoke(BackgroundRenderTable[renderType], this, col);
}

void Background2D::RenderBgEff(int bgId, int layer) {
Expand Down Expand Up @@ -151,61 +151,59 @@ void Background2D::RenderBgEff(int bgId, int layer) {
256.0f;

const int renderType = ScrWork[SW_BGEFF1_MODE + structSize * bgId];
BackgroundRenderTable[renderType](this, col);
std::invoke(BackgroundRenderTable[renderType], this, col);
}

BackgroundRenderer(RenderRegular) {
Renderer->DrawSprite(
bg->BgSprite,
RectF(bg->DisplayCoords.x, bg->DisplayCoords.y,
bg->BgSprite.ScaledWidth(), bg->BgSprite.ScaledHeight()),
col, 0.0f, false, bg->IsScreencap);
void Background2D::RenderRegular(glm::vec4 col) {
Renderer->DrawSprite(BgSprite,
RectF(DisplayCoords.x, DisplayCoords.y,
BgSprite.ScaledWidth(), BgSprite.ScaledHeight()),
col, 0.0f, false, IsScreencap);

for (int i = 0; i < MaxLinkedBgBuffers; i++) {
if (bg->Links[i].Direction != LD_Off && bg->Links[i].LinkedBuffer != NULL) {
if (Links[i].Direction != LD_Off && Links[i].LinkedBuffer != NULL) {
Renderer->DrawSprite(
bg->Links[i].LinkedBuffer->BgSprite,
RectF(bg->Links[i].DisplayCoords.x, bg->Links[i].DisplayCoords.y,
bg->Links[i].LinkedBuffer->BgSprite.ScaledWidth(),
bg->Links[i].LinkedBuffer->BgSprite.ScaledHeight()),
col, 0.0f, false, bg->Links[i].LinkedBuffer->IsScreencap);
Links[i].LinkedBuffer->BgSprite,
RectF(Links[i].DisplayCoords.x, Links[i].DisplayCoords.y,
Links[i].LinkedBuffer->BgSprite.ScaledWidth(),
Links[i].LinkedBuffer->BgSprite.ScaledHeight()),
col, 0.0f, false, Links[i].LinkedBuffer->IsScreencap);
}
}
}

BackgroundRenderer(RenderMasked) {
void Background2D::RenderMasked(glm::vec4 col) {
Renderer->DrawMaskedSprite(
bg->BgSprite, Masks2D[bg->MaskNumber].MaskSprite,
RectF(bg->DisplayCoords.x, bg->DisplayCoords.y,
bg->BgSprite.ScaledWidth(), bg->BgSprite.ScaledHeight()),
col, bg->FadeCount, bg->FadeRange, bg->IsScreencap);
BgSprite, Masks2D[MaskNumber].MaskSprite,
RectF(DisplayCoords.x, DisplayCoords.y, BgSprite.ScaledWidth(),
BgSprite.ScaledHeight()),
col, FadeCount, FadeRange, IsScreencap);
}

BackgroundRenderer(RenderMaskedInverted) {
void Background2D::RenderMaskedInverted(glm::vec4 col) {
Renderer->DrawMaskedSprite(
bg->BgSprite, Masks2D[bg->MaskNumber].MaskSprite,
RectF(bg->DisplayCoords.x, bg->DisplayCoords.y,
bg->BgSprite.ScaledWidth(), bg->BgSprite.ScaledHeight()),
col, bg->FadeCount, bg->FadeRange, bg->IsScreencap, true);
BgSprite, Masks2D[MaskNumber].MaskSprite,
RectF(DisplayCoords.x, DisplayCoords.y, BgSprite.ScaledWidth(),
BgSprite.ScaledHeight()),
col, FadeCount, FadeRange, IsScreencap, true);
}

BackgroundRenderer(RenderFade) {
col.a *= bg->FadeCount / 256.0f;
void Background2D::RenderFade(glm::vec4 col) {
col.a *= FadeCount / 256.0f;

Renderer->DrawSprite(
bg->BgSprite,
RectF(bg->DisplayCoords.x, bg->DisplayCoords.y,
bg->BgSprite.ScaledWidth(), bg->BgSprite.ScaledHeight()),
col, 0.0f, false, bg->IsScreencap);
Renderer->DrawSprite(BgSprite,
RectF(DisplayCoords.x, DisplayCoords.y,
BgSprite.ScaledWidth(), BgSprite.ScaledHeight()),
col, 0.0f, false, IsScreencap);

for (int i = 0; i < MaxLinkedBgBuffers; i++) {
if (bg->Links[i].Direction != LD_Off && bg->Links[i].LinkedBuffer != NULL) {
if (Links[i].Direction != LD_Off && Links[i].LinkedBuffer != NULL) {
Renderer->DrawSprite(
bg->Links[i].LinkedBuffer->BgSprite,
RectF(bg->Links[i].DisplayCoords.x, bg->Links[i].DisplayCoords.y,
bg->Links[i].LinkedBuffer->BgSprite.ScaledWidth(),
bg->Links[i].LinkedBuffer->BgSprite.ScaledHeight()),
col, 0.0f, false, bg->Links[i].LinkedBuffer->IsScreencap);
Links[i].LinkedBuffer->BgSprite,
RectF(Links[i].DisplayCoords.x, Links[i].DisplayCoords.y,
Links[i].LinkedBuffer->BgSprite.ScaledWidth(),
Links[i].LinkedBuffer->BgSprite.ScaledHeight()),
col, 0.0f, false, Links[i].LinkedBuffer->IsScreencap);
}
}
}
Expand Down
82 changes: 40 additions & 42 deletions src/background2d.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
#include "spritesheet.h"
#include "loadable.h"

#define BackgroundRenderer(name) void name(Background2D* bg, glm::vec4 col)

namespace Impacto {

enum LinkDirection {
Expand Down Expand Up @@ -67,9 +65,47 @@ class Background2D : public Loadable<Background2D> {
private:
Texture BgTexture;
SpriteSheet BgSpriteSheet;
};

typedef void (*BackgroundRenderProc)(Background2D* bg, glm::vec4 col);
using BackgroundRenderProc = auto (Background2D::*)(glm::vec4 col) -> void;

void RenderRegular(glm::vec4 col);
void RenderMasked(glm::vec4 col);
void RenderMaskedInverted(glm::vec4 col);
void RenderFade(glm::vec4 col);

BackgroundRenderProc constexpr static BackgroundRenderTable[30] = {
&Background2D::RenderRegular, // 0
&Background2D::RenderFade, // 1
&Background2D::RenderRegular, // 2
&Background2D::RenderRegular, // 3
&Background2D::RenderRegular, // 4
&Background2D::RenderRegular, // 5
&Background2D::RenderRegular, // 6
&Background2D::RenderRegular, // 7
&Background2D::RenderRegular, // 8
&Background2D::RenderRegular, // 9
&Background2D::RenderRegular, // 10
&Background2D::RenderRegular, // 11
&Background2D::RenderRegular, // 12
&Background2D::RenderRegular, // 13
&Background2D::RenderRegular, // 14
&Background2D::RenderMasked, // 15
&Background2D::RenderMaskedInverted, // 16
&Background2D::RenderRegular, // 17
&Background2D::RenderRegular, // 18
&Background2D::RenderRegular, // 19
&Background2D::RenderRegular, // 20
&Background2D::RenderRegular, // 21
&Background2D::RenderRegular, // 22
&Background2D::RenderRegular, // 23
&Background2D::RenderRegular, // 24
&Background2D::RenderRegular, // 25
&Background2D::RenderRegular, // 26
&Background2D::RenderRegular, // 27
&Background2D::RenderRegular, // 28
&Background2D::RenderRegular, // 29
};
};

int constexpr MaxBackgrounds2D = 8;
int constexpr MaxScreencaptures = 2;
Expand All @@ -80,42 +116,4 @@ inline Background2D ShaderScreencapture;

inline ska::flat_hash_map<int, Background2D*> Backgrounds2D;

BackgroundRenderer(RenderRegular);
BackgroundRenderer(RenderMasked);
BackgroundRenderer(RenderMaskedInverted);
BackgroundRenderer(RenderFade);

BackgroundRenderProc static BackgroundRenderTable[30] = {
RenderRegular, // 0
RenderFade, // 1
RenderRegular, // 2
RenderRegular, // 3
RenderRegular, // 4
RenderRegular, // 5
RenderRegular, // 6
RenderRegular, // 7
RenderRegular, // 8
RenderRegular, // 9
RenderRegular, // 10
RenderRegular, // 11
RenderRegular, // 12
RenderRegular, // 13
RenderRegular, // 14
RenderMasked, // 15
RenderMaskedInverted, // 16
RenderRegular, // 17
RenderRegular, // 18
RenderRegular, // 19
RenderRegular, // 20
RenderRegular, // 21
RenderRegular, // 22
RenderRegular, // 23
RenderRegular, // 24
RenderRegular, // 25
RenderRegular, // 26
RenderRegular, // 27
RenderRegular, // 28
RenderRegular, // 29
};

} // namespace Impacto

0 comments on commit 62d60d0

Please sign in to comment.