96#include "osdep/osdep.h"
99#define MESH_SINGLE_MATERIAL_HACK 0
100#define MESH_FORCE_STATIC_SORT_HACK 0
114class MeshLoadContextClass :
public W3DMPO
118 MeshLoadContextClass(
void);
119 ~MeshLoadContextClass(
void);
127 ShaderClass Peek_Shader(
int index) {
return Shaders[index]; }
129 TextureClass * Peek_Texture(
int index) {
return Textures[index]; }
131 int Shader_Count(
void) {
return Shaders.Count(); }
132 int Vertex_Material_Count(
void) {
return VertexMaterials.Count(); }
133 int Texture_Count(
void) {
return Textures.Count(); }
139 ShaderClass Peek_Legacy_Shader(
int legacy_material_index);
141 TextureClass * Peek_Legacy_Texture(
int legacy_material_index);
147 Vector2 * Get_Temporary_UV_Array(
int elementcount);
157 void Notify_Loaded_DIG_Chunk(
bool onoff =
true) { LoadedDIG = onoff; }
158 bool Already_Loaded_DIG(
void) {
return LoadedDIG; }
162 struct LegacyMaterialClass
164 LegacyMaterialClass(
void) : VertexMaterialIdx(0),ShaderIdx(0),TextureIdx(0) { }
165 ~LegacyMaterialClass(
void) { }
166 void Set_Name(
const char * name) { Name=name; }
169 int VertexMaterialIdx;
184 DynamicVectorClass < LegacyMaterialClass * > LegacyMaterials;
185 DynamicVectorClass < ShaderClass > Shaders;
186 DynamicVectorClass < VertexMaterialClass * > VertexMaterials;
187 DynamicVectorClass < unsigned long > VertexMaterialCrcs;
188 DynamicVectorClass < TextureClass * > Textures;
249 WWDEBUG_SAY((
"Old format mesh mesh, no longer supported.\n"));
269 namelen += strlen(context->Header.
MeshName);
274 memset(tmpname,0,namelen);
280 strcat(tmpname,context->Header.
MeshName);
304 switch (geometry_type)
592 uvarray = context->Get_Temporary_UV_Array(elementcount);
594 if (uvarray !=
NULL) {
604 uvarray[i].
Set(texcoord.
U,1.0f - texcoord.
V);
607 DefMatDesc->Install_UV_Array(context->CurPass,context->CurTexStage,uvarray,elementcount);
628 for (
unsigned int mi=0; mi<context->Header.
NumMaterials; mi++) {
692 char filename[_MAX_FNAME + _MAX_EXT];
709 WWDEBUG_SAY((
"ERROR: Obsolete Animated Texture detected in model: %s\r\n",context->Header.
MeshName));
719 if ( diffuse_color ==
Vector3( 0,0,0 ) ) {
724 char filename[_MAX_FNAME + _MAX_EXT];
743 WWDEBUG_SAY((
"ERROR: Obsolete Animated Texture detected in model: %s\r\n",context->Header.
MeshName));
766 context->Add_Legacy_Material(shader,vmat,tex);
782 if (context->Vertex_Material_Count() >= 1) {
786 if (context->Texture_Count() >= 1) {
790 if (context->Shader_Count() >= 1) {
821 bool multi_mtl = (context->Vertex_Material_Count() > 1);
822 bool multi_tex = (context->Texture_Count() > 1);
823 bool multi_shad = (context->Shader_Count() > 1);
849 Set_Shader(i,context->Peek_Legacy_Shader(matid));
852 Set_Texture(i,context->Peek_Legacy_Texture(matid));
855 Set_Material(polys[i].
I,context->Peek_Legacy_Vertex_Material(matid));
856 Set_Material(polys[i].J,context->Peek_Legacy_Vertex_Material(matid));
857 Set_Material(polys[i].K,context->Peek_Legacy_Vertex_Material(matid));
902 col.
Set((
float)color.
R / 255.0f,(
float)color.
G / 255.0f,(
float)color.
B / 255.0f, 1.0f);
949 for (
unsigned int i=0; i<context->MatInfo.
ShaderCount; i++) {
950 if (cload.
Read(&shader,
sizeof(shader)) !=
sizeof(shader)) {
956 int index = context->Add_Shader(newshader);
984 context->Add_Vertex_Material(vmat);
1014 context->Add_Texture(newtex);
1015 newtex->Release_Ref();
1036 context->CurTexStage = 0;
1098 if (
DefMatDesc->Has_Material_Data(context->CurPass)) {
1099 matdesc = &(context->AlternateMatDesc);
1107#if (!MESH_SINGLE_MATERIAL_HACK)
1117 matdesc->
Set_Material(i,context->Peek_Vertex_Material(vmat),context->CurPass);
1121#pragma message ("(gth) Hacking to make Generals behave as if all meshes have 1 material")
1149 if (
DefMatDesc->Has_Shader_Data(context->CurPass)) {
1150 matdesc = &(context->AlternateMatDesc);
1157#if (!MESH_SINGLE_MATERIAL_HACK)
1160 cload.
Read(&shaderid,
sizeof(shaderid));
1161 ShaderClass shader = context->Peek_Shader(shaderid);
1165 if ( (context->CurPass == 0) &&
1170#if (MESH_FORCE_STATIC_SORT_HACK)
1181 ShaderClass shader = context->Peek_Shader(shaderid);
1182 matdesc->
Set_Shader(i,shader,context->CurPass);
1185 if ( (context->CurPass == 0) &&
1190#if (MESH_FORCE_STATIC_SORT_HACK)
1199#pragma message ("(gth) Hacking to make Generals behave as if all meshes have 1 material")
1201 cload.
Read(&shaderid,
sizeof(shaderid));
1202 ShaderClass shader = context->Peek_Shader(shaderid);
1206 if ( (context->CurPass == 0) &&
1211#if (MESH_FORCE_STATIC_SORT_HACK)
1244 matdesc = &(context->AlternateMatDesc);
1266 cload.
Read(&color,
sizeof(color));
1277 cload.
Read(&color,
sizeof(color));
1280 col.
W = float(color.
A)/255.0f;
1311 if (context->Already_Loaded_DIG()) {
1312 matdesc = &(context->AlternateMatDesc);
1314 context->Notify_Loaded_DIG_Chunk(
true);
1325 cload.
Read(&color,
sizeof(color));
1327 col.
X = float(color.
R)/255.0f;
1328 col.
Y = float(color.
G)/255.0f;
1329 col.
Z = float(color.
B)/255.0f;
1338 cload.
Read(&color,
sizeof(color));
1340 col.
X *= float(color.
R)/255.0f;
1341 col.
Y *= float(color.
G)/255.0f;
1342 col.
Z *= float(color.
B)/255.0f;
1414 context->CurTexStage++;
1435 int pass = context->CurPass;
1436 int stage = context->CurTexStage;
1442 if (
DefMatDesc->Has_Texture_Data(pass,stage)) {
1443 matdesc = &(context->AlternateMatDesc);
1449#if (!MESH_SINGLE_MATERIAL_HACK)
1451 cload.
Read(&texid,
sizeof(texid));
1458 if (texid != 0xffffffff) {
1459 matdesc->
Set_Texture(i,context->Peek_Texture(texid),pass,stage);
1464#pragma message ("(gth) Hacking to make Generals behave as if all meshes have 1 material")
1466 cload.
Read(&texid,
sizeof(texid));
1491 unsigned elementcount;
1499 if (
DefMatDesc->Has_UV(context->CurPass,context->CurTexStage)) {
1500 matdesc = &(context->AlternateMatDesc);
1507 uvs = context->Get_Temporary_UV_Array(elementcount);
1510 for (
unsigned i = 0; i < elementcount; i++) {
1511 cload.
Read (&texcoord,
sizeof (texcoord));
1512 uvs[i].
X = texcoord.
U;
1513 uvs[i].
Y = 1.0f - texcoord.
V;
1517 matdesc->
Install_UV_Array(context->CurPass,context->CurTexStage,uvs,elementcount);
1701 bool emissive_map_effect =
DefMatDesc->PassCount == 2 &&
1711 if (emissive_map_effect) {
1726 DefMatDesc->TextureArray [0][0]->Set_Element (i,
DefMatDesc->TextureArray [1][0]->Peek_Element (i));
1736 uv_source =
DefMatDesc->MaterialArray[1]->Peek_Element(0)->Get_UV_Source(0);
1742 DefMatDesc->MaterialArray[0]->Peek_Element(i)->Set_UV_Source(0, uv_source);
1745 DefMatDesc->Material[0]->Set_UV_Source(0, uv_source);
1758 if (shiny_mask_effect) {
1767 for (
int pass = 0; pass <
DefMatDesc->PassCount; pass++) {
1770 for (
int tri = 0; tri <
DefMatDesc->ShaderArray [pass]->Get_Count(); tri++) {
1779 unsigned int flags = 0;
1782 for (
int tri = 0; tri <
CurMatDesc->ShaderArray[pass]->Get_Count(); tri++) {
1783 scat =
CurMatDesc->ShaderArray[pass]->Get_Element(tri).Get_SS_Category();
1784 flags |= (1 << scat);
1788 flags |= (1 << scat);
1795 unsigned int flags = 0;
1804 enum StaticSortCategoryBitFieldType
1820 case (SSCAT_OPAQUE_BF | SSCAT_ALPHA_TEST_BF):
1824 case SSCAT_ADDITIVE_BF:
1828 case SSCAT_SCREEN_BF:
1842 for (
int pass_idx = 0; pass_idx < pass_cnt; pass_idx++) {
1854 for (
int p_idx = 0; p_idx < p_cnt; p_idx++) {
1878 bool lighting_enabled=
true;
1881 lighting_enabled=
false;
1883 DefMatDesc->Post_Load_Process (lighting_enabled,
this);
1891 for (i=0; i<context->Texture_Count(); i++) {
1892 MatInfo->Add_Texture(context->Peek_Texture(i));
1898 for (i=0; i<context->Vertex_Material_Count(); i++) {
1899 MatInfo->Add_Vertex_Material(context->Peek_Vertex_Material(i));
1922 if (context->AlternateMatDesc.
Is_Empty() ==
false) {
1941MeshLoadContextClass::MeshLoadContextClass(
void)
1943 memset(&Header,0,
sizeof(Header));
1944 memset(&MatInfo,0,
sizeof(MatInfo));
1945 PrelitChunkID = 0xffffffff;
1965MeshLoadContextClass::~MeshLoadContextClass(
void)
1969 if (TexCoords !=
NULL) {
1973 for (i=0; i<Textures.Count(); i++) {
1974 Textures[i]->Release_Ref();
1976 for (i=0; i<VertexMaterials.Count(); i++) {
1977 VertexMaterials[i]->Release_Ref();
1979 for (i=0; i<LegacyMaterials.Count(); i++) {
1980 delete LegacyMaterials[i];
2001 if (TexCoords ==
NULL) {
2002 TexCoords =
W3DNEWARRAY W3dTexCoordStruct[Header.NumVertices];
2020int MeshLoadContextClass::Add_Shader(
ShaderClass shader)
2022 int index = Shaders.Count();
2023 Shaders.Add(shader);
2044 int index = VertexMaterials.Count();
2045 VertexMaterials.Add(vmat);
2062int MeshLoadContextClass::Add_Texture(
TextureClass * tex)
2066 int index = Textures.Count();
2090 LegacyMaterialClass * mat =
W3DNEW LegacyMaterialClass;
2093 for (
int si=0; si<Shaders.Count(); si++) {
2094 if (Shaders[si] == shader)
break;
2096 if (si == Shaders.Count()) {
2097 mat->ShaderIdx = Add_Shader(shader);
2099 mat->ShaderIdx = si;
2104 mat->VertexMaterialIdx = -1;
2106 unsigned long crc = vmat->
Get_CRC();
2107 for (
int vi=0; vi<VertexMaterialCrcs.Count(); vi++) {
2108 if (VertexMaterialCrcs[vi] == crc)
break;
2110 if (vi == VertexMaterials.Count()) {
2111 mat->VertexMaterialIdx = Add_Vertex_Material(vmat);
2112 VertexMaterialCrcs.Add(crc);
2113 WWASSERT(VertexMaterialCrcs.Count() == VertexMaterials.Count());
2115 mat->VertexMaterialIdx = vi;
2121 mat->TextureIdx = -1;
2123 for (
int ti=0; ti<Textures.Count(); ti++) {
2124 if (Textures[ti] == tex)
break;
2125 if (stricmp(Textures[ti]->Get_Texture_Name(),tex->
Get_Texture_Name()) == 0)
break;
2127 if (ti == Textures.Count()) {
2128 mat->TextureIdx = Add_Texture(tex);
2130 mat->TextureIdx = ti;
2134 LegacyMaterials.Add(mat);
2153ShaderClass MeshLoadContextClass::Peek_Legacy_Shader(
int legacy_material_index)
2155 WWASSERT(legacy_material_index >= 0);
2156 WWASSERT(legacy_material_index < LegacyMaterials.Count());
2157 int si = LegacyMaterials[legacy_material_index]->ShaderIdx;
2158 return Peek_Shader(si);
2174VertexMaterialClass * MeshLoadContextClass::Peek_Legacy_Vertex_Material(
int legacy_material_index)
2176 WWASSERT(legacy_material_index >= 0);
2177 WWASSERT(legacy_material_index < LegacyMaterials.Count());
2178 int vi = LegacyMaterials[legacy_material_index]->VertexMaterialIdx;
2180 return Peek_Vertex_Material(vi);
2199TextureClass * MeshLoadContextClass::Peek_Legacy_Texture(
int legacy_material_index)
2201 WWASSERT(legacy_material_index >= 0);
2202 WWASSERT(legacy_material_index < LegacyMaterials.Count());
2203 int ti = LegacyMaterials[legacy_material_index]->TextureIdx;
2205 return Peek_Texture(ti);
2212Vector2 * MeshLoadContextClass::Get_Temporary_UV_Array(
int elementcount)
2214 TempUVArray.Uninitialised_Grow(elementcount);
2215 return &(TempUVArray[0]);
2276 write_chunks(csave,context);
2287 write_header(csave,context);
2288 write_user_text(csave,context);
2291 write_triangles(csave,context);
2292 write_vertices(csave,context);
2293 write_vertex_normals(csave,context);
2294 write_vertex_shade_indices(csave,context);
2295 write_vertex_influences(csave,context);
2299 write_material_info(csave,context);
2300 write_vertex_materials(csave,context);
2301 write_shaders(csave,context);
2302 write_textures(csave,context);
2307 write_material_pass(csave,context);
2314 W3dMeshHeader3Struct header;
2315 memset(&header,0,
sizeof(header));
2320 char * name =
MeshName->Get_Array();
2321 char * mesh_name = strchr(name,
'.');
2323 int hierarchy_name_len = 0;
2324 if (mesh_name ==
NULL) {
2327 hierarchy_name_len = (int)mesh_name - (
int)name;
2334 sprintf(header.
MeshName,
"UnNamed");
2357 if (csave.
Write(&header,
sizeof(header)) !=
sizeof(header)) {
2389 memset(&tri,0,
sizeof(W3dTriStruct));
2392 tri.
Vindex[0] = poly_verts[i].
I;
2393 tri.
Vindex[1] = poly_verts[i].
J;
2394 tri.
Vindex[2] = poly_verts[i].
K;
2401 tri.
Dist = poly_eq[i].
W;
2405 Vector3 * verts =
Vertex->Get_Array();
2406 const Vector3 & p0= verts[poly_verts[i][0]];
2420 if (csave.
Write(&tri,
sizeof(W3dTriStruct)) !=
sizeof(W3dTriStruct)) {
2439 Vector3 * verts =
Vertex->Get_Array();
2444 vert.
X = verts[i].
X;
2445 vert.
Y = verts[i].
Y;
2446 vert.
Z = verts[i].
Z;
2471 vert.
X = verts[i].
X;
2472 vert.
Y = verts[i].
Y;
2473 vert.
Z = verts[i].
Z;
2498 if (csave.
Write(&idx,
sizeof(idx)) !=
sizeof(idx)) {
2518 W3dVertInfStruct vinf;
2519 memset(&vinf,0,
sizeof(vinf));
2523 if (csave.
Write(&vinf,
sizeof(vinf)) !=
sizeof(vinf)) {
2540 W3dMaterialInfoStruct info;
2541 memset(&info,0,
sizeof(info));
2548 if (csave.
Write(&info,
sizeof(info)) !=
sizeof(info)) {
2568 W3dShaderStruct file_shader;
2572 if (csave.
Write(&file_shader,
sizeof(file_shader)) !=
sizeof(file_shader)) {
2617 write_vertex_material_ids(csave,context);
2618 write_shader_ids(csave,context);
2619 write_dcg(csave,context);
2620 write_dig(csave,context);
2621 write_scg(csave,context);
2622 write_texture_stage(csave,context);
2623 write_texture_stage(csave,context);
2643 csave.
Write(&
id,
sizeof(
id));
2647 VertexMaterialClass ** array =
DefMatDesc->MaterialArray[context->
CurPass]->Get_Array();
2650 csave.
Write(&
id,
sizeof(
id));
2667 csave.
Write(&
id,
sizeof(
id));
2674 csave.
Write(&
id,
sizeof(
id));
2687 W3dRGBAStruct color;
2691 csave.
Write(&color,
sizeof(color));
2707 csave.
Write(&color,
sizeof(color));
2718 W3dRGBAStruct color;
2722 csave.
Write(&color,
sizeof(color));
2734 write_texture_ids(csave,context);
2735 write_stage_texcoords(csave,context);
2750 csave.
Write(&
id,
sizeof(
id));
2757 csave.
Write(&
id,
sizeof(
id));
2770 W3dTexCoordStruct tex;
2775 tex.
U = array[vi].
X;
2776 tex.
V = 1.0f - array[vi].
Y;
2778 csave.
Write(&tex,
sizeof(tex));
#define W3D_MESH_FLAG_GEOMETRY_TYPE_MASK
#define OBSOLETE_W3D_MESH_FLAG_LIGHTMAPPED
#define W3D_MESH_FLAG_TWO_SIDED
#define W3D_MESH_FLAG_PRELIT_UNLIT
#define W3D_MESH_FLAG_PRELIT_MASK
#define W3D_MESH_FLAG_COLLISION_TYPE_SHIFT
#define W3D_VERTEX_CHANNEL_BONEID
#define W3D_MESH_FLAG_PRELIT_VERTEX
#define W3D_MESH_FLAG_NPATCHABLE
IOVector3Struct W3dVectorStruct
#define W3D_MESH_FLAG_CAST_SHADOW
@ W3D_CHUNK_STAGE_TEXCOORDS
@ W3D_CHUNK_MATERIAL_PASS
@ W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_PASS
@ W3D_CHUNK_VERTEX_SHADE_INDICES
@ W3D_CHUNK_MESH_USER_TEXT
@ W3D_CHUNK_VERTEX_NORMALS
@ W3D_CHUNK_VERTEX_MATERIALS
@ W3D_CHUNK_TEXTURE_STAGE
@ W3D_CHUNK_VERTEX_MATERIAL
@ W3D_CHUNK_VERTEX_INFLUENCES
@ W3D_CHUNK_PER_FACE_TEXCOORD_IDS
@ W3D_CHUNK_PRELIT_LIGHTMAP_MULTI_TEXTURE
@ W3D_CHUNK_VERTEX_MATERIAL_IDS
@ W3D_CHUNK_MATERIAL_INFO
@ W3D_CHUNK_PRELIT_VERTEX
#define W3D_MESH_FLAG_GEOMETRY_TYPE_NORMAL
#define W3D_MESH_FLAG_PRELIT_LIGHTMAP_MULTI_PASS
#define W3D_MESH_FLAG_COLLISION_TYPE_MASK
#define W3D_MAKE_VERSION(major, minor)
#define W3D_MESH_FLAG_PRELIT_LIGHTMAP_MULTI_TEXTURE
#define W3D_MESH_FLAG_GEOMETRY_TYPE_SKIN
#define W3D_MESH_FLAG_GEOMETRY_TYPE_CAMERA_ALIGNED
#define W3D_VERTEX_CHANNEL_LOCATION
#define W3D_CURRENT_MESH_VERSION
#define W3D_FACE_CHANNEL_FACE
#define W3D_MESH_FLAG_GEOMETRY_TYPE_CAMERA_ORIENTED
@ W3D_CHUNK_MATERIAL3_INFO
@ W3D_CHUNK_PER_TRI_MATERIALS
@ W3D_CHUNK_MAP3_FILENAME
@ W3D_CHUNK_MATERIAL3_NAME
@ W3D_CHUNK_MATERIAL3_DC_MAP
@ W3D_CHUNK_SURRENDER_NORMALS
@ W3D_CHUNK_VERTEX_COLORS
@ O_W3D_CHUNK_SURRENDER_TRIANGLES
@ W3D_CHUNK_MATERIAL3_SI_MAP
#define W3DMPO_GLUE(ARGCLASS)
uint32 Cur_Chunk_Length()
uint32 Seek(uint32 nbytes)
uint32 Read(void *buf, uint32 nbytes)
uint32 Write(const void *buf, uint32 nbytes)
bool Begin_Chunk(uint32 id)
static Vector4 Convert_Color(unsigned color)
int Find_Vertex_Material(VertexMaterialClass *mat)
int Get_Texture_Count(void)
void Collect_Materials(MeshModelClass *mesh)
int Get_Vertex_Material_Count(void)
TextureClass * Peek_Texture(int i)
int Get_Shader_Count(void)
VertexMaterialClass * Peek_Vertex_Material(int i)
int Find_Shader(const ShaderClass &shader)
ShaderClass Peek_Shader(int i)
int Find_Texture(TextureClass *tex)
void Remap_Mesh(const MeshMatDescClass *srcmeshmatdesc, MeshMatDescClass *destmeshmatdesc)
WW3DErrorType read_vertex_shade_indices(ChunkLoadClass &cload)
ShareBufferClass< uint16 > * VertexBoneLink
WW3DErrorType read_vertex_influences(ChunkLoadClass &cload)
ShareBufferClass< char > * UserText
@ PRELIT_LIGHTMAP_MULTI_TEXTURE
@ PRELIT_LIGHTMAP_MULTI_PASS
ShareBufferClass< Vector3 > * Vertex
ShareBufferClass< uint32 > * VertexShadeIdx
WW3DErrorType read_vertex_normals(ChunkLoadClass &cload)
ShareBufferClass< Vector4 > * PlaneEq
const Vector3 * Get_Vertex_Normal_Array(void)
int Get_Vertex_Count(void) const
const char * Get_Name(void) const
TriIndex * get_polys(void)
WW3DErrorType read_user_text(ChunkLoadClass &cload)
WW3DErrorType read_vertices(ChunkLoadClass &cload)
uint16 * get_bone_links(bool create=true)
ShareBufferClass< TriIndex > * Poly
void Generate_Culling_Tree(void)
void Set_Flag(FlagsType flag, bool onoff)
ShareBufferClass< char > * MeshName
WW3DErrorType read_aabtree(ChunkLoadClass &cload)
void Set_Name(const char *newname)
int Get_Polygon_Count(void) const
Vector3 BoundSphereCenter
WW3DErrorType read_triangles(ChunkLoadClass &cload)
int Get_Flag(FlagsType flag)
friend class MeshModelClass
unsigned * Get_Color_Array(int array, bool create=true)
void Install_UV_Array(int pass, int stage, Vector2 *uvs, int count)
void Set_Texture(int pidx, TextureClass *tex, int pass=0, int stage=0)
void Set_Single_Texture(TextureClass *tex, int pass=0, int stage=0)
void Set_Shader(int pidx, ShaderClass shader, int pass=0)
void Set_Vertex_Count(int vertcount)
bool Has_Color_Array(int array)
void Set_Material(int vidx, VertexMaterialClass *vmat, int pass=0)
void Set_Single_Material(VertexMaterialClass *vmat, int pass=0)
void Set_DCG_Source(int pass, VertexMaterialClass::ColorSourceType source)
void Set_Polygon_Count(int polycount)
void Set_Single_Shader(ShaderClass shader, int pass=0)
void Set_Texture(int pidx, TextureClass *tex, int pass=0, int stage=0)
WW3DErrorType read_shader_ids(ChunkLoadClass &cload, MeshLoadContextClass *context)
MeshMatDescClass * DefMatDesc
WW3DErrorType read_per_tri_materials(ChunkLoadClass &cload, MeshLoadContextClass *context)
bool Has_Shader_Array(int pass) const
WW3DErrorType read_per_face_texcoord_ids(ChunkLoadClass &cload, MeshLoadContextClass *context)
unsigned * Get_Color_Array(int array_index, bool create=true)
void compute_static_sort_levels(void)
WW3DErrorType read_texture_stage(ChunkLoadClass &cload, MeshLoadContextClass *context)
void Set_Single_Texture(TextureClass *tex, int pass=0, int stage=0)
void Set_Material(int vidx, VertexMaterialClass *vmat, int pass=0)
WW3DErrorType read_prelit_material(ChunkLoadClass &cload, MeshLoadContextClass *context)
MaterialInfoClass * MatInfo
void install_materials(MeshLoadContextClass *loadinfo)
WW3DErrorType read_scg(ChunkLoadClass &cload, MeshLoadContextClass *context)
void Reset(int polycount, int vertcount, int passcount)
void install_alternate_material_desc(MeshLoadContextClass *context)
int Get_Pass_Count(void) const
WW3DErrorType read_vertex_colors(ChunkLoadClass &cload, MeshLoadContextClass *context)
WW3DErrorType read_vertex_material_ids(ChunkLoadClass &cload, MeshLoadContextClass *context)
WW3DErrorType read_vertex_materials(ChunkLoadClass &cload, MeshLoadContextClass *context)
void Set_Pass_Count(int passes)
WW3DErrorType read_material_info(ChunkLoadClass &cload, MeshLoadContextClass *context)
WW3DErrorType read_material_pass(ChunkLoadClass &cload, MeshLoadContextClass *context)
WW3DErrorType read_textures(ChunkLoadClass &cload, MeshLoadContextClass *context)
WW3DErrorType read_texture_ids(ChunkLoadClass &cload, MeshLoadContextClass *context)
MeshMatDescClass * AlternateMatDesc
unsigned int get_sort_flags(void) const
WW3DErrorType read_texcoords(ChunkLoadClass &cload, MeshLoadContextClass *context)
void Set_Single_Shader(ShaderClass shader, int pass=0)
WW3DErrorType read_shaders(ChunkLoadClass &cload, MeshLoadContextClass *context)
void Set_Shader(int pidx, ShaderClass shader, int pass=0)
WW3DErrorType Load_W3D(ChunkLoadClass &cload)
WW3DErrorType read_dig(ChunkLoadClass &cload, MeshLoadContextClass *context)
void post_process_fog(void)
void Set_Single_Material(VertexMaterialClass *vmat, int pass=0)
friend class MeshLoadContextClass
MeshMatDescClass * CurMatDesc
void modify_for_overbright(void)
WW3DErrorType read_stage_texcoords(ChunkLoadClass &cload, MeshLoadContextClass *context)
WW3DErrorType read_v3_materials(ChunkLoadClass &cload, MeshLoadContextClass *context)
WW3DErrorType read_chunks(ChunkLoadClass &cload, MeshLoadContextClass *context)
WW3DErrorType read_dcg(ChunkLoadClass &cload, MeshLoadContextClass *context)
ShaderClass Get_Shader(int pidx, int pass=0) const
ShaderClass Get_Single_Shader(int pass=0) const
void clone_materials(const MeshModelClass &srcmesh)
MeshSaveContextClass(void)
MaterialCollectorClass Materials
~MeshSaveContextClass(void)
WWINLINE void Release_Ref(void) const
void Set_Texturing(TexturingType x)
void Set_Src_Blend_Func(SrcBlendFuncType x)
void Set_Primary_Gradient(PriGradientType x)
TexturingType Get_Texturing(void) const
void Init_From_Material3(const W3dMaterial3Struct &mat3)
SecGradientType Get_Secondary_Gradient(void) const
void Set_Fog_Func(FogFuncType x)
PriGradientType Get_Primary_Gradient(void) const
SrcBlendFuncType Get_Src_Blend_Func(void) const
void Set_Dst_Blend_Func(DstBlendFuncType x)
@ SECONDARY_GRADIENT_DISABLE
StaticSortCategoryType Get_SS_Category(void) const
DstBlendFuncType Get_Dst_Blend_Func(void) const
AlphaTestType Get_Alpha_Test(void) const
@ DSTBLEND_ONE_MINUS_SRC_ALPHA
const StringClass & Get_Texture_Name(void) const
WWINLINE void Set(float x, float y)
static WWINLINE float Dot_Product(const Vector3 &a, const Vector3 &b)
static WWINLINE void Subtract(const Vector3 &a, const Vector3 &b, Vector3 *c)
static WWINLINE void Cross_Product(const Vector3 &a, const Vector3 &b, Vector3 *result)
WWINLINE void Set(float x, float y, float z, float w)
void Get_Diffuse(Vector3 *set_color) const
WW3DErrorType Save_W3D(ChunkSaveClass &csave)
unsigned long Get_CRC(void) const
void Set_Diffuse(const Vector3 &color)
void Set_Ambient(const Vector3 &color)
WW3DErrorType Load_W3D(ChunkLoadClass &cload)
void Set_Name(const char *name)
void Init_From_Material3(const W3dMaterial3Struct &mat3)
static void Convert_Vector(const W3dVectorStruct &v, Vector3 *set)
static void Convert_Color(const W3dRGBStruct &rgb, Vector3 *set)
static void Convert_Shader(const W3dShaderStruct &shader, ShaderClass *set)
virtual TextureClass * Get_Texture(const char *filename, MipCountType mip_level_count=MIP_LEVELS_ALL, WW3DFormat texture_format=WW3D_FORMAT_UNKNOWN, bool allow_compression=true, TextureBaseClass::TexAssetType type=TextureBaseClass::TEX_REGULAR, bool allow_reduction=true)
static WW3DAssetManager * Get_Instance(void)
static bool Is_Overbright_Modify_On_Load_Enabled(void)
static PrelitModeEnum Get_Prelit_Mode()
@ PRELIT_MODE_LIGHTMAP_MULTI_PASS
@ PRELIT_MODE_LIGHTMAP_MULTI_TEXTURE
static bool Is_Munge_Sort_On_Load_Enabled(void)
#define REF_PTR_RELEASE(x)
#define REF_PTR_SET(dst, src)
uint32 VertexMaterialCount
TextureClass * Load_Texture(ChunkLoadClass &cload)
void Save_Texture(TextureClass *texture, ChunkSaveClass &csave)
#define WWASSERT_PRINT(expr, string)