@@ -1052,6 +1052,70 @@ void ChunkTableClass::List_W3D_CHUNK_PS2_SHADERS(ChunkItem * Item,CListCtrl *Lis
10521052 }
10531053}
10541054
1055+ void ChunkTableClass::List_W3D_CHUNK_FX_SHADERS (ChunkItem * Item,CListCtrl *List)
1056+ {
1057+ List_Subitems (Item,List);
1058+ }
1059+
1060+ void ChunkTableClass::List_W3D_CHUNK_FX_SHADER (ChunkItem* Item, CListCtrl* List)
1061+ {
1062+ List_Subitems (Item, List);
1063+ }
1064+
1065+ void ChunkTableClass::List_W3D_CHUNK_FX_SHADER_INFO (ChunkItem* Item, CListCtrl* List)
1066+ {
1067+ uint8 version = *(uint8*)Item->Data ;
1068+ W3dFXShaderInfoStruct* shaderinfo = (W3dFXShaderInfoStruct*)((uint8*)Item->Data + 1 );
1069+ int counter = 0 ;
1070+
1071+ AddItem (List, counter, " Version" , version);
1072+ AddItem (List, counter, " ShaderName" , shaderinfo->ShaderName );
1073+ AddItem (List, counter, " Technique" , shaderinfo->Technique );
1074+ }
1075+
1076+ void ChunkTableClass::List_W3D_CHUNK_FX_SHADER_CONSTANT (ChunkItem* Item, CListCtrl* List)
1077+ {
1078+ int counter = 0 ;
1079+ uint8 *chunkdata = (uint8 *)Item->Data ;
1080+ uint32 type = *(uint32 *)chunkdata;
1081+ chunkdata += 4 ;
1082+ // Includes the null terminator
1083+ uint32 constantstrlen = *(uint32 *)chunkdata;
1084+ chunkdata += 4 ;
1085+ char * constantname = (char *)chunkdata;
1086+ chunkdata += constantstrlen;
1087+ AddItem (List, counter, " Type" , type);
1088+ AddItem (List, counter, " ConstantName" , constantname);
1089+ if (type == CONSTANT_TYPE_TEXTURE)
1090+ {
1091+ // This is hopefully also null-terminated
1092+ uint32 texturestrlen = *(uint32 *)chunkdata;
1093+ chunkdata += 4 ;
1094+ char * texture = (char *)chunkdata;
1095+ AddItem (List, counter, " Texture" , texture);
1096+ }
1097+ else if (type >= CONSTANT_TYPE_FLOAT1 && type <= CONSTANT_TYPE_FLOAT4)
1098+ {
1099+ int count = type - 1 ;
1100+ float * floats = (float *)chunkdata;
1101+ AddItem (List, counter, " Floats" , floats, count);
1102+ }
1103+ else if (type == CONSTANT_TYPE_INT)
1104+ {
1105+ uint32 u = *(uint32*)chunkdata;
1106+ AddItem (List, counter, " Int" , u);
1107+ }
1108+ else if (type == CONSTANT_TYPE_BOOL)
1109+ {
1110+ uint8 u = *(uint8*)chunkdata;
1111+ AddItem (List, counter, " Bool" , u);
1112+ }
1113+ else
1114+ {
1115+ AddItem (List, counter, " Unknown" , " Unknown" );
1116+ }
1117+ }
1118+
10551119void ChunkTableClass::List_W3D_CHUNK_TEXTURES (ChunkItem * Item,CListCtrl *List)
10561120{
10571121 List_Subitems (Item,List);
@@ -1183,6 +1247,24 @@ void ChunkTableClass::List_W3D_CHUNK_SCG(ChunkItem * Item,CListCtrl *List)
11831247 data++;
11841248 }
11851249}
1250+
1251+ void ChunkTableClass::List_W3D_CHUNK_FXSHADER_IDS (ChunkItem* Item, CListCtrl* List)
1252+ {
1253+ int Counter = 0 ;
1254+ int counter = 0 ;
1255+ uint32* data = (uint32*)Item->Data ;
1256+ void * max = (char *)Item->Data + Item->Length ;
1257+ char buf[256 ];
1258+
1259+ while (data < max) {
1260+
1261+ sprintf (buf, " Vertex[%d] FXShader Index" , counter);
1262+ AddItem (List, Counter, buf, *data);
1263+
1264+ counter++;
1265+ data++;
1266+ }
1267+ }
11861268
11871269void ChunkTableClass::List_W3D_CHUNK_TEXTURE_STAGE (ChunkItem * Item,CListCtrl *List)
11881270{
@@ -2057,6 +2139,10 @@ ChunkTableClass::ChunkTableClass() {
20572139 NewType ( W3D_CHUNK_VERTEX_SHADE_INDICES, " W3D_CHUNK_VERTEX_SHADE_INDICES" ,List_W3D_CHUNK_VERTEX_SHADE_INDICES);
20582140 NewType ( W3D_CHUNK_MATERIAL_INFO," W3D_CHUNK_MATERIAL_INFO" ,List_W3D_CHUNK_MATERIAL_INFO);
20592141 NewType ( W3D_CHUNK_SHADERS," W3D_CHUNK_SHADERS" ,List_W3D_CHUNK_SHADERS);
2142+ NewType ( W3D_CHUNK_FX_SHADERS," W3D_CHUNK_FX_SHADERS" ,List_W3D_CHUNK_FX_SHADERS, true );
2143+ NewType ( W3D_CHUNK_FX_SHADER," W3D_CHUNK_FX_SHADER" ,List_W3D_CHUNK_FX_SHADER, true );
2144+ NewType ( W3D_CHUNK_FX_SHADER_INFO, " W3D_CHUNK_FX_SHADER_INFO" , List_W3D_CHUNK_FX_SHADER_INFO);
2145+ NewType ( W3D_CHUNK_FX_SHADER_CONSTANT, " W3D_CHUNK_FX_SHADER_CONSTANT" , List_W3D_CHUNK_FX_SHADER_CONSTANT);
20602146 NewType ( W3D_CHUNK_PS2_SHADERS," W3D_CHUNK_PS2_SHADERS" ,List_W3D_CHUNK_PS2_SHADERS);
20612147
20622148 NewType ( W3D_CHUNK_VERTEX_MATERIALS, " W3D_CHUNK_VERTEX_MATERIALS" ,List_W3D_CHUNK_VERTEX_MATERIALS,true );
@@ -2077,7 +2163,8 @@ ChunkTableClass::ChunkTableClass() {
20772163 NewType ( W3D_CHUNK_DCG, " W3D_CHUNK_DCG" , List_W3D_CHUNK_DCG);
20782164 NewType ( W3D_CHUNK_DIG, " W3D_CHUNK_DIG" , List_W3D_CHUNK_DIG);
20792165 NewType ( W3D_CHUNK_SCG, " W3D_CHUNK_SCG" , List_W3D_CHUNK_SCG);
2080-
2166+ NewType ( W3D_CHUNK_FXSHADER_IDS, " W3D_CHUNK_FXSHADER_IDS" , List_W3D_CHUNK_FXSHADER_IDS);
2167+
20812168 NewType ( W3D_CHUNK_TEXTURE_STAGE, " W3D_CHUNK_TEXTURE_STAGE" , List_W3D_CHUNK_TEXTURE_STAGE,true );
20822169 NewType ( W3D_CHUNK_TEXTURE_IDS, " W3D_CHUNK_TEXTURE_IDS" , List_W3D_CHUNK_TEXTURE_IDS);
20832170 NewType ( W3D_CHUNK_STAGE_TEXCOORDS, " W3D_CHUNK_STAGE_TEXCOORDS" , List_W3D_CHUNK_STAGE_TEXCOORDS);
0 commit comments