Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
dx8fvf.h
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
43#if defined(_MSC_VER)
44#pragma once
45#endif
46
47#ifndef DX8_FVF_H
48#define DX8_FVF_H
49
50#include "always.h"
51#include <d3d8.h>
52#ifdef WWDEBUG
53#include "wwdebug.h"
54#endif
55
56class StringClass;
57
58enum {
59 DX8_FVF_XYZ = D3DFVF_XYZ,
60 DX8_FVF_XYZN = D3DFVF_XYZ|D3DFVF_NORMAL,
61 DX8_FVF_XYZNUV1 = D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1,
62 DX8_FVF_XYZNUV2 = D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX2,
63 DX8_FVF_XYZNDUV1 = D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1|D3DFVF_DIFFUSE,
64 DX8_FVF_XYZNDUV2 = D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX2|D3DFVF_DIFFUSE,
65 DX8_FVF_XYZDUV1 = D3DFVF_XYZ|D3DFVF_TEX1|D3DFVF_DIFFUSE,
66 DX8_FVF_XYZDUV2 = D3DFVF_XYZ|D3DFVF_TEX2|D3DFVF_DIFFUSE,
67 DX8_FVF_XYZUV1 = D3DFVF_XYZ|D3DFVF_TEX1,
68 DX8_FVF_XYZUV2 = D3DFVF_XYZ|D3DFVF_TEX2,
69 DX8_FVF_XYZNDUV1TG3 = (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX4|D3DFVF_TEXCOORDSIZE2(0)|D3DFVF_TEXCOORDSIZE3(1)|D3DFVF_TEXCOORDSIZE3(2)|D3DFVF_TEXCOORDSIZE3(3)),
70 DX8_FVF_XYZNUV2DMAP = (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX3 | D3DFVF_TEXCOORDSIZE1(0) | D3DFVF_TEXCOORDSIZE4(1) | D3DFVF_TEXCOORDSIZE2(2) ),
71 DX8_FVF_XYZNDCUBEMAP = D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE //|D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE3(0)
72};
73
74// ----------------------------------------------------------------------------
75//
76// Util structures for vertex buffer handling. Cast the void pointer returned
77// by the vertex buffer to one of these structures.
78//
79// ----------------------------------------------------------------------------
80
82{
83 float x;
84 float y;
85 float z;
86};
87
89{
90 float x;
91 float y;
92 float z;
93 float nx;
94 float ny;
95 float nz;
96 float u1;
97 float v1;
98};
99
101{
102 float x;
103 float y;
104 float z;
105 float nx;
106 float ny;
107 float nz;
108 float u1;
109 float v1;
110 float u2;
111 float v2;
112};
113
115{
116 float x;
117 float y;
118 float z;
119 float nx;
120 float ny;
121 float nz;
122};
123
125{
126 float x;
127 float y;
128 float z;
129 float nx;
130 float ny;
131 float nz;
132 unsigned diffuse;
133 float u1;
134 float v1;
135};
136
138{
139 float x;
140 float y;
141 float z;
142 float nx;
143 float ny;
144 float nz;
145 unsigned diffuse;
146 float u1;
147 float v1;
148 float u2;
149 float v2;
150};
151
153{
154 float x;
155 float y;
156 float z;
157 unsigned diffuse;
158 float u1;
159 float v1;
160};
161
163{
164 float x;
165 float y;
166 float z;
167 unsigned diffuse;
168 float u1;
169 float v1;
170 float u2;
171 float v2;
172};
173
175{
176 float x;
177 float y;
178 float z;
179 float u1;
180 float v1;
181};
182
184{
185 float x;
186 float y;
187 float z;
188 float u1;
189 float v1;
190 float u2;
191 float v2;
192};
193
194// todo KJM compress
196{
197 float x;
198 float y;
199 float z;
200 float nx;
201 float ny;
202 float nz;
203 unsigned diffuse;
204 float u1;
205 float v1;
206 float Sx;
207 float Sy;
208 float Sz;
209 float Tx;
210 float Ty;
211 float Tz;
212 float SxTx;
213 float SxTy;
214 float SxTz;
215};
216
217
218// displacement mapping format
220{
221 float x;
222 float y;
223 float z;
224 float nx;
225 float ny;
226 float nz;
227 float T1x;
228 float T1y;
229 float T1z;
230 float T1w;
231 float T2x;
232 float T2y;
233};
234
235// cube map format (texcoords are normally generated)
237{
238 float x;
239 float y;
240 float z;
241 float nx;
242 float ny;
243 float nz;
244 unsigned diffuse;
245// float u1;
246// float v1;
247// float w1;
248};
249
250// FVF info class can be created for any legal FVF. It constructs information
251// of offsets to various elements in the vertex buffer.
252
253class FVFInfoClass : public W3DMPO
254{
256
257 mutable unsigned FVF;
258 mutable unsigned fvf_size;
259
260 unsigned location_offset;
261 unsigned normal_offset;
262 unsigned blend_offset;
263 unsigned texcoord_offset[D3DDP_MAXTEXCOORD];
264 unsigned diffuse_offset;
265 unsigned specular_offset;
266public:
267 FVFInfoClass(unsigned FVF, unsigned vertex_size=0);
268
269 inline unsigned Get_Location_Offset() const { return location_offset; }
270 inline unsigned Get_Normal_Offset() const { return normal_offset; }
271#ifdef WWDEBUG
272 inline unsigned Get_Tex_Offset(unsigned int n) const { WWASSERT(n<D3DDP_MAXTEXCOORD); return texcoord_offset[n]; }
273#else
274 inline unsigned Get_Tex_Offset(unsigned int n) const { return texcoord_offset[n]; }
275#endif
276
277 inline unsigned Get_Diffuse_Offset() const { return diffuse_offset; }
278 inline unsigned Get_Specular_Offset() const { return specular_offset; }
279 inline unsigned Get_FVF() const { return FVF; }
280 inline unsigned Get_FVF_Size() const { return fvf_size; }
281
282 void Get_FVF_Name(StringClass& fvfname) const; // For debug purposes
283
284 // for enabling vertex shaders
285 inline void Set_FVF(unsigned fvf) const { FVF=fvf; }
286 inline void Set_FVF_Size(unsigned size) const { fvf_size=size; }
287};
288
289
290#endif
#define WWASSERT
#define W3DMPO_GLUE(ARGCLASS)
Definition always.h:120
unsigned Get_Tex_Offset(unsigned int n) const
Definition dx8fvf.h:274
unsigned Get_FVF_Size() const
Definition dx8fvf.h:280
void Get_FVF_Name(StringClass &fvfname) const
Definition dx8fvf.cpp:85
unsigned Get_Diffuse_Offset() const
Definition dx8fvf.h:277
void Set_FVF_Size(unsigned size) const
Definition dx8fvf.h:286
unsigned Get_Specular_Offset() const
Definition dx8fvf.h:278
unsigned Get_FVF() const
Definition dx8fvf.h:279
unsigned Get_Location_Offset() const
Definition dx8fvf.h:269
void Set_FVF(unsigned fvf) const
Definition dx8fvf.h:285
unsigned Get_Normal_Offset() const
Definition dx8fvf.h:270
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
unsigned diffuse
Definition dx8fvf.h:157
unsigned diffuse
Definition dx8fvf.h:167