53static unsigned int unique=1;
64#define Material (&MaterialDyn->Mat)
65#define SRCMATPTR(src) (&(src)->MaterialDyn->Mat)
67#define Material (MaterialOld)
68#define SRCMATPTR(src) ((src)->MaterialOld)
81 AmbientColorSource(D3DMCS_MATERIAL),
82 EmissiveColorSource(D3DMCS_MATERIAL),
83 DiffuseColorSource(D3DMCS_MATERIAL),
99 MaterialOld=
W3DNEW D3DMATERIAL8;
101 memset(
Material,0,
sizeof(D3DMATERIAL8));
115 AmbientColorSource(src.AmbientColorSource),
116 EmissiveColorSource(src.EmissiveColorSource),
117 DiffuseColorSource(src.DiffuseColorSource),
118 UseLighting(src.UseLighting),
120 UniqueID(src.UniqueID),
134 UVSource[i] = src.UVSource[i];
140 MaterialOld=
W3DNEW D3DMATERIAL8;
178 AmbientColorSource = src.AmbientColorSource;
179 EmissiveColorSource = src.EmissiveColorSource;
180 DiffuseColorSource = src.DiffuseColorSource;
181 UseLighting=src.UseLighting;
182 UniqueID=src.UniqueID;
183 CRCDirty=src.CRCDirty;
186 if (Mapper[stage] !=
NULL) {
187 Mapper[stage]->Release_Ref();
188 Mapper[stage] =
NULL;
192 if (src.Mapper[stage]) {
197 UVSource[stage] = src.UVSource[stage];
205unsigned long VertexMaterialClass::Compute_CRC(
void)
const
207 unsigned long crc = 0;
212 crc =
CRC_Memory(
reinterpret_cast<const unsigned char *
>(
Material),
sizeof(D3DMATERIAL8),crc);
213 crc =
CRC_Memory(
reinterpret_cast<const unsigned char *
>(&Flags),
sizeof(Flags),crc);
214 crc =
CRC_Memory(
reinterpret_cast<const unsigned char *
>(&DiffuseColorSource),
sizeof(DiffuseColorSource),crc);
215 crc =
CRC_Memory(
reinterpret_cast<const unsigned char *
>(&AmbientColorSource),
sizeof(AmbientColorSource),crc);
216 crc =
CRC_Memory(
reinterpret_cast<const unsigned char *
>(&EmissiveColorSource),
sizeof(EmissiveColorSource),crc);
217 crc =
CRC_Memory(
reinterpret_cast<const unsigned char *
>(&UVSource),
sizeof(UVSource),crc);
218 crc =
CRC_Memory(
reinterpret_cast<const unsigned char *
>(&UseLighting),
sizeof(UseLighting),crc);
219 crc =
CRC_Memory(
reinterpret_cast<const unsigned char *
>(&UniqueID),
sizeof(UniqueID),crc);
354 case COLOR1: AmbientColorSource = D3DMCS_COLOR1;
break;
355 case COLOR2: AmbientColorSource = D3DMCS_COLOR2;
break;
356 default: AmbientColorSource = D3DMCS_MATERIAL;
break;
365 case COLOR1: EmissiveColorSource = D3DMCS_COLOR1;
break;
366 case COLOR2: EmissiveColorSource = D3DMCS_COLOR2;
break;
367 default: EmissiveColorSource = D3DMCS_MATERIAL;
break;
376 case COLOR1: DiffuseColorSource = D3DMCS_COLOR1;
break;
377 case COLOR2: DiffuseColorSource = D3DMCS_COLOR2;
break;
378 default: DiffuseColorSource = D3DMCS_MATERIAL;
break;
385 switch(AmbientColorSource)
387 case D3DMCS_COLOR1:
return COLOR1;
388 case D3DMCS_COLOR2:
return COLOR2;
396 switch(EmissiveColorSource)
398 case D3DMCS_COLOR1:
return COLOR1;
399 case D3DMCS_COLOR2:
return COLOR2;
407 switch(DiffuseColorSource)
409 case D3DMCS_COLOR1:
return COLOR1;
410 case D3DMCS_COLOR2:
return COLOR2;
422 UVSource[stage] = array_index;
429 return UVSource[stage];
439 tmp2.
X = tmp0.
X * tmp1.
X;
440 tmp2.
Y = tmp0.
Y * tmp1.
Y;
441 tmp2.
Z = tmp0.
Z * tmp1.
Z;
446 tmp2.
X = tmp0.
X * tmp1.
X;
447 tmp2.
Y = tmp0.
Y * tmp1.
Y;
448 tmp2.
Z = tmp0.
Z * tmp1.
Z;
466 bool hasname =
false;
468 char *mapping0_arg_buffer =
NULL;
469 char *mapping1_arg_buffer =
NULL;
470 unsigned int mapping0_arg_len = 0U;
471 unsigned int mapping1_arg_len = 0U;
481 if (cload.
Read(&vmat,
sizeof(vmat)) !=
sizeof(vmat)) {
488 mapping0_arg_buffer =
MSGW3DNEWARRAY(
"VertexMaterialClassTemp")
char[mapping0_arg_len];
489 if (cload.
Read(mapping0_arg_buffer, mapping0_arg_len) != mapping0_arg_len) {
496 mapping1_arg_buffer =
MSGW3DNEWARRAY(
"VertexMaterialClassTemp")
char[mapping1_arg_len];
497 if (cload.
Read(mapping1_arg_buffer, mapping1_arg_len) != mapping1_arg_len) {
512 delete [] mapping0_arg_buffer;
513 mapping0_arg_buffer =
NULL;
515 delete [] mapping1_arg_buffer;
516 mapping1_arg_buffer =
NULL;
554 if (mapping0_arg_buffer) {
556 int mapping0_arg_len = strlen(mapping0_arg_buffer);
558 char *extended_arg_buffer =
MSGW3DNEWARRAY(
"VertexMaterialClassTemp")
char[mapping0_arg_len + 10];
559 sprintf(extended_arg_buffer,
"[Args]\n%s", mapping0_arg_buffer);
560 mapping0_arg_len = strlen(extended_arg_buffer) + 1;
562 BufferStraw map_arg_buf_straw((
void *)extended_arg_buffer, mapping0_arg_len);
564 mapping0_arg_ini.
Load(map_arg_buf_straw);
566 delete [] extended_arg_buffer;
567 extended_arg_buffer =
NULL;
570 if (mapping1_arg_buffer) {
572 int mapping1_arg_len = strlen(mapping1_arg_buffer);
574 char *extended_arg_buffer =
MSGW3DNEWARRAY(
"VertexMaterialClassTemp")
char[mapping1_arg_len + 20];
575 sprintf(extended_arg_buffer,
"[Args]\n%s", mapping1_arg_buffer);
576 mapping1_arg_len = strlen(extended_arg_buffer) + 1;
578 BufferStraw map_arg_buf_straw((
void *)extended_arg_buffer, mapping1_arg_len);
580 mapping1_arg_ini.
Load(map_arg_buf_straw);
582 delete [] extended_arg_buffer;
583 extended_arg_buffer =
NULL;
949void VertexMaterialClass::Apply(
void)
const
966 Mapper[i]->
Apply(UVSource[i]);
974void VertexMaterialClass::Apply_Null(
void)
977 static D3DMATERIAL8 default_settings =
979 { 1.0f, 1.0f, 1.0f, 1.0f },
980 { 1.0f, 1.0f, 1.0f, 1.0f },
981 { 0.0f, 0.0f, 0.0f, 0.0f },
982 { 0.0f, 0.0f, 0.0f, 0.0f },
1070 Presets[type]->Add_Ref();
1071 return Presets[type];
#define W3DVERTMAT_STAGE1_MAPPING_ZIGZAG_LINEAR_OFFSET
#define W3DVERTMAT_STAGE1_MAPPING_WS_CLASSIC_ENV
#define W3DVERTMAT_STAGE1_MAPPING_WS_ENVIRONMENT
#define W3DVERTMAT_STAGE0_MAPPING_ENVIRONMENT
#define W3DVERTMAT_STAGE1_MAPPING_GRID_WS_ENVIRONMENT
#define W3DVERTMAT_STAGE0_MAPPING_CHEAP_ENVIRONMENT
#define W3DVERTMAT_STAGE1_MAPPING_SINE_LINEAR_OFFSET
#define W3DVERTMAT_STAGE1_MAPPING_SCALE
#define W3DVERTMAT_STAGE1_MAPPING_SCREEN
#define W3DVERTMAT_STAGE0_MAPPING_BUMPENV
#define W3DVERTMAT_STAGE0_MAPPING_UV
#define W3DVERTMAT_STAGE0_MAPPING_GRID_WS_CLASSIC_ENV
#define W3DVERTMAT_STAGE1_MAPPING_ROTATE
#define W3DVERTMAT_STAGE1_MAPPING_STEP_LINEAR_OFFSET
#define W3DVERTMAT_STAGE0_MAPPING_ZIGZAG_LINEAR_OFFSET
#define W3DVERTMAT_STAGE0_MAPPING_LINEAR_OFFSET
#define W3DVERTMAT_STAGE0_MAPPING_SCALE
#define W3DVERTMAT_STAGE0_MAPPING_STEP_LINEAR_OFFSET
#define W3DVERTMAT_STAGE0_MAPPING_SINE_LINEAR_OFFSET
#define W3DVERTMAT_STAGE1_MAPPING_EDGE
#define W3DVERTMAT_STAGE0_MAPPING_SCREEN
#define W3DVERTMAT_STAGE1_MAPPING_GRID_WS_CLASSIC_ENV
#define W3DVERTMAT_STAGE0_MAPPING_GRID_WS_ENVIRONMENT
#define W3DVERTMAT_STAGE0_MAPPING_EDGE
#define W3DVERTMAT_STAGE1_MAPPING_UV
#define W3DVERTMAT_COPY_SPECULAR_TO_DIFFUSE
#define W3DVERTMAT_STAGE1_MAPPING_MASK
#define W3DVERTMAT_STAGE1_MAPPING_GRID_ENVIRONMENT
#define W3DVERTMAT_STAGE0_MAPPING_WS_CLASSIC_ENV
#define W3DVERTMAT_STAGE0_MAPPING_ROTATE
#define W3DVERTMAT_STAGE1_MAPPING_BUMPENV
#define W3DVERTMAT_STAGE0_MAPPING_GRID
#define W3DVERTMAT_STAGE0_MAPPING_MASK
#define W3DVERTMAT_STAGE0_MAPPING_GRID_ENVIRONMENT
#define W3DVERTMAT_STAGE0_MAPPING_GRID_CLASSIC_ENV
#define W3DVERTMAT_STAGE1_MAPPING_CHEAP_ENVIRONMENT
#define W3DVERTMAT_STAGE1_MAPPING_GRID_CLASSIC_ENV
#define W3DVERTMAT_STAGE1_MAPPING_LINEAR_OFFSET
@ W3D_CHUNK_VERTEX_MAPPER_ARGS1
@ W3D_CHUNK_VERTEX_MATERIAL_NAME
@ W3D_CHUNK_VERTEX_MAPPER_ARGS0
@ W3D_CHUNK_VERTEX_MATERIAL_INFO
#define W3DVERTMAT_STAGE0_MAPPING_WS_ENVIRONMENT
#define W3DVERTMAT_STAGE1_MAPPING_RANDOM
#define W3DVERTMAT_STAGE0_MAPPING_RANDOM
#define W3DVERTMAT_USE_DEPTH_CUE
#define W3DVERTMAT_STAGE1_MAPPING_GRID
#define W3DVERTMAT_STAGE1_MAPPING_ENVIRONMENT
#define W3DMPO_GLUE(ARGCLASS)
#define MSGW3DNEWARRAY(MSG)
unsigned long CRC_Memory(const unsigned char *data, unsigned long length, unsigned long crc)
uint32 Cur_Chunk_Length()
uint32 Read(void *buf, uint32 nbytes)
static void Set_DX8_Material(const D3DMATERIAL8 *mat)
static void Set_DX8_Texture_Stage_State(unsigned stage, D3DTEXTURESTAGESTATETYPE state, unsigned value)
static void Set_DX8_Render_State(D3DRENDERSTATETYPE state, unsigned value)
int Load(FileClass &file)
WWINLINE void Release_Ref(void) const
virtual void Apply(int uv_array_index)=0
virtual TextureMapperClass * Clone(void) const =0
float Get_Shininess(void) const
void Parse_W3dVertexMaterialStruct(const W3dVertexMaterialStruct &vmat)
static VertexMaterialClass * Get_Preset(PresetType type)
void Get_Diffuse(Vector3 *set_color) const
WW3DErrorType Save_W3D(ChunkSaveClass &csave)
ColorSourceType Get_Diffuse_Color_Source(void)
ColorSourceType Get_Emissive_Color_Source(void)
ColorSourceType Get_Ambient_Color_Source(void)
@ COPY_SPECULAR_TO_DIFFUSE
void Parse_Mapping_Args(const W3dVertexMaterialStruct &vmat, char *mapping0_arg_buffer, char *mapping1_arg_buffer)
void Set_Specular(const Vector3 &color)
void Set_Diffuse(const Vector3 &color)
int Get_UV_Source(int stage)
void Set_Ambient(const Vector3 &color)
void Set_Flag(FlagsType flag, bool onoff)
void Set_Shininess(float shin)
void Set_Emissive(const Vector3 &color)
VertexMaterialClass(void)
void Set_Ambient_Color_Source(ColorSourceType src)
void Get_Emissive(Vector3 *set_color) const
void Set_Mapper(TextureMapperClass *mapper, int stage=0)
void Get_Ambient(Vector3 *set_color) const
void Get_Specular(Vector3 *set_color) const
void Set_Emissive_Color_Source(ColorSourceType src)
WW3DErrorType Load_W3D(ChunkLoadClass &cload)
~VertexMaterialClass(void)
VertexMaterialClass & operator=(const VertexMaterialClass &src)
void Set_Name(const char *name)
float Get_Opacity(void) const
void Init_From_Material3(const W3dMaterial3Struct &mat3)
void Set_Opacity(float o)
void Set_Diffuse_Color_Source(ColorSourceType src)
void Set_UV_Source(int stage, int array_index)
static void Convert_Color(const W3dRGBStruct &rgb, Vector3 *set)
static bool Is_Coloring_Enabled()
#define REF_PTR_RELEASE(x)
W3dRGBStruct SpecularCoefficients
W3dRGBStruct EmissiveCoefficients
W3dRGBStruct DiffuseCoefficients
W3dRGBStruct SpecularColor
W3dRGBStruct AmbientCoefficients
W3dRGBStruct DiffuseColor