From aa219c0d7a81c63163fc272cbd83271989f2c5ed Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sun, 2 Aug 2020 16:00:08 -0300 Subject: [PATCH] Simplify some boilerplate internal code --- src/modules/graphics/renderstate.cpp | 130 ++++----------------------- src/modules/graphics/renderstate.h | 30 ++----- 2 files changed, 24 insertions(+), 136 deletions(-) diff --git a/src/modules/graphics/renderstate.cpp b/src/modules/graphics/renderstate.cpp index bcfe6f0e7..1c4977025 100644 --- a/src/modules/graphics/renderstate.cpp +++ b/src/modules/graphics/renderstate.cpp @@ -123,7 +123,7 @@ CompareMode getReversedCompareMode(CompareMode mode) } } -static StringMap::Entry blendModeEntries[] = +STRINGMAP_BEGIN(BlendMode, BLEND_MAX_ENUM, blendMode) { { "alpha", BLEND_ALPHA }, { "add", BLEND_ADD }, @@ -135,19 +135,17 @@ static StringMap::Entry blendModeEntries[] = { "replace", BLEND_REPLACE }, { "none", BLEND_NONE }, { "custom", BLEND_CUSTOM }, -}; +} +STRINGMAP_END(BlendMode, BLEND_MAX_ENUM, blendMode) -static StringMap blendModes(blendModeEntries, sizeof(blendModeEntries)); - -static StringMap::Entry blendAlphaEntries[] = +STRINGMAP_BEGIN(BlendAlpha, BLENDALPHA_MAX_ENUM, blendAlpha) { { "alphamultiply", BLENDALPHA_MULTIPLY }, { "premultiplied", BLENDALPHA_PREMULTIPLIED }, -}; +} +STRINGMAP_END(BlendAlpha, BLENDALPHA_MAX_ENUM, blendAlpha) -static StringMap blendAlphaModes(blendAlphaEntries, sizeof(blendAlphaEntries)); - -static StringMap::Entry blendFactorEntries[] = +STRINGMAP_BEGIN(BlendFactor, BLENDFACTOR_MAX_ENUM, blendFactor) { { "zero", BLENDFACTOR_ZERO }, { "one", BLENDFACTOR_ONE }, @@ -160,22 +158,20 @@ static StringMap::Entry blendFactorEntries[] { "dstalpha", BLENDFACTOR_DST_ALPHA }, { "oneminusdstalpha", BLENDFACTOR_ONE_MINUS_DST_ALPHA }, { "srcalphasaturated", BLENDFACTOR_SRC_ALPHA_SATURATED }, -}; +} +STRINGMAP_END(BlendFactor, BLENDFACTOR_MAX_ENUM, blendFactor) -static StringMap blendFactors(blendFactorEntries, sizeof(blendFactorEntries)); - -static StringMap::Entry blendOperationEntries[] = +STRINGMAP_BEGIN(BlendOperation, BLENDOP_MAX_ENUM, blendOperation) { { "add", BLENDOP_ADD }, { "subtract", BLENDOP_SUBTRACT }, { "reversesubtract", BLENDOP_REVERSE_SUBTRACT }, { "min", BLENDOP_MIN }, { "max", BLENDOP_MAX }, -}; +} +STRINGMAP_END(BlendOperation, BLENDOP_MAX_ENUM, blendOperation) -static StringMap blendOperations(blendOperationEntries, sizeof(blendOperationEntries)); - -static StringMap::Entry stencilActionEntries[] = +STRINGMAP_BEGIN(StencilAction, STENCIL_MAX_ENUM, stencilAction) { { "keep", STENCIL_KEEP }, { "zero", STENCIL_ZERO }, @@ -185,11 +181,10 @@ static StringMap::Entry stencilActionEntries[] { "incrementwrap", STENCIL_INCREMENT_WRAP }, { "decrementwrap", STENCIL_DECREMENT_WRAP }, { "invert", STENCIL_INVERT }, -}; +} +STRINGMAP_END(StencilAction, STENCIL_MAX_ENUM, stencilAction) -static StringMap stencilActions(stencilActionEntries, sizeof(stencilActionEntries)); - -static StringMap::Entry compareModeEntries[] = +STRINGMAP_BEGIN(CompareMode, COMPARE_MAX_ENUM, compareMode) { { "less", COMPARE_LESS }, { "lequal", COMPARE_LEQUAL }, @@ -199,99 +194,8 @@ static StringMap::Entry compareModeEntries[] = { "notequal", COMPARE_NOTEQUAL }, { "always", COMPARE_ALWAYS }, { "never", COMPARE_NEVER }, -}; - -static StringMap compareModes(compareModeEntries, sizeof(compareModeEntries)); - -bool getConstant(const char *in, BlendMode &out) -{ - return blendModes.find(in, out); -} - -bool getConstant(BlendMode in, const char *&out) -{ - return blendModes.find(in, out); -} - -std::vector getConstants(BlendMode) -{ - return blendModes.getNames(); -} - -bool getConstant(const char *in, BlendAlpha &out) -{ - return blendAlphaModes.find(in, out); -} - -bool getConstant(BlendAlpha in, const char *&out) -{ - return blendAlphaModes.find(in, out); -} - -std::vector getConstants(BlendAlpha) -{ - return blendAlphaModes.getNames(); -} - -bool getConstant(const char *in, BlendFactor &out) -{ - return blendFactors.find(in, out); -} - -bool getConstant(BlendFactor in, const char *&out) -{ - return blendFactors.find(in, out); -} - -std::vector getConstants(BlendFactor) -{ - return blendFactors.getNames(); -} - -bool getConstant(const char *in, BlendOperation &out) -{ - return blendOperations.find(in, out); -} - -bool getConstant(BlendOperation in, const char *&out) -{ - return blendOperations.find(in, out); -} - -std::vector getConstants(BlendOperation) -{ - return blendOperations.getNames(); -} - -bool getConstant(const char *in, StencilAction &out) -{ - return stencilActions.find(in, out); -} - -bool getConstant(StencilAction in, const char *&out) -{ - return stencilActions.find(in, out); -} - -std::vector getConstants(StencilAction) -{ - return stencilActions.getNames(); -} - -bool getConstant(const char *in, CompareMode &out) -{ - return compareModes.find(in, out); -} - -bool getConstant(CompareMode in, const char *&out) -{ - return compareModes.find(in, out); -} - -std::vector getConstants(CompareMode) -{ - return compareModes.getNames(); } +STRINGMAP_END(CompareMode, COMPARE_MAX_ENUM, compareMode) } // graphics } // love diff --git a/src/modules/graphics/renderstate.h b/src/modules/graphics/renderstate.h index eafd3760c..b4488b85d 100644 --- a/src/modules/graphics/renderstate.h +++ b/src/modules/graphics/renderstate.h @@ -22,6 +22,7 @@ #include "common/int.h" #include "common/math.h" +#include "common/StringMap.h" #include "vertex.h" #include @@ -203,29 +204,12 @@ bool isAlphaMultiplyBlendSupported(BlendMode mode); **/ CompareMode getReversedCompareMode(CompareMode mode); -bool getConstant(const char *in, BlendMode &out); -bool getConstant(BlendMode in, const char *&out); -std::vector getConstants(BlendMode); - -bool getConstant(const char *in, BlendAlpha &out); -bool getConstant(BlendAlpha in, const char *&out); -std::vector getConstants(BlendAlpha); - -bool getConstant(const char *in, BlendFactor &out); -bool getConstant(BlendFactor in, const char *&out); -std::vector getConstants(BlendFactor); - -bool getConstant(const char *in, BlendOperation &out); -bool getConstant(BlendOperation in, const char *&out); -std::vector getConstants(BlendOperation); - -bool getConstant(const char *in, StencilAction &out); -bool getConstant(StencilAction in, const char *&out); -std::vector getConstants(StencilAction); - -bool getConstant(const char *in, CompareMode &out); -bool getConstant(CompareMode in, const char *&out); -std::vector getConstants(CompareMode); +STRINGMAP_DECLARE(BlendMode); +STRINGMAP_DECLARE(BlendAlpha); +STRINGMAP_DECLARE(BlendFactor); +STRINGMAP_DECLARE(BlendOperation); +STRINGMAP_DECLARE(StencilAction); +STRINGMAP_DECLARE(CompareMode); } // graphics } // love