#pragma once enum StencilValueType { STENCIL_VALUE_UNIFORM, STENCIL_VALUE_ZERO, STENCIL_VALUE_ONE, STENCIL_VALUE_KEEP, STENCIL_VALUE_INVERT, STENCIL_VALUE_INCR_4, STENCIL_VALUE_INCR_8, STENCIL_VALUE_DECR_4, STENCIL_VALUE_DECR_8, }; enum ReplaceAlphaType { REPLACE_ALPHA_NO = 0, REPLACE_ALPHA_YES = 1, REPLACE_ALPHA_DUALSOURCE = 2, }; enum ReplaceBlendType { REPLACE_BLEND_NO, REPLACE_BLEND_STANDARD, REPLACE_BLEND_PRE_SRC, REPLACE_BLEND_PRE_SRC_2X_ALPHA, REPLACE_BLEND_2X_ALPHA, REPLACE_BLEND_2X_SRC, REPLACE_BLEND_COPY_FBO, }; enum LogicOpReplaceType { LOGICOPTYPE_NORMAL, LOGICOPTYPE_ONE, LOGICOPTYPE_INVERT, }; bool IsAlphaTestTriviallyTrue(); bool IsColorTestAgainstZero(); bool IsColorTestTriviallyTrue(); bool IsAlphaTestAgainstZero(); StencilValueType ReplaceAlphaWithStencilType(); ReplaceAlphaType ReplaceAlphaWithStencil(ReplaceBlendType replaceBlend); ReplaceBlendType ReplaceBlendWithShader(bool allowShaderBlend); bool CanUseHardwareTransform(int prim); LogicOpReplaceType ReplaceLogicOpType();