mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-03-23 13:13:01 +00:00
Merge pull request #716 from Laupetin/feature/techset-iw5
feat: add techset dumping for iw5
This commit is contained in:
@@ -1327,15 +1327,6 @@ namespace IW4
|
|||||||
CUSTOM_SAMPLER_COUNT
|
CUSTOM_SAMPLER_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CodeSamplerSource
|
|
||||||
{
|
|
||||||
const char* name;
|
|
||||||
MaterialTextureSource source;
|
|
||||||
CodeSamplerSource* subtable;
|
|
||||||
int arrayCount;
|
|
||||||
int arrayStride;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum MaterialType
|
enum MaterialType
|
||||||
{
|
{
|
||||||
MTL_TYPE_DEFAULT = 0x0,
|
MTL_TYPE_DEFAULT = 0x0,
|
||||||
|
|||||||
@@ -237,6 +237,8 @@ namespace IW5
|
|||||||
using AssetTracer = Asset<ASSET_TYPE_TRACER, TracerDef>;
|
using AssetTracer = Asset<ASSET_TYPE_TRACER, TracerDef>;
|
||||||
using AssetVehicle = Asset<ASSET_TYPE_VEHICLE, VehicleDef>;
|
using AssetVehicle = Asset<ASSET_TYPE_VEHICLE, VehicleDef>;
|
||||||
using AssetAddonMapEnts = Asset<ASSET_TYPE_ADDON_MAP_ENTS, AddonMapEnts>;
|
using AssetAddonMapEnts = Asset<ASSET_TYPE_ADDON_MAP_ENTS, AddonMapEnts>;
|
||||||
|
|
||||||
|
using SubAssetTechnique = SubAsset<SUB_ASSET_TYPE_TECHNIQUE, MaterialTechnique>;
|
||||||
} // namespace IW5
|
} // namespace IW5
|
||||||
|
|
||||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetPhysPreset, name);
|
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetPhysPreset, name);
|
||||||
|
|||||||
@@ -967,10 +967,261 @@ namespace IW5
|
|||||||
MaterialVertexShaderProgram prog;
|
MaterialVertexShaderProgram prog;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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_0 = 0xB,
|
||||||
|
TEXTURE_SRC_CODE_POST_EFFECT_1 = 0xC,
|
||||||
|
TEXTURE_SRC_CODE_LIGHT_ATTENUATION = 0xD,
|
||||||
|
TEXTURE_SRC_CODE_LIGHT_CUCOLORIS = 0xE,
|
||||||
|
TEXTURE_SRC_CODE_OUTDOOR = 0xF,
|
||||||
|
TEXTURE_SRC_CODE_FLOATZ = 0x10,
|
||||||
|
TEXTURE_SRC_CODE_PROCESSED_FLOATZ = 0x11,
|
||||||
|
TEXTURE_SRC_CODE_RAW_FLOATZ = 0x12,
|
||||||
|
TEXTURE_SRC_CODE_HALF_PARTICLES = 0x13,
|
||||||
|
TEXTURE_SRC_CODE_HALF_PARTICLES_Z = 0x14,
|
||||||
|
TEXTURE_SRC_CODE_CASE_TEXTURE = 0x15,
|
||||||
|
TEXTURE_SRC_CODE_CINEMATIC_Y = 0x16,
|
||||||
|
TEXTURE_SRC_CODE_CINEMATIC_CR = 0x17,
|
||||||
|
TEXTURE_SRC_CODE_CINEMATIC_CB = 0x18,
|
||||||
|
TEXTURE_SRC_CODE_CINEMATIC_A = 0x19,
|
||||||
|
TEXTURE_SRC_CODE_REFLECTION_PROBE = 0x1A,
|
||||||
|
TEXTURE_SRC_CODE_PIP_SCENE = 0x1B,
|
||||||
|
TEXTURE_SRC_CODE_COLOR_MANIPULATION = 0x1C,
|
||||||
|
TEXTURE_SRC_CODE_STREAMING_LOADING = 0x1D,
|
||||||
|
|
||||||
|
TEXTURE_SRC_CODE_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
|
enum CustomSamplers
|
||||||
|
{
|
||||||
|
CUSTOM_SAMPLER_REFLECTION_PROBE = 0x0,
|
||||||
|
CUSTOM_SAMPLER_LIGHTMAP_PRIMARY = 0x1,
|
||||||
|
CUSTOM_SAMPLER_LIGHTMAP_SECONDARY = 0x2,
|
||||||
|
CUSTOM_SAMPLER_COUNT = 0x3,
|
||||||
|
};
|
||||||
|
|
||||||
|
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_FALLOFF_PLACEMENT = 0x5,
|
||||||
|
CONST_SRC_CODE_PARTICLE_CLOUD_COLOR = 0x6,
|
||||||
|
CONST_SRC_CODE_GAMETIME = 0x7,
|
||||||
|
CONST_SRC_CODE_EYEOFFSET = 0x8,
|
||||||
|
CONST_SRC_CODE_COLOR_SATURATION_R = 0x9,
|
||||||
|
CONST_SRC_CODE_COLOR_SATURATION_G = 0xA,
|
||||||
|
CONST_SRC_CODE_COLOR_SATURATION_B = 0xB,
|
||||||
|
|
||||||
|
CONST_SRC_CODE_MAYBE_DIRTY_PS_END = 0xC,
|
||||||
|
CONST_SRC_CODE_ALWAYS_DIRTY_PS_BEGIN = 0xC,
|
||||||
|
|
||||||
|
CONST_SRC_CODE_SSAO_PARMS = 0xC,
|
||||||
|
CONST_SRC_CODE_PIXEL_COST_FRACS = 0xD,
|
||||||
|
CONST_SRC_CODE_PIXEL_COST_DECODE = 0xE,
|
||||||
|
CONST_SRC_CODE_FILTER_TAP_0 = 0xF,
|
||||||
|
CONST_SRC_CODE_FILTER_TAP_1 = 0x10,
|
||||||
|
CONST_SRC_CODE_FILTER_TAP_2 = 0x11,
|
||||||
|
CONST_SRC_CODE_FILTER_TAP_3 = 0x12,
|
||||||
|
CONST_SRC_CODE_FILTER_TAP_4 = 0x13,
|
||||||
|
CONST_SRC_CODE_FILTER_TAP_5 = 0x14,
|
||||||
|
CONST_SRC_CODE_FILTER_TAP_6 = 0x15,
|
||||||
|
CONST_SRC_CODE_FILTER_TAP_7 = 0x16,
|
||||||
|
CONST_SRC_CODE_COLOR_MATRIX_R = 0x17,
|
||||||
|
CONST_SRC_CODE_COLOR_MATRIX_G = 0x18,
|
||||||
|
CONST_SRC_CODE_COLOR_MATRIX_B = 0x19,
|
||||||
|
CONST_SRC_CODE_SHADOWMAP_POLYGON_OFFSET = 0x1A,
|
||||||
|
CONST_SRC_CODE_RENDER_TARGET_SIZE = 0x1B,
|
||||||
|
CONST_SRC_CODE_RENDER_SOURCE_SIZE = 0x1C,
|
||||||
|
|
||||||
|
CONST_SRC_CODE_ALWAYS_DIRTY_PS_END = 0x1D,
|
||||||
|
CONST_SRC_CODE_FIXED_PS_BEGIN = 0x1D,
|
||||||
|
|
||||||
|
CONST_SRC_CODE_DOF_EQUATION_VIEWMODEL_AND_FAR_BLUR = 0x1D,
|
||||||
|
CONST_SRC_CODE_DOF_EQUATION_SCENE = 0x1E,
|
||||||
|
CONST_SRC_CODE_DOF_LERP_SCALE = 0x1F,
|
||||||
|
CONST_SRC_CODE_DOF_LERP_BIAS = 0x20,
|
||||||
|
CONST_SRC_CODE_DOF_ROW_DELTA = 0x21,
|
||||||
|
CONST_SRC_CODE_MOTION_MATRIX_X = 0x22,
|
||||||
|
CONST_SRC_CODE_MOTION_MATRIX_Y = 0x23,
|
||||||
|
CONST_SRC_CODE_MOTION_MATRIX_W = 0x24,
|
||||||
|
CONST_SRC_CODE_SHADOWMAP_SWITCH_PARTITION = 0x25,
|
||||||
|
CONST_SRC_CODE_SHADOWMAP_SCALE = 0x26,
|
||||||
|
CONST_SRC_CODE_ZNEAR = 0x27,
|
||||||
|
CONST_SRC_CODE_LIGHTING_LOOKUP_SCALE = 0x28,
|
||||||
|
CONST_SRC_CODE_DEBUG_BUMPMAP = 0x29,
|
||||||
|
CONST_SRC_CODE_MATERIAL_COLOR = 0x2A,
|
||||||
|
CONST_SRC_CODE_FOG = 0x2B,
|
||||||
|
CONST_SRC_CODE_FOG_COLOR_LINEAR = 0x2C,
|
||||||
|
CONST_SRC_CODE_FOG_COLOR_GAMMA = 0x2D,
|
||||||
|
CONST_SRC_CODE_FOG_SUN_CONSTS = 0x2E,
|
||||||
|
CONST_SRC_CODE_FOG_SUN_COLOR_LINEAR = 0x2F,
|
||||||
|
CONST_SRC_CODE_FOG_SUN_COLOR_GAMMA = 0x30,
|
||||||
|
CONST_SRC_CODE_FOG_SUN_DIR = 0x31,
|
||||||
|
CONST_SRC_CODE_GLOW_SETUP = 0x32,
|
||||||
|
CONST_SRC_CODE_GLOW_APPLY = 0x33,
|
||||||
|
CONST_SRC_CODE_COLOR_BIAS = 0x34,
|
||||||
|
CONST_SRC_CODE_COLOR_TINT_BASE = 0x35,
|
||||||
|
CONST_SRC_CODE_COLOR_TINT_DELTA = 0x36,
|
||||||
|
CONST_SRC_CODE_COLOR_TINT_QUADRATIC_DELTA = 0x37,
|
||||||
|
CONST_SRC_CODE_OUTDOOR_FEATHER_PARMS = 0x38,
|
||||||
|
CONST_SRC_CODE_ENVMAP_PARMS = 0x39,
|
||||||
|
CONST_SRC_CODE_SUN_SHADOWMAP_PIXEL_ADJUST = 0x3A,
|
||||||
|
CONST_SRC_CODE_SPOT_SHADOWMAP_PIXEL_ADJUST = 0x3B,
|
||||||
|
CONST_SRC_CODE_COMPOSITE_FX_DISTORTION = 0x3C,
|
||||||
|
CONST_SRC_CODE_POSTFX_FADE_EFFECT = 0x3D,
|
||||||
|
CONST_SRC_CODE_VIEWPORT_DIMENSIONS = 0x3E,
|
||||||
|
CONST_SRC_CODE_FRAMEBUFFER_READ = 0x3F,
|
||||||
|
CONST_SRC_CODE_THERMAL_COLOR_OFFSET = 0x40,
|
||||||
|
CONST_SRC_CODE_PLAYLIST_POPULATION_PARAMS = 0x41,
|
||||||
|
|
||||||
|
CONST_SRC_CODE_FIXED_PS_END = 0x42,
|
||||||
|
CONST_SRC_CODE_NON_PS_BEGIN = 0x42,
|
||||||
|
|
||||||
|
CONST_SRC_CODE_BASE_LIGHTING_COORDS = 0x42,
|
||||||
|
CONST_SRC_CODE_LIGHT_PROBE_AMBIENT = 0x43,
|
||||||
|
CONST_SRC_CODE_NEARPLANE_ORG = 0x44,
|
||||||
|
CONST_SRC_CODE_NEARPLANE_DX = 0x45,
|
||||||
|
CONST_SRC_CODE_NEARPLANE_DY = 0x46,
|
||||||
|
CONST_SRC_CODE_CLIP_SPACE_LOOKUP_SCALE = 0x47,
|
||||||
|
CONST_SRC_CODE_CLIP_SPACE_LOOKUP_OFFSET = 0x48,
|
||||||
|
CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX0 = 0x49,
|
||||||
|
CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX1 = 0x4A,
|
||||||
|
CONST_SRC_CODE_PARTICLE_CLOUD_MATRIX2 = 0x4B,
|
||||||
|
CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR0 = 0x4C,
|
||||||
|
CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR1 = 0x4D,
|
||||||
|
CONST_SRC_CODE_PARTICLE_CLOUD_SPARK_COLOR2 = 0x4E,
|
||||||
|
CONST_SRC_CODE_PARTICLE_FOUNTAIN_PARM0 = 0x4F,
|
||||||
|
CONST_SRC_CODE_PARTICLE_FOUNTAIN_PARM1 = 0x50,
|
||||||
|
CONST_SRC_CODE_DEPTH_FROM_CLIP = 0x51,
|
||||||
|
CONST_SRC_CODE_CODE_MESH_ARG_0 = 0x52,
|
||||||
|
CONST_SRC_CODE_CODE_MESH_ARG_1 = 0x53,
|
||||||
|
|
||||||
|
CONST_SRC_CODE_CODE_MESH_ARG_LAST = 0x53,
|
||||||
|
CONST_SRC_CODE_NON_PS_END = 0x54,
|
||||||
|
CONST_SRC_CODE_COUNT_FLOAT4 = 0x54,
|
||||||
|
CONST_SRC_FIRST_CODE_MATRIX = 0x54,
|
||||||
|
|
||||||
|
CONST_SRC_CODE_VIEW_MATRIX = 0x54,
|
||||||
|
CONST_SRC_CODE_INVERSE_VIEW_MATRIX = 0x55,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_VIEW_MATRIX = 0x56,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_MATRIX = 0x57,
|
||||||
|
CONST_SRC_CODE_PROJECTION_MATRIX = 0x58,
|
||||||
|
CONST_SRC_CODE_INVERSE_PROJECTION_MATRIX = 0x59,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_PROJECTION_MATRIX = 0x5A,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_PROJECTION_MATRIX = 0x5B,
|
||||||
|
CONST_SRC_CODE_VIEW_PROJECTION_MATRIX = 0x5C,
|
||||||
|
CONST_SRC_CODE_INVERSE_VIEW_PROJECTION_MATRIX = 0x5D,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0x5E,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_VIEW_PROJECTION_MATRIX = 0x5F,
|
||||||
|
CONST_SRC_CODE_SHADOW_LOOKUP_MATRIX = 0x60,
|
||||||
|
CONST_SRC_CODE_INVERSE_SHADOW_LOOKUP_MATRIX = 0x61,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0x62,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_SHADOW_LOOKUP_MATRIX = 0x63,
|
||||||
|
CONST_SRC_CODE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x64,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x65,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x66,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_OUTDOOR_LOOKUP_MATRIX = 0x67,
|
||||||
|
CONST_SRC_CODE_WORLD_MATRIX0 = 0x68,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_MATRIX0 = 0x69,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX0 = 0x6A,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX0 = 0x6B,
|
||||||
|
CONST_SRC_CODE_WORLD_VIEW_MATRIX0 = 0x6C,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX0 = 0x6D,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX0 = 0x6E,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX0 = 0x6F,
|
||||||
|
CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX0 = 0x70,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX0 = 0x71,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX0 = 0x72,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX0 = 0x73,
|
||||||
|
CONST_SRC_CODE_WORLD_MATRIX1 = 0x74,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_MATRIX1 = 0x75,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX1 = 0x76,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX1 = 0x77,
|
||||||
|
CONST_SRC_CODE_WORLD_VIEW_MATRIX1 = 0x78,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX1 = 0x79,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX1 = 0x7A,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX1 = 0x7B,
|
||||||
|
CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX1 = 0x7C,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX1 = 0x7D,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX1 = 0x7E,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX1 = 0x7F,
|
||||||
|
CONST_SRC_CODE_WORLD_MATRIX2 = 0x80,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_MATRIX2 = 0x81,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_MATRIX2 = 0x82,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_MATRIX2 = 0x83,
|
||||||
|
CONST_SRC_CODE_WORLD_VIEW_MATRIX2 = 0x84,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_VIEW_MATRIX2 = 0x85,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_MATRIX2 = 0x86,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX2 = 0x87,
|
||||||
|
CONST_SRC_CODE_WORLD_VIEW_PROJECTION_MATRIX2 = 0x88,
|
||||||
|
CONST_SRC_CODE_INVERSE_WORLD_VIEW_PROJECTION_MATRIX2 = 0x89,
|
||||||
|
CONST_SRC_CODE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX2 = 0x8A,
|
||||||
|
CONST_SRC_CODE_INVERSE_TRANSPOSE_WORLD_VIEW_PROJECTION_MATRIX2 = 0x8B,
|
||||||
|
|
||||||
|
CONST_SRC_TOTAL_COUNT,
|
||||||
|
CONST_SRC_NONE,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum MaterialStreamStreamSource_e
|
||||||
|
{
|
||||||
|
STREAM_SRC_POSITION = 0x0,
|
||||||
|
STREAM_SRC_COLOR = 0x1,
|
||||||
|
STREAM_SRC_TEXCOORD_0 = 0x2,
|
||||||
|
STREAM_SRC_NORMAL = 0x3,
|
||||||
|
|
||||||
|
STREAM_SRC_PRE_OPTIONAL_BEGIN = 0x4,
|
||||||
|
|
||||||
|
STREAM_SRC_TANGENT = 0x4,
|
||||||
|
|
||||||
|
STREAM_SRC_OPTIONAL_BEGIN = 0x5,
|
||||||
|
|
||||||
|
STREAM_SRC_TEXCOORD_1 = 0x5,
|
||||||
|
STREAM_SRC_TEXCOORD_2 = 0x6,
|
||||||
|
STREAM_SRC_NORMAL_TRANSFORM_0 = 0x7,
|
||||||
|
STREAM_SRC_NORMAL_TRANSFORM_1 = 0x8,
|
||||||
|
|
||||||
|
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_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
struct MaterialStreamRouting
|
struct MaterialStreamRouting
|
||||||
{
|
{
|
||||||
char source;
|
unsigned char source;
|
||||||
char dest;
|
unsigned char dest;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MaterialVertexStreamRouting
|
struct MaterialVertexStreamRouting
|
||||||
@@ -993,11 +1244,15 @@ namespace IW5
|
|||||||
MTL_ARG_LITERAL_VERTEX_CONST = 0x1,
|
MTL_ARG_LITERAL_VERTEX_CONST = 0x1,
|
||||||
MTL_ARG_MATERIAL_VERTEX_SAMPLER = 0x2,
|
MTL_ARG_MATERIAL_VERTEX_SAMPLER = 0x2,
|
||||||
MTL_ARG_MATERIAL_PIXEL_SAMPLER = 0x3,
|
MTL_ARG_MATERIAL_PIXEL_SAMPLER = 0x3,
|
||||||
|
|
||||||
MTL_ARG_CODE_PRIM_BEGIN = 0x4,
|
MTL_ARG_CODE_PRIM_BEGIN = 0x4,
|
||||||
|
|
||||||
MTL_ARG_CODE_VERTEX_CONST = 0x4,
|
MTL_ARG_CODE_VERTEX_CONST = 0x4,
|
||||||
MTL_ARG_CODE_PIXEL_SAMPLER = 0x5,
|
MTL_ARG_CODE_PIXEL_SAMPLER = 0x5,
|
||||||
MTL_ARG_CODE_PIXEL_CONST = 0x6,
|
MTL_ARG_CODE_PIXEL_CONST = 0x6,
|
||||||
|
|
||||||
MTL_ARG_CODE_PRIM_END = 0x7,
|
MTL_ARG_CODE_PRIM_END = 0x7,
|
||||||
|
|
||||||
MTL_ARG_MATERIAL_PIXEL_CONST = 0x7,
|
MTL_ARG_MATERIAL_PIXEL_CONST = 0x7,
|
||||||
MTL_ARG_LITERAL_PIXEL_CONST = 0x8,
|
MTL_ARG_LITERAL_PIXEL_CONST = 0x8,
|
||||||
|
|
||||||
@@ -1038,6 +1293,24 @@ namespace IW5
|
|||||||
MaterialShaderArgument* args;
|
MaterialShaderArgument* args;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum TechniqueFlags
|
||||||
|
{
|
||||||
|
MTL_TECHFLAG_NEEDS_RESOLVED_POST_SUN = 0x1,
|
||||||
|
MTL_TECHFLAG_NEEDS_RESOLVED_SCENE = 0x2,
|
||||||
|
|
||||||
|
// These 3 are set so rare, it seems like they are just based on name just like other games do
|
||||||
|
MTL_TECHFLAG_ZPREPASS = 0x4,
|
||||||
|
MTL_TECHFLAG_BUILD_FLOATZ = 0x8,
|
||||||
|
MTL_TECHFLAG_BUILD_SHADOW_MAP_DEPTH_OR_MODEL = 0x10,
|
||||||
|
|
||||||
|
MTL_TECHFLAG_DECL_HAS_OPTIONAL_SOURCE = 0x20,
|
||||||
|
|
||||||
|
MTL_TECHFLAG_USES_LIGHT_SPOT_FACTORS = 0x40,
|
||||||
|
MTL_TECHFLAG_USES_FLOATZ = 0x80, // uses floatZ sampler and does not have 0x100 flag
|
||||||
|
MTL_TECHFLAG_USES_DISTORTION_FLOATZ = 0x100, // distortion_scale_zfeather_dtex + distortion_scale_ua_zfeather + distortion_scale_zfeather
|
||||||
|
TECHNIQUE_FLAG_200 = 0x200, // ?
|
||||||
|
};
|
||||||
|
|
||||||
struct MaterialTechnique
|
struct MaterialTechnique
|
||||||
{
|
{
|
||||||
const char* name;
|
const char* name;
|
||||||
@@ -1046,6 +1319,73 @@ namespace IW5
|
|||||||
MaterialPass passArray[1];
|
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_DFOG = 0x6,
|
||||||
|
TECHNIQUE_EMISSIVE_SHADOW = 0x7,
|
||||||
|
TECHNIQUE_EMISSIVE_SHADOW_DFOG = 0x8,
|
||||||
|
|
||||||
|
TECHNIQUE_LIT_BEGIN = 0x9,
|
||||||
|
|
||||||
|
TECHNIQUE_LIT = 0x9,
|
||||||
|
TECHNIQUE_LIT_DFOG = 0xA,
|
||||||
|
TECHNIQUE_LIT_SUN = 0xB,
|
||||||
|
TECHNIQUE_LIT_SUN_DFOG = 0xC,
|
||||||
|
TECHNIQUE_LIT_SUN_SHADOW = 0xD,
|
||||||
|
TECHNIQUE_LIT_SUN_SHADOW_DFOG = 0xE,
|
||||||
|
TECHNIQUE_LIT_SPOT = 0xF,
|
||||||
|
TECHNIQUE_LIT_SPOT_DFOG = 0x10,
|
||||||
|
TECHNIQUE_LIT_SPOT_SHADOW = 0x11,
|
||||||
|
TECHNIQUE_LIT_SPOT_SHADOW_DFOG = 0x12,
|
||||||
|
TECHNIQUE_LIT_SPOT_SHADOW_CUCOLORIS = 0x13,
|
||||||
|
TECHNIQUE_LIT_SPOT_SHADOW_CUCOLORIS_DFOG = 0x14,
|
||||||
|
TECHNIQUE_LIT_OMNI = 0x15,
|
||||||
|
TECHNIQUE_LIT_OMNI_DFOG = 0x16,
|
||||||
|
TECHNIQUE_LIT_OMNI_SHADOW = 0x17,
|
||||||
|
TECHNIQUE_LIT_OMNI_SHADOW_DFOG = 0x18,
|
||||||
|
|
||||||
|
TECHNIQUE_LIT_INSTANCED = 0x19,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_DFOG = 0x1A,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SUN = 0x1B,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SUN_DFOG = 0x1C,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SUN_SHADOW = 0x1D,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SUN_SHADOW_DFOG = 0x1E,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SPOT = 0x1F,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SPOT_DFOG = 0x20,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW = 0x21,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW_DFOG = 0x22,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW_CUCOLORIS = 0x23,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_SPOT_SHADOW_CUCOLORIS_DFOG = 0x24,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_OMNI = 0x25,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_OMNI_DFOG = 0x26,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_OMNI_SHADOW = 0x27,
|
||||||
|
TECHNIQUE_LIT_INSTANCED_OMNI_SHADOW_DFOG = 0x28,
|
||||||
|
|
||||||
|
TECHNIQUE_LIT_END = 0x29,
|
||||||
|
|
||||||
|
TECHNIQUE_LIGHT_SPOT = 0x29,
|
||||||
|
TECHNIQUE_LIGHT_OMNI = 0x2A,
|
||||||
|
TECHNIQUE_LIGHT_SPOT_SHADOW = 0x2B,
|
||||||
|
TECHNIQUE_LIGHT_SPOT_SHADOW_CUCOLORIS = 0x2C,
|
||||||
|
TECHNIQUE_FAKELIGHT_NORMAL = 0x2D,
|
||||||
|
TECHNIQUE_FAKELIGHT_VIEW = 0x2E,
|
||||||
|
TECHNIQUE_SUNLIGHT_PREVIEW = 0x2F,
|
||||||
|
TECHNIQUE_CASE_TEXTURE = 0x30,
|
||||||
|
TECHNIQUE_WIREFRAME_SOLID = 0x31,
|
||||||
|
TECHNIQUE_WIREFRAME_SHADED = 0x32,
|
||||||
|
TECHNIQUE_THERMAL = 0x33,
|
||||||
|
TECHNIQUE_DEBUG_BUMPMAP = 0x34,
|
||||||
|
TECHNIQUE_DEBUG_BUMPMAP_INSTANCED = 0x35,
|
||||||
|
|
||||||
|
TECHNIQUE_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
enum MaterialWorldVertexFormat : unsigned char
|
enum MaterialWorldVertexFormat : unsigned char
|
||||||
{
|
{
|
||||||
MTL_WORLDVERT_TEX_1_NRM_1 = 0x0,
|
MTL_WORLDVERT_TEX_1_NRM_1 = 0x0,
|
||||||
|
|||||||
1216
src/ObjCommon/Game/IW5/Techset/TechsetConstantsIW5.h
Normal file
1216
src/ObjCommon/Game/IW5/Techset/TechsetConstantsIW5.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -33,7 +33,9 @@ namespace techset
|
|||||||
enum class CommonTechniqueShaderType : std::uint8_t
|
enum class CommonTechniqueShaderType : std::uint8_t
|
||||||
{
|
{
|
||||||
VERTEX,
|
VERTEX,
|
||||||
PIXEL
|
PIXEL,
|
||||||
|
|
||||||
|
COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class CommonShaderValueType : std::uint8_t
|
enum class CommonShaderValueType : std::uint8_t
|
||||||
@@ -47,7 +49,9 @@ namespace techset
|
|||||||
// Value is set to a sampler from the material
|
// Value is set to a sampler from the material
|
||||||
MATERIAL_SAMPLER,
|
MATERIAL_SAMPLER,
|
||||||
// Value is set to a sampler generated in code
|
// Value is set to a sampler generated in code
|
||||||
CODE_SAMPLER
|
CODE_SAMPLER,
|
||||||
|
|
||||||
|
COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr bool IsConstValueType(const CommonShaderValueType valueType)
|
constexpr bool IsConstValueType(const CommonShaderValueType valueType)
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
#include "ObjCompilerIW5.h"
|
#include "ObjCompilerIW5.h"
|
||||||
|
|
||||||
#include "Game/IW5/IW5.h"
|
#include "Game/IW5/IW5.h"
|
||||||
|
#include "Game/IW5/Techset/TechniqueCompilerIW5.h"
|
||||||
|
#include "Game/IW5/Techset/TechsetCompilerIW5.h"
|
||||||
|
#include "Game/IW5/Techset/VertexDeclCompilerIW5.h"
|
||||||
#include "Image/ImageIwdPostProcessor.h"
|
#include "Image/ImageIwdPostProcessor.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -13,7 +16,10 @@ namespace
|
|||||||
{
|
{
|
||||||
auto& memory = zone.Memory();
|
auto& memory = zone.Memory();
|
||||||
|
|
||||||
// No compilers yet
|
collection.AddAssetCreator(techset::CreateVertexDeclCompilerIW5(memory));
|
||||||
|
collection.AddAssetCreator(techset::CreateTechsetCompilerIW5(memory, searchPath));
|
||||||
|
|
||||||
|
collection.AddSubAssetCreator(techset::CreateTechniqueCompilerIW5(memory, zone, searchPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigurePostProcessors(AssetCreatorCollection& collection,
|
void ConfigurePostProcessors(AssetCreatorCollection& collection,
|
||||||
@@ -39,5 +45,6 @@ void ObjCompiler::ConfigureCreatorCollection(AssetCreatorCollection& collection,
|
|||||||
IOutputPath& outDir,
|
IOutputPath& outDir,
|
||||||
IOutputPath& cacheDir) const
|
IOutputPath& cacheDir) const
|
||||||
{
|
{
|
||||||
|
ConfigureCompilers(collection, zone, searchPath);
|
||||||
ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir);
|
ConfigurePostProcessors(collection, zone, zoneDefinition, searchPath, zoneStates, outDir);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,16 @@
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
enum class ArgumentType : std::uint8_t
|
||||||
|
{
|
||||||
|
VERTEX_CONSTANT,
|
||||||
|
VERTEX_SAMPLER,
|
||||||
|
PIXEL_CONSTANT,
|
||||||
|
PIXEL_SAMPLER,
|
||||||
|
|
||||||
|
COUNT
|
||||||
|
};
|
||||||
|
|
||||||
const char* ShaderTypeName(const techset::CommonTechniqueShaderType shaderType)
|
const char* ShaderTypeName(const techset::CommonTechniqueShaderType shaderType)
|
||||||
{
|
{
|
||||||
switch (shaderType)
|
switch (shaderType)
|
||||||
@@ -20,6 +30,9 @@ namespace
|
|||||||
return "vertex";
|
return "vertex";
|
||||||
case techset::CommonTechniqueShaderType::PIXEL:
|
case techset::CommonTechniqueShaderType::PIXEL:
|
||||||
return "pixel";
|
return "pixel";
|
||||||
|
case techset::CommonTechniqueShaderType::COUNT:
|
||||||
|
assert(false);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "<unknown>";
|
return "<unknown>";
|
||||||
@@ -36,6 +49,9 @@ namespace
|
|||||||
case techset::CommonShaderValueType::CODE_SAMPLER:
|
case techset::CommonShaderValueType::CODE_SAMPLER:
|
||||||
case techset::CommonShaderValueType::MATERIAL_SAMPLER:
|
case techset::CommonShaderValueType::MATERIAL_SAMPLER:
|
||||||
return "sampler";
|
return "sampler";
|
||||||
|
case techset::CommonShaderValueType::COUNT:
|
||||||
|
assert(false);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "<unknown>";
|
return "<unknown>";
|
||||||
@@ -47,11 +63,13 @@ namespace
|
|||||||
explicit BaseCommonShaderArgCreator(techset::ITechniqueShaderLoader& shaderLoader, techset::CommonCodeSourceInfos& commonCodeSourceInfos)
|
explicit BaseCommonShaderArgCreator(techset::ITechniqueShaderLoader& shaderLoader, techset::CommonCodeSourceInfos& commonCodeSourceInfos)
|
||||||
: m_shader_loader(shaderLoader),
|
: m_shader_loader(shaderLoader),
|
||||||
m_common_code_source_infos(commonCodeSourceInfos),
|
m_common_code_source_infos(commonCodeSourceInfos),
|
||||||
|
m_supported_argument_types(0),
|
||||||
m_shader_type(techset::CommonTechniqueShaderType::VERTEX),
|
m_shader_type(techset::CommonTechniqueShaderType::VERTEX),
|
||||||
m_bin{},
|
m_bin{},
|
||||||
m_tech_flags(0),
|
m_tech_flags(0),
|
||||||
m_sampler_flags(0)
|
m_sampler_flags(0)
|
||||||
{
|
{
|
||||||
|
DetermineSupportedArgumentTypes();
|
||||||
}
|
}
|
||||||
|
|
||||||
result::Expected<NoResult, std::string> EnterShader(const techset::CommonTechniqueShaderType shaderType, const std::string& name) override
|
result::Expected<NoResult, std::string> EnterShader(const techset::CommonTechniqueShaderType shaderType, const std::string& name) override
|
||||||
@@ -307,21 +325,36 @@ namespace
|
|||||||
return NoResult{};
|
return NoResult{};
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsArgumentTypeSupported(const techset::CommonShaderArgumentType& argumentType)
|
[[nodiscard]] bool IsArgumentTypeSupported(const techset::CommonShaderArgumentType& argumentType) const
|
||||||
{
|
{
|
||||||
if (argumentType.m_shader_type == techset::CommonTechniqueShaderType::PIXEL)
|
const auto mask = 1 << (std::to_underlying(argumentType.m_shader_type) * std::to_underlying(techset::CommonShaderValueType::COUNT)
|
||||||
return true;
|
+ std::to_underlying(argumentType.m_value_type));
|
||||||
|
|
||||||
switch (argumentType.m_value_type)
|
return m_supported_argument_types & mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DetermineSupportedArgumentTypes()
|
||||||
{
|
{
|
||||||
case techset::CommonShaderValueType::LITERAL_CONST:
|
// Ensure we have enough bits for the flags
|
||||||
case techset::CommonShaderValueType::MATERIAL_CONST:
|
static_assert(std::to_underlying(techset::CommonTechniqueShaderType::COUNT) * std::to_underlying(techset::CommonShaderValueType::COUNT)
|
||||||
case techset::CommonShaderValueType::CODE_CONST:
|
<= sizeof(m_supported_argument_types) * 8);
|
||||||
return true;
|
|
||||||
case techset::CommonShaderValueType::MATERIAL_SAMPLER:
|
m_supported_argument_types = 0;
|
||||||
case techset::CommonShaderValueType::CODE_SAMPLER:
|
for (auto shaderType = 0u; shaderType < std::to_underlying(techset::CommonTechniqueShaderType::COUNT); shaderType++)
|
||||||
default:
|
{
|
||||||
return false;
|
for (auto valueType = 0u; valueType < std::to_underlying(techset::CommonShaderValueType::COUNT); valueType++)
|
||||||
|
{
|
||||||
|
techset::CommonShaderArgumentType argumentType{
|
||||||
|
.m_shader_type = static_cast<techset::CommonTechniqueShaderType>(shaderType),
|
||||||
|
.m_value_type = static_cast<techset::CommonShaderValueType>(valueType),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (m_common_code_source_infos.GetArgumentTypeNumericValue(argumentType).has_value())
|
||||||
|
{
|
||||||
|
const auto flag = 1 << (shaderType * std::to_underlying(techset::CommonShaderValueType::COUNT) + valueType);
|
||||||
|
m_supported_argument_types |= flag;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,6 +373,7 @@ namespace
|
|||||||
|
|
||||||
techset::ITechniqueShaderLoader& m_shader_loader;
|
techset::ITechniqueShaderLoader& m_shader_loader;
|
||||||
techset::CommonCodeSourceInfos& m_common_code_source_infos;
|
techset::CommonCodeSourceInfos& m_common_code_source_infos;
|
||||||
|
std::uint16_t m_supported_argument_types;
|
||||||
|
|
||||||
techset::CommonTechniqueShaderType m_shader_type;
|
techset::CommonTechniqueShaderType m_shader_type;
|
||||||
std::string m_shader_name;
|
std::string m_shader_name;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/TechniqueCompiler" + GAME + ".cpp"
|
#filename "Game/" + GAME + "/Techset/TechniqueCompiler" + GAME + ".cpp"
|
||||||
|
|
||||||
@@ -70,6 +70,9 @@ namespace
|
|||||||
case techset::CommonShaderValueType::CODE_CONST:
|
case techset::CommonShaderValueType::CODE_CONST:
|
||||||
return MTL_ARG_CODE_VERTEX_CONST;
|
return MTL_ARG_CODE_VERTEX_CONST;
|
||||||
case techset::CommonShaderValueType::MATERIAL_SAMPLER:
|
case techset::CommonShaderValueType::MATERIAL_SAMPLER:
|
||||||
|
#if defined(FEATURE_IW5)
|
||||||
|
return MTL_ARG_MATERIAL_VERTEX_SAMPLER;
|
||||||
|
#endif
|
||||||
case techset::CommonShaderValueType::CODE_SAMPLER:
|
case techset::CommonShaderValueType::CODE_SAMPLER:
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
@@ -119,6 +122,9 @@ namespace
|
|||||||
case techset::CommonShaderValueType::MATERIAL_SAMPLER:
|
case techset::CommonShaderValueType::MATERIAL_SAMPLER:
|
||||||
argValue.nameHash = static_cast<decltype(MaterialArgumentDef::nameHash)>(commonArg.m_value.name_hash);
|
argValue.nameHash = static_cast<decltype(MaterialArgumentDef::nameHash)>(commonArg.m_value.name_hash);
|
||||||
break;
|
break;
|
||||||
|
case techset::CommonShaderValueType::COUNT:
|
||||||
|
assert(false);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,7 +219,7 @@ namespace
|
|||||||
pass.customSamplerFlags = static_cast<decltype(MaterialPass::customSamplerFlags)>(commonPass.m_sampler_flags);
|
pass.customSamplerFlags = static_cast<decltype(MaterialPass::customSamplerFlags)>(commonPass.m_sampler_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FEATURE_IW4
|
#if defined(FEATURE_IW4) || defined(FEATURE_IW5)
|
||||||
// Not sure if this is actually how this is calculated.
|
// Not sure if this is actually how this is calculated.
|
||||||
// It produces identical results at least though.
|
// It produces identical results at least though.
|
||||||
constexpr MaterialConstantSource ALLOWED_PIXEL_CONSTANTS_FOR_FLAG_200[]{
|
constexpr MaterialConstantSource ALLOWED_PIXEL_CONSTANTS_FOR_FLAG_200[]{
|
||||||
@@ -282,7 +288,7 @@ namespace
|
|||||||
#if defined(FEATURE_IW3)
|
#if defined(FEATURE_IW3)
|
||||||
if (lowerTechniqueName == "zprepass")
|
if (lowerTechniqueName == "zprepass")
|
||||||
technique.flags |= MTL_TECHFLAG_ZPREPASS;
|
technique.flags |= MTL_TECHFLAG_ZPREPASS;
|
||||||
#elif defined(FEATURE_IW4)
|
#elif defined(FEATURE_IW4) || defined(FEATURE_IW5)
|
||||||
// Not a particularly cool way to do this but...
|
// Not a particularly cool way to do this but...
|
||||||
// the game actually does this :shrug:
|
// the game actually does this :shrug:
|
||||||
if (lowerTechniqueName == "zprepass")
|
if (lowerTechniqueName == "zprepass")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/TechniqueCompiler" + GAME + ".h"
|
#filename "Game/" + GAME + "/Techset/TechniqueCompiler" + GAME + ".h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".cpp"
|
#filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".cpp"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".h"
|
#filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/VertexDeclCompiler" + GAME + ".cpp"
|
#filename "Game/" + GAME + "/Techset/VertexDeclCompiler" + GAME + ".cpp"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/VertexDeclCompiler" + GAME + ".h"
|
#filename "Game/" + GAME + "/Techset/VertexDeclCompiler" + GAME + ".h"
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
#include "Game/IW5/IW5.h"
|
#include "Game/IW5/IW5.h"
|
||||||
#include "Game/IW5/Image/ImageLoaderEmbeddedIW5.h"
|
#include "Game/IW5/Image/ImageLoaderEmbeddedIW5.h"
|
||||||
#include "Game/IW5/Image/ImageLoaderExternalIW5.h"
|
#include "Game/IW5/Image/ImageLoaderExternalIW5.h"
|
||||||
|
#include "Game/IW5/Techset/PixelShaderLoaderIW5.h"
|
||||||
|
#include "Game/IW5/Techset/VertexShaderLoaderIW5.h"
|
||||||
#include "Game/IW5/XModel/LoaderXModelIW5.h"
|
#include "Game/IW5/XModel/LoaderXModelIW5.h"
|
||||||
#include "Leaderboard/LoaderLeaderboardIW5.h"
|
#include "Leaderboard/LoaderLeaderboardIW5.h"
|
||||||
#include "Localize/LoaderLocalizeIW5.h"
|
#include "Localize/LoaderLocalizeIW5.h"
|
||||||
@@ -129,9 +131,8 @@ namespace
|
|||||||
// collection.AddAssetCreator(std::make_unique<AssetLoaderXModelSurfs>(memory));
|
// collection.AddAssetCreator(std::make_unique<AssetLoaderXModelSurfs>(memory));
|
||||||
collection.AddAssetCreator(xmodel::CreateLoaderIW5(memory, searchPath, zone));
|
collection.AddAssetCreator(xmodel::CreateLoaderIW5(memory, searchPath, zone));
|
||||||
collection.AddAssetCreator(material::CreateLoaderIW5(memory, searchPath));
|
collection.AddAssetCreator(material::CreateLoaderIW5(memory, searchPath));
|
||||||
// collection.AddAssetCreator(std::make_unique<AssetLoaderPixelShader>(memory));
|
collection.AddAssetCreator(techset::CreateVertexShaderLoaderIW5(memory, searchPath));
|
||||||
// collection.AddAssetCreator(std::make_unique<AssetLoaderVertexShader>(memory));
|
collection.AddAssetCreator(techset::CreatePixelShaderLoaderIW5(memory, searchPath));
|
||||||
// collection.AddAssetCreator(std::make_unique<AssetLoaderVertexDecl>(memory));
|
|
||||||
// collection.AddAssetCreator(std::make_unique<AssetLoaderTechniqueSet>(memory));
|
// collection.AddAssetCreator(std::make_unique<AssetLoaderTechniqueSet>(memory));
|
||||||
collection.AddAssetCreator(image::CreateLoaderEmbeddedIW5(memory, searchPath));
|
collection.AddAssetCreator(image::CreateLoaderEmbeddedIW5(memory, searchPath));
|
||||||
collection.AddAssetCreator(image::CreateLoaderExternalIW5(memory, searchPath));
|
collection.AddAssetCreator(image::CreateLoaderExternalIW5(memory, searchPath));
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/PixelShaderLoader" + GAME + ".cpp"
|
#filename "Game/" + GAME + "/Techset/PixelShaderLoader" + GAME + ".cpp"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/PixelShaderLoader" + GAME + ".h"
|
#filename "Game/" + GAME + "/Techset/PixelShaderLoader" + GAME + ".h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/VertexShaderLoader" + GAME + ".cpp"
|
#filename "Game/" + GAME + "/Techset/VertexShaderLoader" + GAME + ".cpp"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/VertexShaderLoader" + GAME + ".h"
|
#filename "Game/" + GAME + "/Techset/VertexShaderLoader" + GAME + ".h"
|
||||||
|
|
||||||
|
|||||||
@@ -140,6 +140,7 @@ namespace
|
|||||||
"detailMap",
|
"detailMap",
|
||||||
"detailMapSampler",
|
"detailMapSampler",
|
||||||
"dust",
|
"dust",
|
||||||
|
"dustMap",
|
||||||
"dustSampler",
|
"dustSampler",
|
||||||
"fadeMap",
|
"fadeMap",
|
||||||
"fadeMapSampler",
|
"fadeMapSampler",
|
||||||
@@ -160,22 +161,30 @@ namespace
|
|||||||
"lookupMap",
|
"lookupMap",
|
||||||
"lookupMapSampler",
|
"lookupMapSampler",
|
||||||
"modelLighting",
|
"modelLighting",
|
||||||
|
"modelLightingMap",
|
||||||
"modelLightingSampler",
|
"modelLightingSampler",
|
||||||
"normalMap",
|
"normalMap",
|
||||||
"normalMapSampler",
|
"normalMapSampler",
|
||||||
"oceanColorRamp",
|
"oceanColorRamp",
|
||||||
|
"oceanColorRampMap",
|
||||||
"oceanColorRampSampler",
|
"oceanColorRampSampler",
|
||||||
"oceanDetailNormal",
|
"oceanDetailNormal",
|
||||||
|
"oceanDetailNormalMap",
|
||||||
"oceanDetailNormalSampler",
|
"oceanDetailNormalSampler",
|
||||||
"oceanDisplacement",
|
"oceanDisplacement",
|
||||||
|
"oceanDisplacementMap",
|
||||||
"oceanDisplacementSampler",
|
"oceanDisplacementSampler",
|
||||||
"oceanEnv",
|
"oceanEnv",
|
||||||
|
"oceanEnvMap",
|
||||||
"oceanEnvSampler",
|
"oceanEnvSampler",
|
||||||
"oceanFoam",
|
"oceanFoam",
|
||||||
|
"oceanFoamMap",
|
||||||
"oceanFoamSampler",
|
"oceanFoamSampler",
|
||||||
"oceanHeightNormal",
|
"oceanHeightNormal",
|
||||||
|
"oceanHeightNormalMap",
|
||||||
"oceanHeightNormalSampler",
|
"oceanHeightNormalSampler",
|
||||||
"oceanPaintedFoam",
|
"oceanPaintedFoam",
|
||||||
|
"oceanPaintedFoamMap",
|
||||||
"oceanPaintedFoamSampler",
|
"oceanPaintedFoamSampler",
|
||||||
"outdoorMap",
|
"outdoorMap",
|
||||||
"outdoorMapSampler",
|
"outdoorMapSampler",
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
#include "ObjWriterIW5.h"
|
#include "ObjWriterIW5.h"
|
||||||
|
|
||||||
#include "Game/IW5/Material/MaterialJsonDumperIW5.h"
|
#include "Game/IW5/Material/MaterialJsonDumperIW5.h"
|
||||||
|
#include "Game/IW5/Techset/PixelShaderDumperIW5.h"
|
||||||
|
#include "Game/IW5/Techset/TechsetDumperIW5.h"
|
||||||
|
#include "Game/IW5/Techset/VertexShaderDumperIW5.h"
|
||||||
#include "Game/IW5/XModel/XModelDumperIW5.h"
|
#include "Game/IW5/XModel/XModelDumperIW5.h"
|
||||||
#include "Image/ImageDumperIW5.h"
|
#include "Image/ImageDumperIW5.h"
|
||||||
#include "Leaderboard/LeaderboardJsonDumperIW5.h"
|
#include "Leaderboard/LeaderboardJsonDumperIW5.h"
|
||||||
@@ -25,10 +28,15 @@ void ObjWriter::RegisterAssetDumpers(AssetDumpingContext& context)
|
|||||||
// REGISTER_DUMPER(AssetDumperXModelSurfs)
|
// REGISTER_DUMPER(AssetDumperXModelSurfs)
|
||||||
RegisterAssetDumper(std::make_unique<xmodel::DumperIW5>());
|
RegisterAssetDumper(std::make_unique<xmodel::DumperIW5>());
|
||||||
RegisterAssetDumper(std::make_unique<material::JsonDumperIW5>());
|
RegisterAssetDumper(std::make_unique<material::JsonDumperIW5>());
|
||||||
// REGISTER_DUMPER(AssetDumperMaterialPixelShader)
|
RegisterAssetDumper(std::make_unique<techset::PixelShaderDumperIW5>());
|
||||||
// REGISTER_DUMPER(AssetDumperMaterialVertexShader)
|
RegisterAssetDumper(std::make_unique<techset::VertexShaderDumperIW5>());
|
||||||
// REGISTER_DUMPER(AssetDumperMaterialVertexDeclaration)
|
RegisterAssetDumper(std::make_unique<techset::DumperIW5>(
|
||||||
// REGISTER_DUMPER(AssetDumperMaterialTechniqueSet)
|
#ifdef TECHSET_DEBUG
|
||||||
|
true
|
||||||
|
#else
|
||||||
|
false
|
||||||
|
#endif
|
||||||
|
));
|
||||||
RegisterAssetDumper(std::make_unique<image::DumperIW5>());
|
RegisterAssetDumper(std::make_unique<image::DumperIW5>());
|
||||||
// REGISTER_DUMPER(AssetDumpersnd_alias_list_t)
|
// REGISTER_DUMPER(AssetDumpersnd_alias_list_t)
|
||||||
// REGISTER_DUMPER(AssetDumperSndCurve)
|
// REGISTER_DUMPER(AssetDumperSndCurve)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW4)
|
#options GAME(IW4, IW5)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/PixelShaderDumper" + GAME + ".cpp"
|
#filename "Game/" + GAME + "/Techset/PixelShaderDumper" + GAME + ".cpp"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW4)
|
#options GAME(IW4, IW5)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/PixelShaderDumper" + GAME + ".h"
|
#filename "Game/" + GAME + "/Techset/PixelShaderDumper" + GAME + ".h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/TechsetDumper" + GAME + ".cpp"
|
#filename "Game/" + GAME + "/Techset/TechsetDumper" + GAME + ".cpp"
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ namespace
|
|||||||
{
|
{
|
||||||
std::vector<techset::CommonStreamRouting> commonRouting;
|
std::vector<techset::CommonStreamRouting> commonRouting;
|
||||||
|
|
||||||
#if defined(FEATURE_IW4)
|
#if defined(FEATURE_IW4) || defined(FEATURE_IW5)
|
||||||
if (vertexDecl && vertexDecl->name && vertexDecl->name[0] != ',')
|
if (vertexDecl && vertexDecl->name && vertexDecl->name[0] != ',')
|
||||||
#else
|
#else
|
||||||
if (vertexDecl)
|
if (vertexDecl)
|
||||||
@@ -124,7 +124,7 @@ namespace
|
|||||||
static_cast<techset::CommonStreamDestination>(routing.dest));
|
static_cast<techset::CommonStreamDestination>(routing.dest));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(FEATURE_IW4)
|
#if defined(FEATURE_IW4) || defined(FEATURE_IW5)
|
||||||
else if (vertexDecl && vertexDecl->name)
|
else if (vertexDecl && vertexDecl->name)
|
||||||
{
|
{
|
||||||
auto result = techset::CreateVertexDeclFromName(&vertexDecl->name[1], commonRoutingInfos);
|
auto result = techset::CreateVertexDeclFromName(&vertexDecl->name[1], commonRoutingInfos);
|
||||||
@@ -213,6 +213,9 @@ namespace
|
|||||||
return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value);
|
return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(FEATURE_IW5)
|
||||||
|
case MTL_ARG_MATERIAL_VERTEX_SAMPLER:
|
||||||
|
#endif
|
||||||
case MTL_ARG_MATERIAL_PIXEL_SAMPLER:
|
case MTL_ARG_MATERIAL_PIXEL_SAMPLER:
|
||||||
{
|
{
|
||||||
const techset::CommonShaderArgValue value{
|
const techset::CommonShaderArgValue value{
|
||||||
@@ -235,7 +238,6 @@ namespace
|
|||||||
return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value);
|
return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
|
||||||
case MTL_ARG_LITERAL_VERTEX_CONST:
|
case MTL_ARG_LITERAL_VERTEX_CONST:
|
||||||
case MTL_ARG_LITERAL_PIXEL_CONST:
|
case MTL_ARG_LITERAL_PIXEL_CONST:
|
||||||
{
|
{
|
||||||
@@ -265,15 +267,19 @@ namespace
|
|||||||
|
|
||||||
return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value);
|
return techset::CommonShaderArg(commonArgumentTypes[arg.type], destination, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
return techset::CommonShaderArg();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
techset::CommonTechniqueShader ConvertToCommonShader(const MaterialVertexShader* vertexShader)
|
techset::CommonTechniqueShader ConvertToCommonShader(const MaterialVertexShader* vertexShader)
|
||||||
{
|
{
|
||||||
#if defined(FEATURE_IW4)
|
#if defined(FEATURE_IW4) || defined(FEATURE_IW5)
|
||||||
if (vertexShader && vertexShader->name && vertexShader->name[0] == ',')
|
if (vertexShader && vertexShader->name && vertexShader->name[0] == ',')
|
||||||
{
|
{
|
||||||
auto* globalAsset = GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::IW4)->GetAsset<AssetVertexShader>(&vertexShader->name[1]);
|
auto* globalAsset = GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::GAME)->GetAsset<AssetVertexShader>(&vertexShader->name[1]);
|
||||||
if (globalAsset)
|
if (globalAsset)
|
||||||
vertexShader = globalAsset->Asset();
|
vertexShader = globalAsset->Asset();
|
||||||
}
|
}
|
||||||
@@ -303,10 +309,10 @@ namespace
|
|||||||
|
|
||||||
techset::CommonTechniqueShader ConvertToCommonShader(const MaterialPixelShader* pixelShader)
|
techset::CommonTechniqueShader ConvertToCommonShader(const MaterialPixelShader* pixelShader)
|
||||||
{
|
{
|
||||||
#if defined(FEATURE_IW4)
|
#if defined(FEATURE_IW4) || defined(FEATURE_IW5)
|
||||||
if (pixelShader && pixelShader->name && pixelShader->name[0] == ',')
|
if (pixelShader && pixelShader->name && pixelShader->name[0] == ',')
|
||||||
{
|
{
|
||||||
auto* globalAsset = GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::IW4)->GetAsset<AssetPixelShader>(&pixelShader->name[1]);
|
auto* globalAsset = GameGlobalAssetPools::GetGlobalPoolsForGame(GameId::GAME)->GetAsset<AssetPixelShader>(&pixelShader->name[1]);
|
||||||
if (globalAsset)
|
if (globalAsset)
|
||||||
pixelShader = globalAsset->Asset();
|
pixelShader = globalAsset->Asset();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW3, IW4, T5, T6)
|
#options GAME(IW3, IW4, IW5, T5, T6)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/TechsetDumper" + GAME + ".h"
|
#filename "Game/" + GAME + "/Techset/TechsetDumper" + GAME + ".h"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW4)
|
#options GAME(IW4, IW5)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/VertexShaderDumper" + GAME + ".cpp"
|
#filename "Game/" + GAME + "/Techset/VertexShaderDumper" + GAME + ".cpp"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#options GAME(IW4)
|
#options GAME(IW4, IW5)
|
||||||
|
|
||||||
#filename "Game/" + GAME + "/Techset/VertexShaderDumper" + GAME + ".h"
|
#filename "Game/" + GAME + "/Techset/VertexShaderDumper" + GAME + ".h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user