From 48271af68061df7ce5715df59bc404cfdc350c32 Mon Sep 17 00:00:00 2001 From: FlykeSpice <69917355+FlykeSpice@users.noreply.github.com> Date: Sat, 29 Jun 2024 09:57:53 -0400 Subject: rendersw: Generate cosine table at compile time (#12513) --- src/emu/rendersw.hxx | 17 ++++++++++------- 1 file 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 template 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 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>(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; -- cgit v1.2.3