summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author FlykeSpice <69917355+FlykeSpice@users.noreply.github.com>2024-06-29 09:57:53 -0400
committer GitHub <noreply@github.com>2024-06-29 09:57:53 -0400
commit48271af68061df7ce5715df59bc404cfdc350c32 (patch)
tree9a3d88be703d50931dc5c4e019caf83a07726558 /src
parent3f71ee678f84408b39e955067a0a2c79678e965f (diff)
rendersw: Generate cosine table at compile time (#12513)
Diffstat (limited to 'src')
-rw-r--r--src/emu/rendersw.hxx17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/emu/rendersw.hxx b/src/emu/rendersw.hxx
index 5561928e7df..7173711e018 100644
--- a/src/emu/rendersw.hxx
+++ b/src/emu/rendersw.hxx
@@ -14,6 +14,7 @@
#include "video/rgbutil.h"
#include "render.h"
+#include <array>
template <typename PixelType, int SrcShiftR, int SrcShiftG, int SrcShiftB, int DstShiftR, int DstShiftG, int DstShiftB, bool NoDestRead = false, bool BilinearFilter = false>
class software_renderer
@@ -426,8 +427,15 @@ private:
static void draw_line(render_primitive const &prim, PixelType *dstdata, s32 width, s32 height, u32 pitch)
{
- // internal tables
- static u32 s_cosine_table[2049];
+ // internal cosine table generated at compile-time
+ static const auto s_cosine_table = []() {
+ std::array<u32, 2049> result{};
+
+ for (int entry = 0; entry <= 2048; entry++)
+ result[entry] = int(double(1.0 / cos(atan(double(entry) / 2048.0))) * 0x10000000 + 0.5);
+
+ return static_cast<const std::array<u32, 2049>>(result);
+ }();
// compute the start/end coordinates
int x1 = int(prim.bounds.x0 * 65536.0f);
@@ -440,11 +448,6 @@ private:
if (PRIMFLAG_GET_ANTIALIAS(prim.flags))
{
- // build up the cosine table if we haven't yet
- if (s_cosine_table[0] == 0)
- for (int entry = 0; entry <= 2048; entry++)
- s_cosine_table[entry] = int(double(1.0 / cos(atan(double(entry) / 2048.0))) * 0x10000000 + 0.5);
-
int beam = prim.width * 65536.0f;
if (beam < 0x00010000)
beam = 0x00010000;