Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
dx8fvf.cpp
Go to the documentation of this file.
1/*
2** Command & Conquer Generals Zero Hour(tm)
3** Copyright 2025 Electronic Arts Inc.
4**
5** This program is free software: you can redistribute it and/or modify
6** it under the terms of the GNU General Public License as published by
7** the Free Software Foundation, either version 3 of the License, or
8** (at your option) any later version.
9**
10** This program is distributed in the hope that it will be useful,
11** but WITHOUT ANY WARRANTY; without even the implied warranty of
12** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13** GNU General Public License for more details.
14**
15** You should have received a copy of the GNU General Public License
16** along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19/***********************************************************************************************
20 *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
21 ***********************************************************************************************
22 * *
23 * Project Name : ww3d *
24 * *
25 * $Archive:: /Commando/Code/ww3d2/dx8fvf.h $*
26 * *
27 * Original Author:: Jani Penttinen *
28 * *
29 * $Author:: Kenny Mitchell *
30 * *
31 * $Modtime:: 06/26/02 5:06p $*
32 * *
33 * $Revision:: 7 $*
34 * *
35 * 06/26/02 KM VB Vertex format update for shaders *
36 * 07/17/02 KM VB Vertex format update for displacement mapping *
37 * 08/01/02 KM VB Vertex format update for cube mapping *
38 *---------------------------------------------------------------------------------------------*
39 * Functions: *
40 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
41
42#include "dx8fvf.h"
43#include "wwstring.h"
44#include <D3dx8core.h>
45
46static unsigned Get_FVF_Vertex_Size(unsigned FVF)
47{
48 return D3DXGetFVFVertexSize(FVF);
49}
50
51FVFInfoClass::FVFInfoClass(unsigned FVF_, unsigned vertex_size)
52 :
53 FVF(FVF_),
54 fvf_size(FVF!=0 ? Get_FVF_Vertex_Size(FVF) : vertex_size)
55{
56 location_offset=0;
57 blend_offset=location_offset;
58
59 if ((FVF&D3DFVF_XYZ)==D3DFVF_XYZ) blend_offset+=3*sizeof(float);
60 normal_offset=blend_offset;
61
62 if ( ((FVF&D3DFVF_XYZB4)==D3DFVF_XYZB4) &&
63 ((FVF&D3DFVF_LASTBETA_UBYTE4)==D3DFVF_LASTBETA_UBYTE4) ) normal_offset+=3*sizeof(float)+sizeof(DWORD);
64 diffuse_offset=normal_offset;
65
66 if ((FVF&D3DFVF_NORMAL)==D3DFVF_NORMAL) diffuse_offset+=3*sizeof(float);
67 specular_offset=diffuse_offset;
68
69 if ((FVF&D3DFVF_DIFFUSE)==D3DFVF_DIFFUSE) specular_offset+=sizeof(DWORD);
70 texcoord_offset[0]=specular_offset;
71
72 if ((FVF&D3DFVF_SPECULAR)==D3DFVF_SPECULAR) texcoord_offset[0]+=sizeof(DWORD);
73
74 for (unsigned int i=1; i<D3DDP_MAXTEXCOORD; i++)
75 {
76 texcoord_offset[i]=texcoord_offset[i-1];
77
78 if ((int(FVF)&D3DFVF_TEXCOORDSIZE1(i-1))==D3DFVF_TEXCOORDSIZE1(i-1)) texcoord_offset[i]+=sizeof(float);
79 else if ((int(FVF)&D3DFVF_TEXCOORDSIZE2(i-1))==D3DFVF_TEXCOORDSIZE2(i-1)) texcoord_offset[i]+=2*sizeof(float);
80 else if ((int(FVF)&D3DFVF_TEXCOORDSIZE3(i-1))==D3DFVF_TEXCOORDSIZE3(i-1)) texcoord_offset[i]+=3*sizeof(float);
81 else if ((int(FVF)&D3DFVF_TEXCOORDSIZE4(i-1))==D3DFVF_TEXCOORDSIZE4(i-1)) texcoord_offset[i]+=4*sizeof(float);
82 }
83}
84
86{
87 switch (Get_FVF()) {
88 case DX8_FVF_XYZ: fvfname="D3DFVF_XYZ"; break;
89 case DX8_FVF_XYZN: fvfname="D3DFVF_XYZ|D3DFVF_NORMAL"; break;
90 case DX8_FVF_XYZNUV1: fvfname="D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1"; break;
91 case DX8_FVF_XYZNUV2: fvfname="D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX2"; break;
92 case DX8_FVF_XYZNDUV1: fvfname="D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1|D3DFVF_DIFFUSE"; break;
93 case DX8_FVF_XYZNDUV2: fvfname="D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX2|D3DFVF_DIFFUSE"; break;
94 case DX8_FVF_XYZDUV1: fvfname="D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_DIFFUSE"; break;
95 case DX8_FVF_XYZDUV2: fvfname="D3DFVF_XYZ|D3DFVF_TEX2|D3DFVF_DIFFUSE"; break;
96 case DX8_FVF_XYZUV1: fvfname="D3DFVF_XYZ|D3DFVF_TEX1"; break;
97 case DX8_FVF_XYZUV2: fvfname="D3DFVF_XYZ|D3DFVF_TEX2"; break;
98 case DX8_FVF_XYZNDUV1TG3 : fvfname="(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX4|D3DFVF_TEXCOORDSIZE2(0)|D3DFVF_TEXCOORDSIZE3(1)|D3DFVF_TEXCOORDSIZE3(2)|D3DFVF_TEXCOORDSIZE3(3))"; break;
99 case DX8_FVF_XYZNUV2DMAP : fvfname="(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX3|D3DFVF_TEXCOORDSIZE1(0)|D3DFVF_TEXCOORDSIZE4(1)|D3DFVF_TEXCOORDSIZE2(2))"; break;
100 case DX8_FVF_XYZNDCUBEMAP : fvfname="(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX1|D3DFVFTEXCOORDSIZE3(0)"; break;
101 default: fvfname="Unknown!";
102 }
103}
unsigned long DWORD
Definition bittype.h:57
void Get_FVF_Name(StringClass &fvfname) const
Definition dx8fvf.cpp:85
unsigned Get_FVF() const
Definition dx8fvf.h:279
FVFInfoClass(unsigned FVF, unsigned vertex_size=0)
Definition dx8fvf.cpp:51
@ DX8_FVF_XYZDUV2
Definition dx8fvf.h:66
@ DX8_FVF_XYZNUV2DMAP
Definition dx8fvf.h:70
@ DX8_FVF_XYZNDUV2
Definition dx8fvf.h:64
@ DX8_FVF_XYZUV2
Definition dx8fvf.h:68
@ DX8_FVF_XYZNUV2
Definition dx8fvf.h:62
@ DX8_FVF_XYZUV1
Definition dx8fvf.h:67
@ DX8_FVF_XYZNUV1
Definition dx8fvf.h:61
@ DX8_FVF_XYZNDUV1
Definition dx8fvf.h:63
@ DX8_FVF_XYZNDCUBEMAP
Definition dx8fvf.h:71
@ DX8_FVF_XYZ
Definition dx8fvf.h:59
@ DX8_FVF_XYZDUV1
Definition dx8fvf.h:65
@ DX8_FVF_XYZNDUV1TG3
Definition dx8fvf.h:69
@ DX8_FVF_XYZN
Definition dx8fvf.h:60