summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/VertexManagerBase.cpp
diff options
context:
space:
mode:
authorPokechu22 <Pokechu022@gmail.com>2021-04-30 14:57:12 -0700
committerPokechu22 <Pokechu022@gmail.com>2021-12-18 12:51:56 -0800
commit3aaeb2b9ef3f6b9cde69c77ecdf96e8defc996d5 (patch)
treebacb645dba78c7acb3165407ef904a3a890eeb12 /Source/Core/VideoCommon/VertexManagerBase.cpp
parent3fc12431c5ed7a0df1e9bd4c538405a44f6561de (diff)
Convert OpcodeDecoder::Opcode and OpcodeDecoder::Primitive to enum class
Diffstat (limited to 'Source/Core/VideoCommon/VertexManagerBase.cpp')
-rw-r--r--Source/Core/VideoCommon/VertexManagerBase.cpp51
1 files changed, 27 insertions, 24 deletions
diff --git a/Source/Core/VideoCommon/VertexManagerBase.cpp b/Source/Core/VideoCommon/VertexManagerBase.cpp
index 63213edd3a..5fa85b2761 100644
--- a/Source/Core/VideoCommon/VertexManagerBase.cpp
+++ b/Source/Core/VideoCommon/VertexManagerBase.cpp
@@ -10,6 +10,7 @@
#include "Common/BitSet.h"
#include "Common/ChunkFile.h"
#include "Common/CommonTypes.h"
+#include "Common/EnumMap.h"
#include "Common/Logging/Log.h"
#include "Common/MathUtil.h"
@@ -38,8 +39,10 @@
std::unique_ptr<VertexManagerBase> g_vertex_manager;
+using OpcodeDecoder::Primitive;
+
// GX primitive -> RenderState primitive, no primitive restart
-constexpr std::array<PrimitiveType, 8> primitive_from_gx{{
+constexpr Common::EnumMap<PrimitiveType, Primitive::GX_DRAW_POINTS> primitive_from_gx{
PrimitiveType::Triangles, // GX_DRAW_QUADS
PrimitiveType::Triangles, // GX_DRAW_QUADS_2
PrimitiveType::Triangles, // GX_DRAW_TRIANGLES
@@ -48,10 +51,10 @@ constexpr std::array<PrimitiveType, 8> primitive_from_gx{{
PrimitiveType::Lines, // GX_DRAW_LINES
PrimitiveType::Lines, // GX_DRAW_LINE_STRIP
PrimitiveType::Points, // GX_DRAW_POINTS
-}};
+};
// GX primitive -> RenderState primitive, using primitive restart
-constexpr std::array<PrimitiveType, 8> primitive_from_gx_pr{{
+constexpr Common::EnumMap<PrimitiveType, Primitive::GX_DRAW_POINTS> primitive_from_gx_pr{
PrimitiveType::TriangleStrip, // GX_DRAW_QUADS
PrimitiveType::TriangleStrip, // GX_DRAW_QUADS_2
PrimitiveType::TriangleStrip, // GX_DRAW_TRIANGLES
@@ -60,7 +63,7 @@ constexpr std::array<PrimitiveType, 8> primitive_from_gx_pr{{
PrimitiveType::Lines, // GX_DRAW_LINES
PrimitiveType::Lines, // GX_DRAW_LINE_STRIP
PrimitiveType::Points, // GX_DRAW_POINTS
-}};
+};
// Due to the BT.601 standard which the GameCube is based on being a compromise
// between PAL and NTSC, neither standard gets square pixels. They are each off
@@ -107,13 +110,13 @@ u32 VertexManagerBase::GetRemainingSize() const
return static_cast<u32>(m_end_buffer_pointer - m_cur_buffer_pointer);
}
-void VertexManagerBase::AddIndices(int primitive, u32 num_vertices)
+void VertexManagerBase::AddIndices(OpcodeDecoder::Primitive primitive, u32 num_vertices)
{
m_index_generator.AddIndices(primitive, num_vertices);
}
-DataReader VertexManagerBase::PrepareForAdditionalData(int primitive, u32 count, u32 stride,
- bool cullall)
+DataReader VertexManagerBase::PrepareForAdditionalData(OpcodeDecoder::Primitive primitive,
+ u32 count, u32 stride, bool cullall)
{
// Flush all EFB pokes. Since the buffer is shared, we can't draw pokes+primitives concurrently.
g_framebuffer_manager->FlushEFBPokes();
@@ -185,7 +188,7 @@ void VertexManagerBase::FlushData(u32 count, u32 stride)
m_cur_buffer_pointer += count * stride;
}
-u32 VertexManagerBase::GetRemainingIndices(int primitive) const
+u32 VertexManagerBase::GetRemainingIndices(OpcodeDecoder::Primitive primitive) const
{
const u32 index_len = MAXIBUFFERSIZE - m_index_generator.GetIndexLen();
@@ -193,22 +196,22 @@ u32 VertexManagerBase::GetRemainingIndices(int primitive) const
{
switch (primitive)
{
- case OpcodeDecoder::GX_DRAW_QUADS:
- case OpcodeDecoder::GX_DRAW_QUADS_2:
+ case Primitive::GX_DRAW_QUADS:
+ case Primitive::GX_DRAW_QUADS_2:
return index_len / 5 * 4;
- case OpcodeDecoder::GX_DRAW_TRIANGLES:
+ case Primitive::GX_DRAW_TRIANGLES:
return index_len / 4 * 3;
- case OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP:
+ case Primitive::GX_DRAW_TRIANGLE_STRIP:
return index_len / 1 - 1;
- case OpcodeDecoder::GX_DRAW_TRIANGLE_FAN:
+ case Primitive::GX_DRAW_TRIANGLE_FAN:
return index_len / 6 * 4 + 1;
- case OpcodeDecoder::GX_DRAW_LINES:
+ case Primitive::GX_DRAW_LINES:
return index_len;
- case OpcodeDecoder::GX_DRAW_LINE_STRIP:
+ case Primitive::GX_DRAW_LINE_STRIP:
return index_len / 2 + 1;
- case OpcodeDecoder::GX_DRAW_POINTS:
+ case Primitive::GX_DRAW_POINTS:
return index_len;
default:
@@ -219,22 +222,22 @@ u32 VertexManagerBase::GetRemainingIndices(int primitive) const
{
switch (primitive)
{
- case OpcodeDecoder::GX_DRAW_QUADS:
- case OpcodeDecoder::GX_DRAW_QUADS_2:
+ case Primitive::GX_DRAW_QUADS:
+ case Primitive::GX_DRAW_QUADS_2:
return index_len / 6 * 4;
- case OpcodeDecoder::GX_DRAW_TRIANGLES:
+ case Primitive::GX_DRAW_TRIANGLES:
return index_len;
- case OpcodeDecoder::GX_DRAW_TRIANGLE_STRIP:
+ case Primitive::GX_DRAW_TRIANGLE_STRIP:
return index_len / 3 + 2;
- case OpcodeDecoder::GX_DRAW_TRIANGLE_FAN:
+ case Primitive::GX_DRAW_TRIANGLE_FAN:
return index_len / 3 + 2;
- case OpcodeDecoder::GX_DRAW_LINES:
+ case Primitive::GX_DRAW_LINES:
return index_len;
- case OpcodeDecoder::GX_DRAW_LINE_STRIP:
+ case Primitive::GX_DRAW_LINE_STRIP:
return index_len / 2 + 1;
- case OpcodeDecoder::GX_DRAW_POINTS:
+ case Primitive::GX_DRAW_POINTS:
return index_len;
default: