#ifndef MOJOSHADER_EFFECTS_H
#define MOJOSHADER_EFFECTS_H
#ifdef MOJOSHADER_EFFECT_SUPPORT
typedef enum MOJOSHADER_renderStateType
{
MOJOSHADER_RS_ZENABLE,
MOJOSHADER_RS_FILLMODE,
MOJOSHADER_RS_SHADEMODE,
MOJOSHADER_RS_ZWRITEENABLE,
MOJOSHADER_RS_ALPHATESTENABLE,
MOJOSHADER_RS_LASTPIXEL,
MOJOSHADER_RS_SRCBLEND,
MOJOSHADER_RS_DESTBLEND,
MOJOSHADER_RS_CULLMODE,
MOJOSHADER_RS_ZFUNC,
MOJOSHADER_RS_ALPHAREF,
MOJOSHADER_RS_ALPHAFUNC,
MOJOSHADER_RS_DITHERENABLE,
MOJOSHADER_RS_ALPHABLENDENABLE,
MOJOSHADER_RS_FOGENABLE,
MOJOSHADER_RS_SPECULARENABLE,
MOJOSHADER_RS_FOGCOLOR,
MOJOSHADER_RS_FOGTABLEMODE,
MOJOSHADER_RS_FOGSTART,
MOJOSHADER_RS_FOGEND,
MOJOSHADER_RS_FOGDENSITY,
MOJOSHADER_RS_RANGEFOGENABLE,
MOJOSHADER_RS_STENCILENABLE,
MOJOSHADER_RS_STENCILFAIL,
MOJOSHADER_RS_STENCILZFAIL,
MOJOSHADER_RS_STENCILPASS,
MOJOSHADER_RS_STENCILFUNC,
MOJOSHADER_RS_STENCILREF,
MOJOSHADER_RS_STENCILMASK,
MOJOSHADER_RS_STENCILWRITEMASK,
MOJOSHADER_RS_TEXTUREFACTOR,
MOJOSHADER_RS_WRAP0,
MOJOSHADER_RS_WRAP1,
MOJOSHADER_RS_WRAP2,
MOJOSHADER_RS_WRAP3,
MOJOSHADER_RS_WRAP4,
MOJOSHADER_RS_WRAP5,
MOJOSHADER_RS_WRAP6,
MOJOSHADER_RS_WRAP7,
MOJOSHADER_RS_WRAP8,
MOJOSHADER_RS_WRAP9,
MOJOSHADER_RS_WRAP10,
MOJOSHADER_RS_WRAP11,
MOJOSHADER_RS_WRAP12,
MOJOSHADER_RS_WRAP13,
MOJOSHADER_RS_WRAP14,
MOJOSHADER_RS_WRAP15,
MOJOSHADER_RS_CLIPPING,
MOJOSHADER_RS_LIGHTING,
MOJOSHADER_RS_AMBIENT,
MOJOSHADER_RS_FOGVERTEXMODE,
MOJOSHADER_RS_COLORVERTEX,
MOJOSHADER_RS_LOCALVIEWER,
MOJOSHADER_RS_NORMALIZENORMALS,
MOJOSHADER_RS_DIFFUSEMATERIALSOURCE,
MOJOSHADER_RS_SPECULARMATERIALSOURCE,
MOJOSHADER_RS_AMBIENTMATERIALSOURCE,
MOJOSHADER_RS_EMISSIVEMATERIALSOURCE,
MOJOSHADER_RS_VERTEXBLEND,
MOJOSHADER_RS_CLIPPLANEENABLE,
MOJOSHADER_RS_POINTSIZE,
MOJOSHADER_RS_POINTSIZE_MIN,
MOJOSHADER_RS_POINTSPRITEENABLE,
MOJOSHADER_RS_POINTSCALEENABLE,
MOJOSHADER_RS_POINTSCALE_A,
MOJOSHADER_RS_POINTSCALE_B,
MOJOSHADER_RS_POINTSCALE_C,
MOJOSHADER_RS_MULTISAMPLEANTIALIAS,
MOJOSHADER_RS_MULTISAMPLEMASK,
MOJOSHADER_RS_PATCHEDGESTYLE,
MOJOSHADER_RS_DEBUGMONITORTOKEN,
MOJOSHADER_RS_POINTSIZE_MAX,
MOJOSHADER_RS_INDEXEDVERTEXBLENDENABLE,
MOJOSHADER_RS_COLORWRITEENABLE,
MOJOSHADER_RS_TWEENFACTOR,
MOJOSHADER_RS_BLENDOP,
MOJOSHADER_RS_POSITIONDEGREE,
MOJOSHADER_RS_NORMALDEGREE,
MOJOSHADER_RS_SCISSORTESTENABLE,
MOJOSHADER_RS_SLOPESCALEDEPTHBIAS,
MOJOSHADER_RS_ANTIALIASEDLINEENABLE,
MOJOSHADER_RS_MINTESSELLATIONLEVEL,
MOJOSHADER_RS_MAXTESSELLATIONLEVEL,
MOJOSHADER_RS_ADAPTIVETESS_X,
MOJOSHADER_RS_ADAPTIVETESS_Y,
MOJOSHADER_RS_ADAPTIVETESS_Z,
MOJOSHADER_RS_ADAPTIVETESS_W,
MOJOSHADER_RS_ENABLEADAPTIVETESSELLATION,
MOJOSHADER_RS_TWOSIDEDSTENCILMODE,
MOJOSHADER_RS_CCW_STENCILFAIL,
MOJOSHADER_RS_CCW_STENCILZFAIL,
MOJOSHADER_RS_CCW_STENCILPASS,
MOJOSHADER_RS_CCW_STENCILFUNC,
MOJOSHADER_RS_COLORWRITEENABLE1,
MOJOSHADER_RS_COLORWRITEENABLE2,
MOJOSHADER_RS_COLORWRITEENABLE3,
MOJOSHADER_RS_BLENDFACTOR,
MOJOSHADER_RS_SRGBWRITEENABLE,
MOJOSHADER_RS_DEPTHBIAS,
MOJOSHADER_RS_SEPARATEALPHABLENDENABLE,
MOJOSHADER_RS_SRCBLENDALPHA,
MOJOSHADER_RS_DESTBLENDALPHA,
MOJOSHADER_RS_BLENDOPALPHA,
MOJOSHADER_RS_VERTEXSHADER = 146,
MOJOSHADER_RS_PIXELSHADER = 147
} MOJOSHADER_renderStateType;
typedef enum MOJOSHADER_zBufferType
{
MOJOSHADER_ZB_FALSE,
MOJOSHADER_ZB_TRUE,
MOJOSHADER_ZB_USEW
} MOJOSHADER_zBufferType;
typedef enum MOJOSHADER_fillMode
{
MOJOSHADER_FILL_POINT = 1,
MOJOSHADER_FILL_WIREFRAME = 2,
MOJOSHADER_FILL_SOLID = 3
} MOJOSHADER_fillMode;
typedef enum MOJOSHADER_shadeMode
{
MOJOSHADER_SHADE_FLAT = 1,
MOJOSHADER_SHADE_GOURAUD = 2,
MOJOSHADER_SHADE_PHONG = 3
} MOJOSHADER_shadeMode;
typedef enum MOJOSHADER_blendMode
{
MOJOSHADER_BLEND_ZERO = 1,
MOJOSHADER_BLEND_ONE = 2,
MOJOSHADER_BLEND_SRCCOLOR = 3,
MOJOSHADER_BLEND_INVSRCCOLOR = 4,
MOJOSHADER_BLEND_SRCALPHA = 5,
MOJOSHADER_BLEND_INVSRCALPHA = 6,
MOJOSHADER_BLEND_DESTALPHA = 7,
MOJOSHADER_BLEND_INVDESTALPHA = 8,
MOJOSHADER_BLEND_DESTCOLOR = 9,
MOJOSHADER_BLEND_INVDESTCOLOR = 10,
MOJOSHADER_BLEND_SRCALPHASAT = 11,
MOJOSHADER_BLEND_BOTHSRCALPHA = 12,
MOJOSHADER_BLEND_BOTHINVSRCALPHA = 13,
MOJOSHADER_BLEND_BLENDFACTOR = 14,
MOJOSHADER_BLEND_INVBLENDFACTOR = 15,
MOJOSHADER_BLEND_SRCCOLOR2 = 16,
MOJOSHADER_BLEND_INVSRCCOLOR2 = 17
} MOJOSHADER_blendMode;
typedef enum MOJOSHADER_cullMode
{
MOJOSHADER_CULL_NONE = 1,
MOJOSHADER_CULL_CW = 2,
MOJOSHADER_CULL_CCW = 3
} MOJOSHADER_cullMode;
typedef enum MOJOSHADER_compareFunc
{
MOJOSHADER_CMP_NEVER = 1,
MOJOSHADER_CMP_LESS = 2,
MOJOSHADER_CMP_EQUAL = 3,
MOJOSHADER_CMP_LESSEQUAL = 4,
MOJOSHADER_CMP_GREATER = 5,
MOJOSHADER_CMP_NOTEQUAL = 6,
MOJOSHADER_CMP_GREATEREQUAL = 7,
MOJOSHADER_CMP_ALWAYS = 8
} MOJOSHADER_compareFunc;
typedef enum MOJOSHADER_fogMode
{
MOJOSHADER_FOG_NONE,
MOJOSHADER_FOG_EXP,
MOJOSHADER_FOG_EXP2,
MOJOSHADER_FOG_LINEAR
} MOJOSHADER_fogMode;
typedef enum MOJOSHADER_stencilOp
{
MOJOSHADER_STENCILOP_KEEP = 1,
MOJOSHADER_STENCILOP_ZERO = 2,
MOJOSHADER_STENCILOP_REPLACE = 3,
MOJOSHADER_STENCILOP_INCRSAT = 4,
MOJOSHADER_STENCILOP_DECRSAT = 5,
MOJOSHADER_STENCILOP_INVERT = 6,
MOJOSHADER_STENCILOP_INCR = 7,
MOJOSHADER_STENCILOP_DECR = 8
} MOJOSHADER_stencilOp;
typedef enum MOJOSHADER_materialColorSource
{
MOJOSHADER_MCS_MATERIAL,
MOJOSHADER_MCS_COLOR1,
MOJOSHADER_MCS_COLOR2
} MOJOSHADER_materialColorSource;
typedef enum MOJOSHADER_vertexBlendFlags
{
MOJOSHADER_VBF_DISABLE = 0,
MOJOSHADER_VBF_1WEIGHTS = 1,
MOJOSHADER_VBF_2WEIGHTS = 2,
MOJOSHADER_VBF_3WEIGHTS = 3,
MOJOSHADER_VBF_TWEENING = 255,
MOJOSHADER_VBF_0WEIGHTS = 256
} MOJOSHADER_vertexBlendFlags;
typedef enum MOJOSHADER_patchedEdgeStyle
{
MOJOSHADER_PATCHEDGE_DISCRETE,
MOJOSHADER_PATCHEDGE_CONTINUOUS
} MOJOSHADER_patchedEdgeStyle;
typedef enum MOJOSHADER_debugMonitorTokens
{
MOJOSHADER_DMT_ENABLE,
MOJOSHADER_DMT_DISABLE
} MOJOSHADER_debugMonitorTokens;
typedef enum MOJOSHADER_blendOp
{
MOJOSHADER_BLENDOP_ADD = 1,
MOJOSHADER_BLENDOP_SUBTRACT = 2,
MOJOSHADER_BLENDOP_REVSUBTRACT = 3,
MOJOSHADER_BLENDOP_MIN = 4,
MOJOSHADER_BLENDOP_MAX = 5
} MOJOSHADER_blendOp;
typedef enum MOJOSHADER_degreeType
{
MOJOSHADER_DEGREE_LINEAR = 1,
MOJOSHADER_DEGREE_QUADRATIC = 2,
MOJOSHADER_DEGREE_CUBIC = 3,
MOJOSHADER_DEGREE_QUINTIC = 5
} MOJOSHADER_degreeType;
typedef enum MOJOSHADER_samplerStateType
{
MOJOSHADER_SAMP_UNKNOWN0 = 0,
MOJOSHADER_SAMP_UNKNOWN1 = 1,
MOJOSHADER_SAMP_UNKNOWN2 = 2,
MOJOSHADER_SAMP_UNKNOWN3 = 3,
MOJOSHADER_SAMP_TEXTURE = 4,
MOJOSHADER_SAMP_ADDRESSU = 5,
MOJOSHADER_SAMP_ADDRESSV = 6,
MOJOSHADER_SAMP_ADDRESSW = 7,
MOJOSHADER_SAMP_BORDERCOLOR = 8,
MOJOSHADER_SAMP_MAGFILTER = 9,
MOJOSHADER_SAMP_MINFILTER = 10,
MOJOSHADER_SAMP_MIPFILTER = 11,
MOJOSHADER_SAMP_MIPMAPLODBIAS = 12,
MOJOSHADER_SAMP_MAXMIPLEVEL = 13,
MOJOSHADER_SAMP_MAXANISOTROPY = 14,
MOJOSHADER_SAMP_SRGBTEXTURE = 15,
MOJOSHADER_SAMP_ELEMENTINDEX = 16,
MOJOSHADER_SAMP_DMAPOFFSET = 17
} MOJOSHADER_samplerStateType;
typedef enum MOJOSHADER_textureAddress
{
MOJOSHADER_TADDRESS_WRAP = 1,
MOJOSHADER_TADDRESS_MIRROR = 2,
MOJOSHADER_TADDRESS_CLAMP = 3,
MOJOSHADER_TADDRESS_BORDER = 4,
MOJOSHADER_TADDRESS_MIRRORONCE = 5
} MOJOSHADER_textureAddress;
typedef enum MOJOSHADER_textureFilterType
{
MOJOSHADER_TEXTUREFILTER_NONE,
MOJOSHADER_TEXTUREFILTER_POINT,
MOJOSHADER_TEXTUREFILTER_LINEAR,
MOJOSHADER_TEXTUREFILTER_ANISOTROPIC,
MOJOSHADER_TEXTUREFILTER_PYRAMIDALQUAD,
MOJOSHADER_TEXTUREFILTER_GAUSSIANQUAD,
MOJOSHADER_TEXTUREFILTER_CONVOLUTIONMONO
} MOJOSHADER_textureFilterType;
typedef struct MOJOSHADER_effectSamplerState MOJOSHADER_effectSamplerState;
typedef struct MOJOSHADER_effectValue
{
const char *name;
const char *semantic;
MOJOSHADER_symbolTypeInfo type;
unsigned int value_count;
MOJOSHADERNAMELESS union
{
void *values;
int *valuesI;
float *valuesF;
MOJOSHADER_zBufferType *valuesZBT;
MOJOSHADER_fillMode *valuesFiM;
MOJOSHADER_shadeMode *valuesSM;
MOJOSHADER_blendMode *valuesBM;
MOJOSHADER_cullMode *valuesCM;
MOJOSHADER_compareFunc *valuesCF;
MOJOSHADER_fogMode *valuesFoM;
MOJOSHADER_stencilOp *valuesSO;
MOJOSHADER_materialColorSource *valuesMCS;
MOJOSHADER_vertexBlendFlags *valuesVBF;
MOJOSHADER_patchedEdgeStyle *valuesPES;
MOJOSHADER_debugMonitorTokens *valuesDMT;
MOJOSHADER_blendOp *valuesBO;
MOJOSHADER_degreeType *valuesDT;
MOJOSHADER_textureAddress *valuesTA;
MOJOSHADER_textureFilterType *valuesTFT;
MOJOSHADER_effectSamplerState *valuesSS;
};
} MOJOSHADER_effectValue;
typedef struct MOJOSHADER_effectState
{
MOJOSHADER_renderStateType type;
MOJOSHADER_effectValue value;
} MOJOSHADER_effectState;
struct MOJOSHADER_effectSamplerState
{
MOJOSHADER_samplerStateType type;
MOJOSHADER_effectValue value;
};
typedef MOJOSHADER_effectValue MOJOSHADER_effectAnnotation;
typedef struct MOJOSHADER_effectParam
{
MOJOSHADER_effectValue value;
unsigned int annotation_count;
MOJOSHADER_effectAnnotation *annotations;
} MOJOSHADER_effectParam;
typedef struct MOJOSHADER_effectPass
{
const char *name;
unsigned int state_count;
MOJOSHADER_effectState *states;
unsigned int annotation_count;
MOJOSHADER_effectAnnotation* annotations;
} MOJOSHADER_effectPass;
typedef struct MOJOSHADER_effectTechnique
{
const char *name;
unsigned int pass_count;
MOJOSHADER_effectPass *passes;
unsigned int annotation_count;
MOJOSHADER_effectAnnotation* annotations;
} MOJOSHADER_effectTechnique;
typedef struct MOJOSHADER_samplerStateRegister MOJOSHADER_samplerStateRegister;
typedef struct MOJOSHADER_effectShader
{
MOJOSHADER_symbolType type;
unsigned int technique;
unsigned int pass;
unsigned int is_preshader;
unsigned int preshader_param_count;
unsigned int *preshader_params;
unsigned int param_count;
unsigned int *params;
unsigned int sampler_count;
MOJOSHADER_samplerStateRegister *samplers;
MOJOSHADERNAMELESS union
{
void *shader;
const MOJOSHADER_preshader *preshader;
};
} MOJOSHADER_effectShader;
typedef struct MOJOSHADER_effectSamplerMap
{
MOJOSHADER_symbolType type;
const char *name;
} MOJOSHADER_effectSamplerMap;
typedef struct MOJOSHADER_effectString
{
MOJOSHADER_symbolType type;
const char *string;
} MOJOSHADER_effectString;
typedef struct MOJOSHADER_effectTexture
{
MOJOSHADER_symbolType type;
} MOJOSHADER_effectTexture;
typedef union MOJOSHADER_effectObject
{
MOJOSHADER_symbolType type;
MOJOSHADERNAMELESS union
{
MOJOSHADER_effectShader shader;
MOJOSHADER_effectSamplerMap mapping;
MOJOSHADER_effectString string;
MOJOSHADER_effectTexture texture;
};
} MOJOSHADER_effectObject;
struct MOJOSHADER_samplerStateRegister
{
const char *sampler_name;
unsigned int sampler_register;
unsigned int sampler_state_count;
const MOJOSHADER_effectSamplerState *sampler_states;
};
typedef struct MOJOSHADER_effectStateChanges
{
unsigned int render_state_change_count;
const MOJOSHADER_effectState *render_state_changes;
unsigned int sampler_state_change_count;
const MOJOSHADER_samplerStateRegister *sampler_state_changes;
unsigned int vertex_sampler_state_change_count;
const MOJOSHADER_samplerStateRegister *vertex_sampler_state_changes;
} MOJOSHADER_effectStateChanges;
typedef void* (MOJOSHADERCALL * MOJOSHADER_compileShaderFunc)(
const char *mainfn,
const unsigned char *tokenbuf,
const unsigned int bufsize,
const MOJOSHADER_swizzle *swiz,
const unsigned int swizcount,
const MOJOSHADER_samplerMap *smap,
const unsigned int smapcount
);
typedef void (MOJOSHADERCALL * MOJOSHADER_shaderAddRefFunc)(void* shader);
typedef void (MOJOSHADERCALL * MOJOSHADER_deleteShaderFunc)(void* shader);
typedef MOJOSHADER_parseData* (MOJOSHADERCALL * MOJOSHADER_getParseDataFunc)(
void *shader
);
typedef void (MOJOSHADERCALL * MOJOSHADER_bindShadersFunc)(
void *vshader,
void *pshader
);
typedef void (MOJOSHADERCALL * MOJOSHADER_getBoundShadersFunc)(
void **vshader,
void **pshader
);
typedef void (MOJOSHADERCALL * MOJOSHADER_mapUniformBufferMemoryFunc)(
float **vsf, int **vsi, unsigned char **vsb,
float **psf, int **psi, unsigned char **psb
);
typedef void (MOJOSHADERCALL * MOJOSHADER_unmapUniformBufferMemoryFunc)();
typedef const char* (MOJOSHADERCALL * MOJOSHADER_getErrorFunc)();
typedef struct MOJOSHADER_effectShaderContext
{
MOJOSHADER_compileShaderFunc compileShader;
MOJOSHADER_shaderAddRefFunc shaderAddRef;
MOJOSHADER_deleteShaderFunc deleteShader;
MOJOSHADER_getParseDataFunc getParseData;
MOJOSHADER_bindShadersFunc bindShaders;
MOJOSHADER_getBoundShadersFunc getBoundShaders;
MOJOSHADER_mapUniformBufferMemoryFunc mapUniformBufferMemory;
MOJOSHADER_unmapUniformBufferMemoryFunc unmapUniformBufferMemory;
MOJOSHADER_getErrorFunc getError;
MOJOSHADER_malloc m;
MOJOSHADER_free f;
void *malloc_data;
} MOJOSHADER_effectShaderContext;
typedef struct MOJOSHADER_effect
{
int error_count;
MOJOSHADER_error *errors;
int param_count;
MOJOSHADER_effectParam *params;
int technique_count;
MOJOSHADER_effectTechnique *techniques;
int object_count;
MOJOSHADER_effectObject *objects;
const MOJOSHADER_effectTechnique *current_technique;
int current_pass;
int restore_shader_state;
MOJOSHADER_effectStateChanges *state_changes;
MOJOSHADER_effectShader *current_vert_raw;
MOJOSHADER_effectShader *current_pixl_raw;
void *current_vert;
void *current_pixl;
void *prev_vertex_shader;
void *prev_pixel_shader;
MOJOSHADER_effectShaderContext ctx;
} MOJOSHADER_effect;
DECLSPEC MOJOSHADER_effect *MOJOSHADER_compileEffect(const unsigned char *tokenbuf,
const unsigned int bufsize,
const MOJOSHADER_swizzle *swiz,
const unsigned int swizcount,
const MOJOSHADER_samplerMap *smap,
const unsigned int smapcount,
const MOJOSHADER_effectShaderContext *ctx);
DECLSPEC void MOJOSHADER_deleteEffect(const MOJOSHADER_effect *effect);
DECLSPEC MOJOSHADER_effect *MOJOSHADER_cloneEffect(const MOJOSHADER_effect *effect);
DECLSPEC void MOJOSHADER_effectSetRawValueHandle(const MOJOSHADER_effectParam *parameter,
const void *data,
const unsigned int offset,
const unsigned int len);
DECLSPEC void MOJOSHADER_effectSetRawValueName(const MOJOSHADER_effect *effect,
const char *name,
const void *data,
const unsigned int offset,
const unsigned int len);
DECLSPEC const MOJOSHADER_effectTechnique *MOJOSHADER_effectGetCurrentTechnique(const MOJOSHADER_effect *effect);
DECLSPEC void MOJOSHADER_effectSetTechnique(MOJOSHADER_effect *effect,
const MOJOSHADER_effectTechnique *technique);
DECLSPEC const MOJOSHADER_effectTechnique *MOJOSHADER_effectFindNextValidTechnique(const MOJOSHADER_effect *effect,
const MOJOSHADER_effectTechnique *technique);
DECLSPEC void MOJOSHADER_effectBegin(MOJOSHADER_effect *effect,
unsigned int *numPasses,
int saveShaderState,
MOJOSHADER_effectStateChanges *stateChanges);
DECLSPEC void MOJOSHADER_effectBeginPass(MOJOSHADER_effect *effect,
unsigned int pass);
DECLSPEC void MOJOSHADER_effectCommitChanges(MOJOSHADER_effect *effect);
DECLSPEC void MOJOSHADER_effectEndPass(MOJOSHADER_effect *effect);
DECLSPEC void MOJOSHADER_effectEnd(MOJOSHADER_effect *effect);
DECLSPEC void *MOJOSHADER_mtlCompileLibrary(MOJOSHADER_effect *effect);
DECLSPEC void MOJOSHADER_mtlDeleteLibrary(void *library);
#endif
#endif