mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-01-13 12:11:50 +00:00
wip
This commit is contained in:
@@ -1091,6 +1091,50 @@ namespace T5
|
||||
GfxStateBits* stateBitsTable;
|
||||
};
|
||||
|
||||
enum MaterialStreamStreamSource_e
|
||||
{
|
||||
STREAM_SRC_POSITION = 0x0,
|
||||
STREAM_SRC_COLOR = 0x1,
|
||||
STREAM_SRC_TEXCOORD_0 = 0x2,
|
||||
STREAM_SRC_NORMAL = 0x3,
|
||||
STREAM_SRC_TANGENT = 0x4,
|
||||
STREAM_SRC_OPTIONAL_BEGIN = 0x5,
|
||||
STREAM_SRC_PRE_OPTIONAL_BEGIN = 0x4,
|
||||
STREAM_SRC_TEXCOORD_1 = 0x5,
|
||||
STREAM_SRC_TEXCOORD_2 = 0x6,
|
||||
STREAM_SRC_NORMAL_TRANSFORM_0 = 0x7,
|
||||
STREAM_SRC_NORMAL_TRANSFORM_1 = 0x8,
|
||||
STREAM_SRC_BLEND_WEIGHT = 0x9,
|
||||
|
||||
STREAM_SRC_COUNT
|
||||
};
|
||||
|
||||
enum MaterialStreamDestination_e
|
||||
{
|
||||
STREAM_DST_POSITION = 0x0,
|
||||
STREAM_DST_NORMAL = 0x1,
|
||||
STREAM_DST_COLOR_0 = 0x2,
|
||||
STREAM_DST_COLOR_1 = 0x3,
|
||||
STREAM_DST_DEPTH = 0x4,
|
||||
STREAM_DST_TEXCOORD_0 = 0x5,
|
||||
STREAM_DST_TEXCOORD_1 = 0x6,
|
||||
STREAM_DST_TEXCOORD_2 = 0x7,
|
||||
STREAM_DST_TEXCOORD_3 = 0x8,
|
||||
STREAM_DST_TEXCOORD_4 = 0x9,
|
||||
STREAM_DST_TEXCOORD_5 = 0xA,
|
||||
STREAM_DST_TEXCOORD_6 = 0xB,
|
||||
STREAM_DST_TEXCOORD_7 = 0xC,
|
||||
STREAM_DST_TEXCOORD_8 = 0xD,
|
||||
STREAM_DST_TEXCOORD_9 = 0xE,
|
||||
STREAM_DST_TEXCOORD_10 = 0xF,
|
||||
STREAM_DST_TEXCOORD_11 = 0x10,
|
||||
STREAM_DST_TEXCOORD_12 = 0x11,
|
||||
STREAM_DST_TEXCOORD_13 = 0x12,
|
||||
STREAM_DST_BLENDWEIGHT = 0x13,
|
||||
|
||||
STREAM_DST_COUNT
|
||||
};
|
||||
|
||||
struct MaterialStreamRouting
|
||||
{
|
||||
char source;
|
||||
@@ -1147,6 +1191,312 @@ namespace T5
|
||||
MaterialPixelShaderProgram prog;
|
||||
};
|
||||
|
||||
enum MaterialConstantSource
|
||||
{
|
||||
CONST_SRC_CODE_MAYBE_DIRTY_PS_BEGIN = 0x0,
|
||||
|
||||
CONST_SRC_CODE_LIGHT_POSITION = 0x0,
|
||||
CONST_SRC_CODE_LIGHT_DIFFUSE = 0x1,
|
||||
CONST_SRC_CODE_LIGHT_SPECULAR = 0x2,
|
||||
CONST_SRC_CODE_LIGHT_SPOTDIR = 0x3,
|
||||
CONST_SRC_CODE_LIGHT_SPOTFACTORS = 0x4,
|
||||
CONST_SRC_CODE_LIGHT_ATTENUATION = 0x5,
|
||||
CONST_SRC_CODE_LIGHT_FALLOFF_A = 0x6,
|
||||
CONST_SRC_CODE_LIGHT_FALLOFF_B = 0x7,
|
||||
CONST_SRC_CODE_LIGHT_SPOT_MATRIX0 = 0x8,
|
||||
CONST_SRC_CODE_LIGHT_SPOT_MATRIX1 = 0x9,
|
||||
CONST_SRC_CODE_LIGHT_SPOT_MATRIX2 = 0xA,
|
||||
CONST_SRC_CODE_LIGHT_SPOT_MATRIX3 = 0xB,
|
||||
CONST_SRC_CODE_LIGHT_SPOT_AABB = 0xC,
|
||||
CONST_SRC_CODE_LIGHT_CONE_CONTROL1 = 0xD,
|
||||
CONST_SRC_CODE_LIGHT_CONE_CONTROL2 = 0xE,
|
||||
CONST_SRC_CODE_LIGHT_SPOT_COOKIE_SLIDE_CONTROL = 0xF,
|
||||
CONST_SRC_CODE_NEARPLANE_ORG = 0x10,
|
||||
CONST_SRC_CODE_NEARPLANE_DX = 0x11,
|
||||
CONST_SRC_CODE_NEARPLANE_DY = 0x12,
|
||||
CONST_SRC_CODE_SHADOW_PARMS = 0x13,
|
||||
CONST_SRC_CODE_SHADOWMAP_POLYGON_OFFSET = 0x14,
|
||||
CONST_SRC_CODE_RENDER_TARGET_SIZE = 0x15,
|
||||
CONST_SRC_CODE_VPOSX_TO_WORLD = 0x16,
|
||||
CONST_SRC_CODE_VPOSY_TO_WORLD = 0x17,
|
||||
CONST_SRC_CODE_VPOS1_TO_WORLD = 0x18,
|
||||
CONST_SRC_CODE_LIGHT_FALLOFF_PLACEMENT = 0x19,
|
||||
CONST_SRC_CODE_DOF_EQUATION_VIEWMODEL_AND_FAR_BLUR = 0x1A,
|
||||
CONST_SRC_CODE_DOF_EQUATION_SCENE = 0x1B,
|
||||
CONST_SRC_CODE_DOF_LERP_SCALE = 0x1C,
|
||||
CONST_SRC_CODE_DOF_LERP_BIAS = 0x1D,
|
||||
CONST_SRC_CODE_DOF_ROW_DELTA = 0x1E,
|
||||
CONST_SRC_CODE_PARTICLE_CLOUD_COLOR = 0x1F,
|
||||
CONST_SRC_CODE_GAMETIME = 0x20,
|
||||
CONST_SRC_CODE_ALPHA_FADE = 0x21,
|
||||
|
||||
CONST_SRC_CODE_MAYBE_DIRTY_PS_END = 0x22,
|
||||
CONST_SRC_CODE_ALWAYS_DIRTY_PS_BEGIN = 0x22,
|
||||
|
||||
CONST_SRC_CODE_PIXEL_COST_FRACS = 0x22,
|
||||
CONST_SRC_CODE_PIXEL_COST_DECODE = 0x23,
|
||||
CONST_SRC_CODE_FILTER_TAP_0 = 0x24,
|
||||
CONST_SRC_CODE_FILTER_TAP_1 = 0x25,
|
||||
CONST_SRC_CODE_FILTER_TAP_2 = 0x26,
|
||||
CONST_SRC_CODE_FILTER_TAP_3 = 0x27,
|
||||
CONST_SRC_CODE_FILTER_TAP_4 = 0x28,
|
||||
CONST_SRC_CODE_FILTER_TAP_5 = 0x29,
|
||||
CONST_SRC_CODE_FILTER_TAP_6 = 0x2A,
|
||||
CONST_SRC_CODE_FILTER_TAP_7 = 0x2B,
|
||||
CONST_SRC_CODE_COLOR_MATRIX_R = 0x2C,
|
||||
CONST_SRC_CODE_COLOR_MATRIX_G = 0x2D,
|
||||
CONST_SRC_CODE_COLOR_MATRIX_B = 0x2E,
|
||||
|
||||
CONST_SRC_CODE_ALWAYS_DIRTY_PS_END = 0x2F,
|
||||
CONST_SRC_CODE_NEVER_DIRTY_PS_BEGIN = 0x2F,
|
||||
|
||||
CONST_SRC_CODE_SHADOWMAP_SWITCH_PARTITION = 0x2F,
|
||||
CONST_SRC_CODE_SHADOWMAP_SCALE = 0x30,
|
||||
CONST_SRC_CODE_ZNEAR = 0x31,
|
||||
CONST_SRC_CODE_SUN_POSITION = 0x32,
|
||||
CONST_SRC_CODE_SUN_DIFFUSE = 0x33,
|
||||
CONST_SRC_CODE_SUN_SPECULAR = 0x34,
|
||||
CONST_SRC_CODE_LIGHTING_LOOKUP_SCALE = 0x35,
|
||||
CONST_SRC_CODE_DEBUG_BUMPMAP = 0x36,
|
||||
CONST_SRC_CODE_MATERIAL_COLOR = 0x37,
|
||||
CONST_SRC_CODE_FOG = 0x38,
|
||||
CONST_SRC_CODE_FOG2 = 0x39,
|
||||
CONST_SRC_CODE_FOG_COLOR = 0x3A,
|
||||
CONST_SRC_CODE_SUN_FOG = 0x3B,
|
||||
CONST_SRC_CODE_SUN_FOG_DIR = 0x3C,
|
||||
CONST_SRC_CODE_SUN_FOG_COLOR = 0x3D,
|
||||
CONST_SRC_CODE_GLOW_SETUP = 0x3E,
|
||||
CONST_SRC_CODE_GLOW_APPLY = 0x3F,
|
||||
CONST_SRC_CODE_COLOR_BIAS = 0x40,
|
||||
CONST_SRC_CODE_COLOR_TINT_BASE = 0x41,
|
||||
CONST_SRC_CODE_COLOR_TINT_DELTA = 0x42,
|
||||
CONST_SRC_CODE_OUTDOOR_FEATHER_PARMS = 0x43,
|
||||
CONST_SRC_CODE_SKY_TRANSITION = 0x44,
|
||||
CONST_SRC_CODE_ENVMAP_PARMS = 0x45,
|
||||
CONST_SRC_CODE_SPOT_SHADOWMAP_PIXEL_ADJUST = 0x46,
|
||||
CONST_SRC_CODE_DLIGHT_SPOT_SHADOWMAP_PIXEL_ADJUST = 0x47,
|
||||
CONST_SRC_CODE_CLIP_SPACE_LOOKUP_SCALE = 0x48,
|
||||
CONST_SRC_CODE_CLIP_SPACE_LOOKUP_OFFSET = 0x49,
|
||||
CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX = 0x4A,
|
||||
CONST_SRC_CODE_DEPTH_FROM_CLIP = 0x4B,
|
||||
CONST_SRC_CODE_CODE_MESH_ARG_0 = 0x4C,
|
||||
CONST_SRC_CODE_CODE_MESH_ARG_1 = 0x4D,
|
||||
|
||||
CONST_SRC_CODE_CODE_MESH_ARG_LAST = 0x4D,
|
||||
|
||||
CONST_SRC_CODE_BASE_LIGHTING_COORDS = 0x4E,
|
||||
CONST_SRC_CODE_WIND_DIRECTION = 0x4F,
|
||||
CONST_SRC_CODE_WATER_PARMS = 0x50,
|
||||
CONST_SRC_CODE_GRASS_PARMS = 0x51,
|
||||
CONST_SRC_CODE_GRASS_FORCE0 = 0x52,
|
||||
CONST_SRC_CODE_GRASS_FORCE1 = 0x53,
|
||||
CONST_SRC_CODE_GRASS_WIND_FORCE0 = 0x54,
|
||||
CONST_SRC_CODE_MOTIONBLUR_DIRECTION_AND_MAGNITUDE = 0x55,
|
||||
CONST_SRC_CODE_COMPOSITE_FX_DISTORTION = 0x56,
|
||||
CONST_SRC_CODE_GLOW_BLOOM_SCALE = 0x57,
|
||||
CONST_SRC_CODE_COMPOSITE_FX_OVERLAY_TEXCOORD = 0x58,
|
||||
CONST_SRC_CODE_COLOR_BIAS1 = 0x59,
|
||||
CONST_SRC_CODE_COLOR_TINT_BASE1 = 0x5A,
|
||||
CONST_SRC_CODE_COLOR_TINT_DELTA1 = 0x5B,
|
||||
CONST_SRC_CODE_POSTFX_FADE_EFFECT = 0x5C,
|
||||
CONST_SRC_CODE_VIEWPORT_DIMENSIONS = 0x5D,
|
||||
CONST_SRC_CODE_FRAMEBUFFER_READ = 0x5E,
|
||||
CONST_SRC_CODE_RESIZE_PARAMS1 = 0x5F,
|
||||
CONST_SRC_CODE_RESIZE_PARAMS2 = 0x60,
|
||||
CONST_SRC_CODE_RESIZE_PARAMS3 = 0x61,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_0 = 0x62,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_1 = 0x63,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_2 = 0x64,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_3 = 0x65,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_4 = 0x66,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_5 = 0x67,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_6 = 0x68,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_7 = 0x69,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_8 = 0x6A,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_9 = 0x6B,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_10 = 0x6C,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_11 = 0x6D,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_12 = 0x6E,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_13 = 0x6F,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_14 = 0x70,
|
||||
CONST_SRC_CODE_VARIANT_WIND_SPRING_15 = 0x71,
|
||||
CONST_SRC_CODE_DESTRUCTIBLE_PARMS = 0x72,
|
||||
CONST_SRC_CODE_CLOUD_WORLD_AREA = 0x73,
|
||||
CONST_SRC_CODE_WATER_SCROLL = 0x74,
|
||||
CONST_SRC_CODE_CROSSFADE_PARMS = 0x75,
|
||||
CONST_SRC_CODE_CHARACTER_CHARRED_AMOUNT = 0x76,
|
||||
CONST_SRC_CODE_TREECANOPY_PARMS = 0x77,
|
||||
CONST_SRC_CODE_MARKS_HIT_NORMAL = 0x78,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL0 = 0x79,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL1 = 0x7A,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL2 = 0x7B,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL3 = 0x7C,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL4 = 0x7D,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL5 = 0x7E,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL6 = 0x7F,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL7 = 0x80,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL8 = 0x81,
|
||||
CONST_SRC_CODE_POSTFX_CONTROL9 = 0x82,
|
||||
CONST_SRC_CODE_POSTFX_CONTROLA = 0x83,
|
||||
CONST_SRC_CODE_POSTFX_CONTROLB = 0x84,
|
||||
CONST_SRC_CODE_POSTFX_CONTROLC = 0x85,
|
||||
CONST_SRC_CODE_POSTFX_CONTROLD = 0x86,
|
||||
CONST_SRC_CODE_POSTFX_CONTROLE = 0x87,
|
||||
CONST_SRC_CODE_POSTFX_CONTROLF = 0x88,
|
||||
CONST_SRC_CODE_HDRCONTROL_0 = 0x89,
|
||||
CONST_SRC_CODE_HDRCONTROL_1 = 0x8A,
|
||||
CONST_SRC_CODE_GLIGHT_POSXS = 0x8B,
|
||||
CONST_SRC_CODE_GLIGHT_POSYS = 0x8C,
|
||||
CONST_SRC_CODE_GLIGHT_POSZS = 0x8D,
|
||||
CONST_SRC_CODE_GLIGHT_FALLOFFS = 0x8E,
|
||||
CONST_SRC_CODE_GLIGHT_REDS = 0x8F,
|
||||
CONST_SRC_CODE_GLIGHT_GREENS = 0x90,
|
||||
CONST_SRC_CODE_GLIGHT_BLUES = 0x91,
|
||||
CONST_SRC_CODE_DLIGHT_POSITION = 0x92,
|
||||
CONST_SRC_CODE_DLIGHT_DIFFUSE = 0x93,
|
||||
CONST_SRC_CODE_DLIGHT_SPECULAR = 0x94,
|
||||
CONST_SRC_CODE_DLIGHT_ATTENUATION = 0x95,
|
||||
CONST_SRC_CODE_DLIGHT_FALLOFF = 0x96,
|
||||
CONST_SRC_CODE_DLIGHT_SPOT_MATRIX_0 = 0x97,
|
||||
CONST_SRC_CODE_DLIGHT_SPOT_MATRIX_1 = 0x98,
|
||||
CONST_SRC_CODE_DLIGHT_SPOT_MATRIX_2 = 0x99,
|
||||
CONST_SRC_CODE_DLIGHT_SPOT_MATRIX_3 = 0x9A,
|
||||
CONST_SRC_CODE_DLIGHT_SPOT_DIR = 0x9B,
|
||||
CONST_SRC_CODE_DLIGHT_SPOT_FACTORS = 0x9C,
|
||||
CONST_SRC_CODE_DLIGHT_SHADOW_LOOKUP_MATRIX_0 = 0x9D,
|
||||
CONST_SRC_CODE_DLIGHT_SHADOW_LOOKUP_MATRIX_1 = 0x9E,
|
||||
CONST_SRC_CODE_DLIGHT_SHADOW_LOOKUP_MATRIX_2 = 0x9F,
|
||||
CONST_SRC_CODE_DLIGHT_SHADOW_LOOKUP_MATRIX_3 = 0xA0,
|
||||
CONST_SRC_CODE_CLOUD_LAYER_CONTROL0 = 0xA1,
|
||||
CONST_SRC_CODE_CLOUD_LAYER_CONTROL1 = 0xA2,
|
||||
CONST_SRC_CODE_CLOUD_LAYER_CONTROL2 = 0xA3,
|
||||
CONST_SRC_CODE_CLOUD_LAYER_CONTROL3 = 0xA4,
|
||||
CONST_SRC_CODE_CLOUD_LAYER_CONTROL4 = 0xA5,
|
||||
CONST_SRC_CODE_HERO_LIGHTING_R = 0xA6,
|
||||
CONST_SRC_CODE_HERO_LIGHTING_G = 0xA7,
|
||||
CONST_SRC_CODE_HERO_LIGHTING_B = 0xA8,
|
||||
CONST_SRC_CODE_LIGHT_HERO_SCALE = 0xA9,
|
||||
CONST_SRC_CODE_CINEMATIC_BLUR_BOX = 0xAA,
|
||||
CONST_SRC_CODE_CINEMATIC_BLUR_BOX2 = 0xAB,
|
||||
CONST_SRC_CODE_ADSZSCALE = 0xAC,
|
||||
CONST_SRC_CODE_UI3D_UV_SETUP_0 = 0xAD,
|
||||
CONST_SRC_CODE_UI3D_UV_SETUP_1 = 0xAE,
|
||||
CONST_SRC_CODE_UI3D_UV_SETUP_2 = 0xAF,
|
||||
CONST_SRC_CODE_UI3D_UV_SETUP_3 = 0xB0,
|
||||
CONST_SRC_CODE_UI3D_UV_SETUP_4 = 0xB1,
|
||||
CONST_SRC_CODE_UI3D_UV_SETUP_5 = 0xB2,
|
||||
CONST_SRC_CODE_CHARACTER_DISSOLVE_COLOR = 0xB3,
|
||||
CONST_SRC_CODE_CAMERA_LOOK = 0xB4,
|
||||
CONST_SRC_CODE_CAMERA_UP = 0xB5,
|
||||
CONST_SRC_CODE_CAMERA_SIDE = 0xB6,
|
||||
CONST_SRC_CODE_GENERIC_PARAM0 = 0xB7,
|
||||
CONST_SRC_CODE_GENERIC_PARAM1 = 0xB8,
|
||||
CONST_SRC_CODE_GENERIC_PARAM2 = 0xB9,
|
||||
CONST_SRC_CODE_GENERIC_PARAM3 = 0xBA,
|
||||
CONST_SRC_CODE_GENERIC_PARAM4 = 0xBB,
|
||||
CONST_SRC_CODE_GENERIC_PARAM5 = 0xBC,
|
||||
CONST_SRC_CODE_GENERIC_PARAM6 = 0xBD,
|
||||
CONST_SRC_CODE_GENERIC_PARAM7 = 0xBE,
|
||||
CONST_SRC_CODE_EYEOFFSET = 0xBF,
|
||||
CONST_SRC_CODE_CUSTOMWIND_CENTER = 0xC0,
|
||||
CONST_SRC_CODE_CUSTOMWIND_SPRING = 0xC1,
|
||||
CONST_SRC_CODE_SKY_COLOR_MULTIPLIER = 0xC2,
|
||||
CONST_SRC_CODE_EXTRA_CAM_PARAM = 0xC3,
|
||||
CONST_SRC_CODE_EMBLEM_LUT_SELECTOR = 0xC4,
|
||||
|
||||
CONST_SRC_CODE_NEVER_DIRTY_PS_END = 0xC5,
|
||||
CONST_SRC_CODE_COUNT_FLOAT4 = 0xC5,
|
||||
CONST_SRC_FIRST_CODE_MATRIX = 0xC5,
|
||||
|
||||
CONST_SRC_CODE_WORLD_MATRIX = 0xC5,
|
||||
CONST_SRC_CODE_INVERSE_WORLD_MATRIX = 0xC6,
|
||||
CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX = 0xC7,
|
||||
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX = 0xC8,
|
||||
CONST_SRC_CODE_VIEW_MATRIX = 0xC9,
|
||||
CONST_SRC_CODE_INVERSE_VIEW_MATRIX = 0xCA,
|
||||
CONST_SRC_CODE_TRANSPOSE_VIEW_MATRIX = 0xCB,
|
||||
CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_MATRIX = 0xCC,
|
||||
CONST_SRC_CODE_PROJECTION_MATRIX = 0xCD,
|
||||
CONST_SRC_CODE_INVERSE_PROJECTION_MATRIX = 0xCE,
|
||||
CONST_SRC_CODE_TRANSPOSE_PROJECTION_MATRIX = 0xCF,
|
||||
CONST_SRC_CODE_INVERSE_TRANSPOSE_PROJECTION_MATRIX = 0xD0,
|
||||
CONST_SRC_CODE_WORLD_VIEW_MATRIX = 0xD1,
|
||||
CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX = 0xD2,
|
||||
CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX = 0xD3,
|
||||
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX = 0xD4,
|
||||
CONST_SRC_CODE_VIEW_PROJECTION_MATRIX = 0xD5,
|
||||
CONST_SRC_CODE_INVERSE_VIEW_PROJECTION_MATRIX = 0xD6,
|
||||
CONST_SRC_CODE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0xD7,
|
||||
CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0xD8,
|
||||
CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX = 0xD9,
|
||||
CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX = 0xDA,
|
||||
CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX = 0xDB,
|
||||
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX = 0xDC,
|
||||
CONST_SRC_CODE_SHADOW_LOOKUP_MATRIX = 0xDD,
|
||||
CONST_SRC_CODE_INVERSE_SHADOW_LOOKUP_MATRIX = 0xDE,
|
||||
CONST_SRC_CODE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0xDF,
|
||||
CONST_SRC_CODE_INVERSE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0xE0,
|
||||
CONST_SRC_CODE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0xE1,
|
||||
CONST_SRC_CODE_INVERSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0xE2,
|
||||
CONST_SRC_CODE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0xE3,
|
||||
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0xE4,
|
||||
|
||||
CONST_SRC_TOTAL_COUNT,
|
||||
CONST_SRC_NONE
|
||||
};
|
||||
|
||||
enum MaterialTextureSource
|
||||
{
|
||||
TEXTURE_SRC_CODE_BLACK = 0x0,
|
||||
TEXTURE_SRC_CODE_WHITE = 0x1,
|
||||
TEXTURE_SRC_CODE_IDENTITY_NORMAL_MAP = 0x2,
|
||||
TEXTURE_SRC_CODE_MODEL_LIGHTING = 0x3,
|
||||
TEXTURE_SRC_CODE_LIGHTMAP_PRIMARY = 0x4,
|
||||
TEXTURE_SRC_CODE_LIGHTMAP_SECONDARY = 0x5,
|
||||
TEXTURE_SRC_CODE_SHADOWMAP_SUN = 0x6,
|
||||
TEXTURE_SRC_CODE_SHADOWMAP_SPOT = 0x7,
|
||||
TEXTURE_SRC_CODE_FEEDBACK = 0x8,
|
||||
TEXTURE_SRC_CODE_RESOLVED_POST_SUN = 0x9,
|
||||
TEXTURE_SRC_CODE_RESOLVED_SCENE = 0xA,
|
||||
TEXTURE_SRC_CODE_POST_EFFECT_SRC = 0xB,
|
||||
TEXTURE_SRC_CODE_POST_EFFECT_GODRAYS = 0xC,
|
||||
TEXTURE_SRC_CODE_POST_EFFECT_0 = 0xD,
|
||||
TEXTURE_SRC_CODE_POST_EFFECT_1 = 0xE,
|
||||
TEXTURE_SRC_CODE_SKY = 0xF,
|
||||
TEXTURE_SRC_CODE_LIGHT_ATTENUATION = 0x10,
|
||||
TEXTURE_SRC_CODE_DLIGHT_ATTENUATION = 0x11,
|
||||
TEXTURE_SRC_CODE_OUTDOOR = 0x12,
|
||||
TEXTURE_SRC_CODE_FLOATZ = 0x13,
|
||||
TEXTURE_SRC_CODE_PROCESSED_FLOATZ = 0x14,
|
||||
TEXTURE_SRC_CODE_RAW_FLOATZ = 0x15,
|
||||
TEXTURE_SRC_CODE_CASE_TEXTURE = 0x16,
|
||||
TEXTURE_SRC_CODE_CINEMATIC_Y = 0x17,
|
||||
TEXTURE_SRC_CODE_CINEMATIC_CR = 0x18,
|
||||
TEXTURE_SRC_CODE_CINEMATIC_CB = 0x19,
|
||||
TEXTURE_SRC_CODE_CINEMATIC_A = 0x1A,
|
||||
TEXTURE_SRC_CODE_REFLECTION_PROBE = 0x1B,
|
||||
TEXTURE_SRC_CODE_FEATHER_FLOAT_Z = 0x1C,
|
||||
TEXTURE_SRC_CODE_TERRAIN_SCORCH_TEXTURE_0 = 0x1D,
|
||||
TEXTURE_SRC_CODE_TERRAIN_SCORCH_TEXTURE_1 = 0x1E,
|
||||
TEXTURE_SRC_CODE_TERRAIN_SCORCH_TEXTURE_2 = 0x1F,
|
||||
TEXTURE_SRC_CODE_TERRAIN_SCORCH_TEXTURE_3 = 0x20,
|
||||
|
||||
TEXTURE_SRC_CODE_TERRAIN_SCORCH_TEXTURE_LAST = 0x20,
|
||||
|
||||
TEXTURE_SRC_CODE_LIGHTMAP_SECONDARYB = 0x21,
|
||||
TEXTURE_SRC_CODE_TEXTURE_0 = 0x22,
|
||||
TEXTURE_SRC_CODE_TEXTURE_1 = 0x23,
|
||||
TEXTURE_SRC_CODE_TEXTURE_2 = 0x24,
|
||||
TEXTURE_SRC_CODE_TEXTURE_3 = 0x25,
|
||||
TEXTURE_SRC_CODE_IMPACT_MASK = 0x26,
|
||||
TEXTURE_SRC_CODE_UI3D = 0x27,
|
||||
TEXTURE_SRC_CODE_MISSILE_CAM = 0x28,
|
||||
TEXTURE_SRC_CODE_COMPOSITE_RESULT = 0x29,
|
||||
TEXTURE_SRC_CODE_HEATMAP = 0x2A,
|
||||
|
||||
TEXTURE_SRC_CODE_COUNT
|
||||
};
|
||||
|
||||
struct MaterialArgumentCodeConst
|
||||
{
|
||||
uint16_t index;
|
||||
@@ -1185,15 +1535,32 @@ namespace T5
|
||||
MaterialArgumentDef u;
|
||||
};
|
||||
|
||||
enum MaterialType : unsigned char
|
||||
{
|
||||
MTL_TYPE_DEFAULT = 0x0,
|
||||
MTL_TYPE_MODEL,
|
||||
MTL_TYPE_MODEL_VERTCOL,
|
||||
MTL_TYPE_WORLD,
|
||||
MTL_TYPE_WORLD_VERTCOL,
|
||||
|
||||
MTL_TYPE_COUNT
|
||||
};
|
||||
|
||||
struct MaterialTypeInfo
|
||||
{
|
||||
const char* materialPrefix;
|
||||
const char* techniqueSetPrefix;
|
||||
};
|
||||
|
||||
struct MaterialPass
|
||||
{
|
||||
MaterialVertexDeclaration* vertexDecl;
|
||||
MaterialVertexShader* vertexShader;
|
||||
MaterialPixelShader* pixelShader;
|
||||
char perPrimArgCount;
|
||||
char perObjArgCount;
|
||||
char stableArgCount;
|
||||
char customSamplerFlags;
|
||||
unsigned char perPrimArgCount;
|
||||
unsigned char perObjArgCount;
|
||||
unsigned char stableArgCount;
|
||||
unsigned char customSamplerFlags;
|
||||
MaterialShaderArgument* args;
|
||||
};
|
||||
|
||||
@@ -1205,6 +1572,154 @@ namespace T5
|
||||
MaterialPass passArray[1];
|
||||
};
|
||||
|
||||
enum MaterialTechniqueType
|
||||
{
|
||||
TECHNIQUE_DEPTH_PREPASS = 0x0,
|
||||
TECHNIQUE_BUILD_FLOAT_Z = 0x1,
|
||||
TECHNIQUE_BUILD_SHADOWMAP_DEPTH = 0x2,
|
||||
TECHNIQUE_BUILD_SHADOWMAP_COLOR = 0x3,
|
||||
TECHNIQUE_UNLIT = 0x4,
|
||||
TECHNIQUE_EMISSIVE = 0x5,
|
||||
TECHNIQUE_EMISSIVE_SHADOW = 0x6,
|
||||
TECHNIQUE_EMISSIVE_NV_INTZ = 0x7,
|
||||
TECHNIQUE_EMISSIVE_SHADOW_NV_INTZ = 0x8,
|
||||
TECHNIQUE_EMISSIVE_REFLECTED = 0x9,
|
||||
|
||||
TECHNIQUE_LIT_BEGIN = 0xA,
|
||||
|
||||
TECHNIQUE_LIT = 0xA,
|
||||
TECHNIQUE_LIT_SUN = 0xB,
|
||||
TECHNIQUE_LIT_SUN_SHADOW = 0xC,
|
||||
TECHNIQUE_LIT_SPOT = 0xD,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW = 0xE,
|
||||
TECHNIQUE_LIT_OMNI = 0xF,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW = 0x10,
|
||||
TECHNIQUE_LIT_DLIGHT = 0x11,
|
||||
TECHNIQUE_LIT_SUN_DLIGHT = 0x12,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_DLIGHT = 0x13,
|
||||
TECHNIQUE_LIT_SPOT_DLIGHT = 0x14,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_DLIGHT = 0x15,
|
||||
TECHNIQUE_LIT_OMNI_DLIGHT = 0x16,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_DLIGHT = 0x17,
|
||||
TECHNIQUE_LIT_GLIGHT = 0x18,
|
||||
TECHNIQUE_LIT_SUN_GLIGHT = 0x19,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_GLIGHT = 0x1A,
|
||||
TECHNIQUE_LIT_SPOT_GLIGHT = 0x1B,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_GLIGHT = 0x1C,
|
||||
TECHNIQUE_LIT_OMNI_GLIGHT = 0x1D,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_GLIGHT = 0x1E,
|
||||
TECHNIQUE_LIT_DLIGHT_GLIGHT = 0x1F,
|
||||
TECHNIQUE_LIT_SUN_DLIGHT_GLIGHT = 0x20,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_DLIGHT_GLIGHT = 0x21,
|
||||
TECHNIQUE_LIT_SPOT_DLIGHT_GLIGHT = 0x22,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_DLIGHT_GLIGHT = 0x23,
|
||||
TECHNIQUE_LIT_OMNI_DLIGHT_GLIGHT = 0x24,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_DLIGHT_GLIGHT = 0x25,
|
||||
TECHNIQUE_LIT_ALPHA = 0x26,
|
||||
TECHNIQUE_LIT_SUN_ALPHA = 0x27,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_ALPHA = 0x28,
|
||||
TECHNIQUE_LIT_SPOT_ALPHA = 0x29,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_ALPHA = 0x2A,
|
||||
TECHNIQUE_LIT_OMNI_ALPHA = 0x2B,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_ALPHA = 0x2C,
|
||||
TECHNIQUE_LIT_REMAP = 0x2D,
|
||||
TECHNIQUE_LIT_SUN_REMAP = 0x2E,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_REMAP = 0x2F,
|
||||
TECHNIQUE_LIT_SPOT_REMAP = 0x30,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_REMAP = 0x31,
|
||||
TECHNIQUE_LIT_OMNI_REMAP = 0x32,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_REMAP = 0x33,
|
||||
TECHNIQUE_LIT_NO_HDR_SUPPORT = 0x34,
|
||||
TECHNIQUE_LIT_FADE = 0x34,
|
||||
TECHNIQUE_LIT_SUN_FADE = 0x35,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_FADE = 0x36,
|
||||
TECHNIQUE_LIT_SPOT_FADE = 0x37,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_FADE = 0x38,
|
||||
TECHNIQUE_LIT_OMNI_FADE = 0x39,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_FADE = 0x3A,
|
||||
TECHNIQUE_LIT_CHARRED = 0x3B,
|
||||
TECHNIQUE_LIT_FADE_CHARRED = 0x3C,
|
||||
TECHNIQUE_LIT_SUN_CHARRED = 0x3D,
|
||||
TECHNIQUE_LIT_SUN_FADE_CHARRED = 0x3E,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_CHARRED = 0x3F,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_FADE_CHARRED = 0x40,
|
||||
TECHNIQUE_LIT_SPOT_CHARRED = 0x41,
|
||||
TECHNIQUE_LIT_SPOT_FADE_CHARRED = 0x42,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_CHARRED = 0x43,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_FADE_CHARRED = 0x44,
|
||||
TECHNIQUE_LIT_OMNI_CHARRED = 0x45,
|
||||
TECHNIQUE_LIT_OMNI_FADE_CHARRED = 0x46,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_CHARRED = 0x47,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_FADE_CHARRED = 0x48,
|
||||
TECHNIQUE_LIT_INSTANCED = 0x49,
|
||||
TECHNIQUE_LIT_INSTANCED_SUN = 0x4A,
|
||||
TECHNIQUE_LIT_INSTANCED_SUN_SHADOW = 0x4B,
|
||||
TECHNIQUE_LIT_INSTANCED_SPOT = 0x4C,
|
||||
TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW = 0x4D,
|
||||
TECHNIQUE_LIT_INSTANCED_OMNI = 0x4E,
|
||||
TECHNIQUE_LIT_INSTANCED_OMNI_SHADOW = 0x4F,
|
||||
|
||||
TECHNIQUE_LIT_NV_BEGIN = 0x50,
|
||||
|
||||
TECHNIQUE_LIT_NV_INTZ = 0x50,
|
||||
TECHNIQUE_LIT_SUN_NV_INTZ = 0x51,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_NV_INTZ = 0x52,
|
||||
TECHNIQUE_LIT_SPOT_NV_INTZ = 0x53,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_NV_INTZ = 0x54,
|
||||
TECHNIQUE_LIT_OMNI_NV_INTZ = 0x55,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_NV_INTZ = 0x56,
|
||||
TECHNIQUE_LIT_DLIGHT_NV_INTZ = 0x57,
|
||||
TECHNIQUE_LIT_SUN_DLIGHT_NV_INTZ = 0x58,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_DLIGHT_NV_INTZ = 0x59,
|
||||
TECHNIQUE_LIT_SPOT_DLIGHT_NV_INTZ = 0x5A,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_DLIGHT_NV_INTZ = 0x5B,
|
||||
TECHNIQUE_LIT_OMNI_DLIGHT_NV_INTZ = 0x5C,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_DLIGHT_NV_INTZ = 0x5D,
|
||||
TECHNIQUE_LIT_GLIGHT_NV_INTZ = 0x5E,
|
||||
TECHNIQUE_LIT_SUN_GLIGHT_NV_INTZ = 0x5F,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_GLIGHT_NV_INTZ = 0x60,
|
||||
TECHNIQUE_LIT_SPOT_GLIGHT_NV_INTZ = 0x61,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_GLIGHT_NV_INTZ = 0x62,
|
||||
TECHNIQUE_LIT_OMNI_GLIGHT_NV_INTZ = 0x63,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_GLIGHT_NV_INTZ = 0x64,
|
||||
TECHNIQUE_LIT_DLIGHT_GLIGHT_NV_INTZ = 0x65,
|
||||
TECHNIQUE_LIT_SUN_DLIGHT_GLIGHT_NV_INTZ = 0x66,
|
||||
TECHNIQUE_LIT_SUN_SHADOW_DLIGHT_GLIGHT_NV_INTZ = 0x67,
|
||||
TECHNIQUE_LIT_SPOT_DLIGHT_GLIGHT_NV_INTZ = 0x68,
|
||||
TECHNIQUE_LIT_SPOT_SHADOW_DLIGHT_GLIGHT_NV_INTZ = 0x69,
|
||||
TECHNIQUE_LIT_OMNI_DLIGHT_GLIGHT_NV_INTZ = 0x6A,
|
||||
TECHNIQUE_LIT_OMNI_SHADOW_DLIGHT_GLIGHT_NV_INTZ = 0x6B,
|
||||
TECHNIQUE_LIT_INSTANCED_NV_INTZ = 0x6C,
|
||||
TECHNIQUE_LIT_INSTANCED_SUN_NV_INTZ = 0x6D,
|
||||
TECHNIQUE_LIT_INSTANCED_SUN_SHADOW_NV_INTZ = 0x6E,
|
||||
TECHNIQUE_LIT_INSTANCED_SPOT_NV_INTZ = 0x6F,
|
||||
TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW_NV_INTZ = 0x70,
|
||||
TECHNIQUE_LIT_INSTANCED_OMNI_NV_INTZ = 0x71,
|
||||
TECHNIQUE_LIT_INSTANCED_OMNI_SHADOW_NV_INTZ = 0x72,
|
||||
|
||||
TECHNIQUE_LIT_NV_END = 0x73,
|
||||
|
||||
TECHNIQUE_LIT_END = 0x73,
|
||||
|
||||
TECHNIQUE_LIGHT_SPOT = 0x73,
|
||||
TECHNIQUE_LIGHT_OMNI = 0x74,
|
||||
TECHNIQUE_LIGHT_SPOT_SHADOW = 0x75,
|
||||
TECHNIQUE_LIGHT_SPOT_CHARRED = 0x76,
|
||||
TECHNIQUE_LIGHT_OMNI_CHARRED = 0x77,
|
||||
TECHNIQUE_LIGHT_SPOT_SHADOW_CHARRED = 0x78,
|
||||
TECHNIQUE_FAKELIGHT_NORMAL = 0x79,
|
||||
TECHNIQUE_FAKELIGHT_VIEW = 0x7A,
|
||||
TECHNIQUE_SUNLIGHT_PREVIEW = 0x7B,
|
||||
TECHNIQUE_CASE_TEXTURE = 0x7C,
|
||||
TECHNIQUE_WIREFRAME_SOLID = 0x7D,
|
||||
TECHNIQUE_WIREFRAME_SHADED = 0x7E,
|
||||
TECHNIQUE_DEBUG_BUMPMAP = 0x7F,
|
||||
TECHNIQUE_DEBUG_BUMPMAP_INSTANCED = 0x80,
|
||||
TECHNIQUE_IMPACT_MASK = 0x81,
|
||||
|
||||
TECHNIQUE_COUNT
|
||||
};
|
||||
|
||||
struct MaterialTechniqueSet
|
||||
{
|
||||
const char* name;
|
||||
|
||||
2063
src/ObjCommon/Game/T5/Techset/TechsetConstantsT5.h
Normal file
2063
src/ObjCommon/Game/T5/Techset/TechsetConstantsT5.h
Normal file
File diff suppressed because it is too large
Load Diff
339
src/ObjWriting/Game/T5/Techset/TechsetDumperT5.cpp
Normal file
339
src/ObjWriting/Game/T5/Techset/TechsetDumperT5.cpp
Normal file
@@ -0,0 +1,339 @@
|
||||
#include "TechsetDumperT5.h"
|
||||
|
||||
#include "Game/T5/Material/MaterialConstantZoneStateT5.h"
|
||||
#include "Game/T5/Techset/TechsetConstantsT5.h"
|
||||
#include "Shader/ShaderCommon.h"
|
||||
#include "Techset/CommonTechniqueDumper.h"
|
||||
#include "Techset/CommonTechsetDumper.h"
|
||||
#include "Techset/ShaderDumpingZoneState.h"
|
||||
#include "Techset/TechniqueDumpingZoneState.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <unordered_set>
|
||||
|
||||
using namespace T5;
|
||||
|
||||
namespace
|
||||
{
|
||||
void DumpPixelShader(const AssetDumpingContext& context, const MaterialPixelShader& pixelShader)
|
||||
{
|
||||
const auto shaderFile = context.OpenAssetFile(shader::GetFileNameForPixelShaderAssetName(pixelShader.name));
|
||||
|
||||
if (!shaderFile)
|
||||
return;
|
||||
|
||||
shaderFile->write(reinterpret_cast<char*>(pixelShader.prog.loadDef.program), pixelShader.prog.loadDef.programSize * sizeof(uint32_t));
|
||||
}
|
||||
|
||||
void DumpVertexShader(const AssetDumpingContext& context, const MaterialVertexShader& vertexShader)
|
||||
{
|
||||
const auto shaderFile = context.OpenAssetFile(shader::GetFileNameForVertexShaderAssetName(vertexShader.name));
|
||||
|
||||
if (!shaderFile)
|
||||
return;
|
||||
|
||||
shaderFile->write(reinterpret_cast<char*>(vertexShader.prog.loadDef.program), vertexShader.prog.loadDef.programSize * sizeof(uint32_t));
|
||||
}
|
||||
|
||||
void DumpShaders(AssetDumpingContext& context, const MaterialTechniqueSet& techset)
|
||||
{
|
||||
auto* shaderState = context.GetZoneAssetDumperState<techset::ShaderDumpingZoneState>();
|
||||
|
||||
for (const auto* technique : techset.techniques)
|
||||
{
|
||||
if (!technique || !shaderState->ShouldDumpTechnique(technique))
|
||||
continue;
|
||||
|
||||
for (auto passIndex = 0u; passIndex < technique->passCount; passIndex++)
|
||||
{
|
||||
const auto* pixelShader = technique->passArray[passIndex].pixelShader;
|
||||
if (pixelShader && shaderState->ShouldDumpPixelShader(pixelShader))
|
||||
DumpPixelShader(context, *pixelShader);
|
||||
|
||||
const auto* vertexShader = technique->passArray[passIndex].vertexShader;
|
||||
if (vertexShader && shaderState->ShouldDumpVertexShader(vertexShader))
|
||||
DumpVertexShader(context, *vertexShader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
techset::CommonVertexDeclaration ConvertToCommonVertexDeclaration(const MaterialVertexDeclaration* vertexDecl)
|
||||
{
|
||||
std::vector<techset::CommonStreamRouting> commonRouting;
|
||||
|
||||
if (vertexDecl)
|
||||
{
|
||||
const auto streamCount = std::min(static_cast<size_t>(vertexDecl->streamCount), std::extent_v<decltype(MaterialVertexStreamRouting::data)>);
|
||||
for (auto streamIndex = 0u; streamIndex < streamCount; streamIndex++)
|
||||
{
|
||||
const auto& routing = vertexDecl->routing.data[streamIndex];
|
||||
commonRouting.emplace_back(techset::CommonStreamRouting{
|
||||
.m_source = static_cast<techset::CommonStreamSource>(routing.source),
|
||||
.m_destination = static_cast<techset::CommonStreamDestination>(routing.dest),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return techset::CommonVertexDeclaration{
|
||||
.m_routing = std::move(commonRouting),
|
||||
};
|
||||
}
|
||||
|
||||
techset::CommonShaderArg ConvertToCommonArg(const MaterialShaderArgument& arg)
|
||||
{
|
||||
switch (arg.type)
|
||||
{
|
||||
case MTL_ARG_CODE_VERTEX_CONST:
|
||||
case MTL_ARG_CODE_PIXEL_CONST:
|
||||
return techset::CommonShaderArg{
|
||||
.m_type = techset::CommonShaderArgType::CODE_CONST,
|
||||
.m_destination = {.dx9 =
|
||||
{
|
||||
.m_destination_register = arg.dest,
|
||||
}},
|
||||
.m_value = {
|
||||
.code_const_source = static_cast<techset::CommonCodeConstSource>(arg.u.codeConst.index),
|
||||
}
|
||||
};
|
||||
|
||||
case MTL_ARG_MATERIAL_VERTEX_CONST:
|
||||
case MTL_ARG_MATERIAL_PIXEL_CONST:
|
||||
return techset::CommonShaderArg{
|
||||
.m_type = techset::CommonShaderArgType::MATERIAL_CONST,
|
||||
.m_destination = {.dx9 =
|
||||
{
|
||||
.m_destination_register = arg.dest,
|
||||
}},
|
||||
.m_value = {
|
||||
.name_hash = arg.u.nameHash,
|
||||
}
|
||||
};
|
||||
|
||||
case MTL_ARG_CODE_PIXEL_SAMPLER:
|
||||
return techset::CommonShaderArg{
|
||||
.m_type = techset::CommonShaderArgType::CODE_SAMPLER,
|
||||
.m_destination = {.dx9 =
|
||||
{
|
||||
.m_destination_register = arg.dest,
|
||||
}},
|
||||
.m_value = {
|
||||
.code_sampler_source = static_cast<techset::CommonCodeSamplerSource>(arg.u.codeSampler),
|
||||
}
|
||||
};
|
||||
|
||||
case MTL_ARG_MATERIAL_PIXEL_SAMPLER:
|
||||
return techset::CommonShaderArg{
|
||||
.m_type = techset::CommonShaderArgType::MATERIAL_SAMPLER,
|
||||
.m_destination = {.dx9 =
|
||||
{
|
||||
.m_destination_register = arg.dest,
|
||||
}},
|
||||
.m_value = {
|
||||
.name_hash = arg.u.nameHash,
|
||||
}
|
||||
};
|
||||
|
||||
default:
|
||||
case MTL_ARG_LITERAL_VERTEX_CONST:
|
||||
case MTL_ARG_LITERAL_PIXEL_CONST:
|
||||
if (arg.u.literalConst)
|
||||
{
|
||||
return techset::CommonShaderArg{
|
||||
.m_type = techset::CommonShaderArgType::LITERAL_CONST,
|
||||
.m_destination = {.dx9 =
|
||||
{
|
||||
.m_destination_register = arg.dest,
|
||||
}},
|
||||
.m_value = {
|
||||
.literal_value =
|
||||
{
|
||||
(*arg.u.literalConst)[0],
|
||||
(*arg.u.literalConst)[1],
|
||||
(*arg.u.literalConst)[2],
|
||||
(*arg.u.literalConst)[3],
|
||||
}, }
|
||||
};
|
||||
}
|
||||
|
||||
return techset::CommonShaderArg{
|
||||
.m_type = techset::CommonShaderArgType::LITERAL_CONST,
|
||||
.m_destination = {.dx9 =
|
||||
{
|
||||
.m_destination_register = arg.dest,
|
||||
}},
|
||||
.m_value = {},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
techset::CommonTechniqueShader ConvertToCommonShader(const MaterialPass& pass, const MaterialVertexShader* vertexShader)
|
||||
{
|
||||
techset::CommonTechniqueShader result{};
|
||||
if (!vertexShader)
|
||||
return result;
|
||||
|
||||
if (vertexShader->name)
|
||||
result.m_name = vertexShader->name;
|
||||
|
||||
if (vertexShader->prog.loadDef.program)
|
||||
{
|
||||
result.m_shader_bin = vertexShader->prog.loadDef.program;
|
||||
result.m_shader_bin_size = vertexShader->prog.loadDef.programSize * sizeof(uint32_t);
|
||||
}
|
||||
|
||||
if (pass.args)
|
||||
{
|
||||
const size_t totalArgCount = pass.perPrimArgCount + pass.perObjArgCount + pass.stableArgCount;
|
||||
for (auto argIndex = 0uz; argIndex < totalArgCount; argIndex++)
|
||||
{
|
||||
const auto& arg = pass.args[argIndex];
|
||||
|
||||
switch (arg.type)
|
||||
{
|
||||
case MTL_ARG_CODE_VERTEX_CONST:
|
||||
case MTL_ARG_MATERIAL_VERTEX_CONST:
|
||||
case MTL_ARG_LITERAL_VERTEX_CONST:
|
||||
result.m_args.emplace_back(ConvertToCommonArg(arg));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
techset::CommonTechniqueShader ConvertToCommonShader(const MaterialPass& pass, const MaterialPixelShader* pixelShader)
|
||||
{
|
||||
techset::CommonTechniqueShader result{};
|
||||
if (!pixelShader)
|
||||
return result;
|
||||
|
||||
if (pixelShader->name)
|
||||
result.m_name = pixelShader->name;
|
||||
|
||||
if (pixelShader->prog.loadDef.program)
|
||||
{
|
||||
result.m_shader_bin = pixelShader->prog.loadDef.program;
|
||||
result.m_shader_bin_size = pixelShader->prog.loadDef.programSize * sizeof(uint32_t);
|
||||
}
|
||||
|
||||
if (pass.args)
|
||||
{
|
||||
const size_t totalArgCount = pass.perPrimArgCount + pass.perObjArgCount + pass.stableArgCount;
|
||||
for (auto argIndex = 0uz; argIndex < totalArgCount; argIndex++)
|
||||
{
|
||||
const auto& arg = pass.args[argIndex];
|
||||
|
||||
switch (arg.type)
|
||||
{
|
||||
case MTL_ARG_CODE_PIXEL_CONST:
|
||||
case MTL_ARG_CODE_PIXEL_SAMPLER:
|
||||
case MTL_ARG_MATERIAL_PIXEL_CONST:
|
||||
case MTL_ARG_MATERIAL_PIXEL_SAMPLER:
|
||||
case MTL_ARG_LITERAL_PIXEL_CONST:
|
||||
result.m_args.emplace_back(ConvertToCommonArg(arg));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
techset::CommonTechnique ConvertToCommonTechnique(const MaterialTechnique& technique)
|
||||
{
|
||||
std::vector<techset::CommonPass> passes;
|
||||
|
||||
for (auto passIndex = 0u; passIndex < technique.passCount; passIndex++)
|
||||
{
|
||||
const auto& pass = technique.passArray[passIndex];
|
||||
|
||||
passes.emplace_back(techset::CommonPass{
|
||||
.m_sampler_flags = pass.customSamplerFlags,
|
||||
.m_dx_version = techset::DxVersion::DX9,
|
||||
.m_vertex_shader = ConvertToCommonShader(pass, pass.vertexShader),
|
||||
.m_pixel_shader = ConvertToCommonShader(pass, pass.pixelShader),
|
||||
.m_vertex_declaration = ConvertToCommonVertexDeclaration(pass.vertexDecl),
|
||||
});
|
||||
}
|
||||
|
||||
return techset::CommonTechnique{
|
||||
.m_name = technique.name ? technique.name : std::string(),
|
||||
.m_flags = technique.flags,
|
||||
.m_passes = std::move(passes),
|
||||
};
|
||||
}
|
||||
|
||||
void DumpTechniques(AssetDumpingContext& context, const MaterialTechniqueSet& techset)
|
||||
{
|
||||
static techset::CommonCodeSourceInfos codeSourceInfos(commonCodeConstSources,
|
||||
std::extent_v<decltype(commonCodeConstSources)>,
|
||||
commonCodeSamplerSources,
|
||||
std::extent_v<decltype(commonCodeSamplerSources)>);
|
||||
static techset::CommonStreamRoutingInfos routingInfos(
|
||||
streamRoutingSources, std::extent_v<decltype(streamRoutingSources)>, streamRoutingDestinations, std::extent_v<decltype(streamRoutingDestinations)>);
|
||||
|
||||
auto* techniqueState = context.GetZoneAssetDumperState<techset::TechniqueDumpingZoneState>();
|
||||
const auto* materialConstantState = context.GetZoneAssetDumperState<MaterialConstantZoneState>();
|
||||
for (const auto* technique : techset.techniques)
|
||||
{
|
||||
if (technique && techniqueState->ShouldDumpTechnique(technique))
|
||||
{
|
||||
const auto commonTechnique = ConvertToCommonTechnique(*technique);
|
||||
|
||||
techset::DumpCommonTechnique(context, commonTechnique, codeSourceInfos, routingInfos, *materialConstantState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
techset::CommonTechset ConvertToCommonTechset(const MaterialTechniqueSet& techset)
|
||||
{
|
||||
std::vector<std::string> techniqueNames(std::extent_v<decltype(techniqueTypeNames)>);
|
||||
|
||||
for (auto techniqueIndex = 0u; techniqueIndex < std::extent_v<decltype(techniqueTypeNames)>; techniqueIndex++)
|
||||
{
|
||||
const auto* technique = techset.techniques[techniqueIndex];
|
||||
if (technique && technique->name)
|
||||
techniqueNames[techniqueIndex] = technique->name;
|
||||
}
|
||||
|
||||
return techset::CommonTechset{
|
||||
.m_name = techset.name,
|
||||
.m_technique_names = std::move(techniqueNames),
|
||||
};
|
||||
}
|
||||
|
||||
void DumpTechset(const AssetDumpingContext& context, const MaterialTechniqueSet& techset)
|
||||
{
|
||||
static techset::CommonTechniqueTypeNames commonNames(techniqueTypeNames, std::extent_v<decltype(techniqueTypeNames)>);
|
||||
const auto commonTechset = ConvertToCommonTechset(techset);
|
||||
|
||||
techset::DumpCommonTechset(commonNames, context, commonTechset);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
namespace techset
|
||||
{
|
||||
DumperT5::DumperT5(const AssetPool<AssetTechniqueSet::Type>& pool)
|
||||
: AbstractAssetDumper(pool)
|
||||
{
|
||||
}
|
||||
|
||||
void DumperT5::Dump(AssetDumpingContext& context)
|
||||
{
|
||||
context.GetZoneAssetDumperState<MaterialConstantZoneState>()->EnsureInitialized();
|
||||
AbstractAssetDumper::Dump(context);
|
||||
}
|
||||
|
||||
void DumperT5::DumpAsset(AssetDumpingContext& context, const XAssetInfo<AssetTechniqueSet::Type>& asset)
|
||||
{
|
||||
const auto* techniqueSet = asset.Asset();
|
||||
DumpTechset(context, *techniqueSet);
|
||||
DumpTechniques(context, *techniqueSet);
|
||||
DumpShaders(context, *techniqueSet);
|
||||
}
|
||||
} // namespace techset
|
||||
18
src/ObjWriting/Game/T5/Techset/TechsetDumperT5.h
Normal file
18
src/ObjWriting/Game/T5/Techset/TechsetDumperT5.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "Dumping/AbstractAssetDumper.h"
|
||||
#include "Game/T5/T5.h"
|
||||
|
||||
namespace techset
|
||||
{
|
||||
class DumperT5 final : public AbstractAssetDumper<T5::AssetTechniqueSet>
|
||||
{
|
||||
public:
|
||||
explicit DumperT5(const AssetPool<T5::AssetTechniqueSet::Type>& pool);
|
||||
|
||||
void Dump(AssetDumpingContext& context) override;
|
||||
|
||||
protected:
|
||||
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T5::AssetTechniqueSet::Type>& asset) override;
|
||||
};
|
||||
} // namespace techset
|
||||
Reference in New Issue
Block a user