diff --git a/Source/Core/VideoCommon/IndexGenerator.cpp b/Source/Core/VideoCommon/IndexGenerator.cpp index 5e45cc6a5f..761d1da7e5 100644 --- a/Source/Core/VideoCommon/IndexGenerator.cpp +++ b/Source/Core/VideoCommon/IndexGenerator.cpp @@ -2,46 +2,52 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include "VideoCommon/IndexGenerator.h" + +#include #include #include #include "Common/CommonTypes.h" #include "Common/Compiler.h" #include "Common/Logging/Log.h" -#include "VideoCommon/IndexGenerator.h" #include "VideoCommon/OpcodeDecoding.h" #include "VideoCommon/VideoConfig.h" +namespace +{ +constexpr u16 s_primitive_restart = UINT16_MAX; + +using PrimitiveFunction = u16*(*)(u16*, u32, u32); +std::array s_primitive_table; +} // Anonymous namespace + // Init u16* IndexGenerator::index_buffer_current; u16* IndexGenerator::BASEIptr; u32 IndexGenerator::base_index; -static const u16 s_primitive_restart = UINT16_MAX; - -static u16* (*primitive_table[8])(u16*, u32, u32); - void IndexGenerator::Init() { if (g_Config.backend_info.bSupportsPrimitiveRestart) { - primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads; - primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard; - primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList; - primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip; - primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan; + s_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads; + s_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard; + s_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList; + s_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip; + s_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan; } else { - primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads; - primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard; - primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList; - primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip; - primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan; + s_primitive_table[OpcodeDecoder::GX_DRAW_QUADS] = AddQuads; + s_primitive_table[OpcodeDecoder::GX_DRAW_QUADS_2] = AddQuads_nonstandard; + s_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLES] = AddList; + s_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP] = AddStrip; + s_primitive_table[OpcodeDecoder::GX_DRAW_TRIANGLE_FAN] = AddFan; } - primitive_table[OpcodeDecoder::GX_DRAW_LINES] = &AddLineList; - primitive_table[OpcodeDecoder::GX_DRAW_LINE_STRIP] = &AddLineStrip; - primitive_table[OpcodeDecoder::GX_DRAW_POINTS] = &AddPoints; + s_primitive_table[OpcodeDecoder::GX_DRAW_LINES] = &AddLineList; + s_primitive_table[OpcodeDecoder::GX_DRAW_LINE_STRIP] = &AddLineStrip; + s_primitive_table[OpcodeDecoder::GX_DRAW_POINTS] = &AddPoints; } void IndexGenerator::Start(u16* Indexptr) @@ -53,7 +59,7 @@ void IndexGenerator::Start(u16* Indexptr) void IndexGenerator::AddIndices(int primitive, u32 numVerts) { - index_buffer_current = primitive_table[primitive](index_buffer_current, numVerts, base_index); + index_buffer_current = s_primitive_table[primitive](index_buffer_current, numVerts, base_index); base_index += numVerts; }