Richard Boegli's CnC_Generals_Zero_Hour Fork WIP
This is documentation of Richard Boegil's Zero Hour Fork
 
Loading...
Searching...
No Matches
part_buf.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 : G *
24 * *
25 * $Archive:: /VSS_Sync/ww3d2/part_buf.h $*
26 * *
27 * $Author:: Vss_sync $*
28 * *
29 * $Modtime:: 8/29/01 7:29p $*
30 * *
31 * $Revision:: 9 $*
32 * *
33 *-------------------------------------------------------------------------*
34 * Functions: *
35 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
36#if defined(_MSC_VER)
37#pragma once
38#endif
39
40#ifndef PART_BUF_H
41#define PART_BUF_H
42
43#include "rendobj.h"
44#include "pointgr.h"
45#include "seglinerenderer.h"
46#include "linegrp.h"
47
49template<class T> struct ParticlePropertyStruct;
50
56** in this case the older particles can be ignored. Therefore
57** ParticleBufferClass contains a circular buffer of NewParticleStructs, and
58** new ones overwrite the oldest in the case of overflows.
59*/
61{
62 Vector3 Position; // Particle position in worldspace.
63 Vector3 Velocity; // Particle velocity in worldspace.
64 unsigned int TimeStamp; // Millisecond time at creation.
65 unsigned char GroupID; // Group ID of the particle
66
67 // These are needed by DynamicVectorClass (will probably never be used).
69 {
70 return (p.TimeStamp != TimeStamp) || (p.Position != Position);
71 }
73 {
74 return (p.TimeStamp == TimeStamp) && (p.Position == Position);
75 }
76};
77
88{
89 public:
90
91 ParticleBufferClass(ParticleEmitterClass *emitter, unsigned int buffer_size,
94 float orient_rnd, ParticlePropertyStruct<float> &frame,
96 float max_age, float future_start, TextureClass *tex, ShaderClass shader, bool pingpong,
97 int render_mode, int frame_mode, const W3dEmitterLinePropertiesStruct * line_props);
98
101 virtual ~ParticleBufferClass(void);
102
103 /*
104 ** RenderObjClass Interface:
105 */
106 virtual RenderObjClass * Clone(void) const;
107 virtual int Class_ID(void) const { return CLASSID_PARTICLEBUFFER; }
108
109 virtual int Get_Num_Polys(void) const;
110 int Get_Particle_Count(void) const;
111
112 // Update particle state and draw the particles.
113 virtual void Render(RenderInfoClass & rinfo);
114
115 // Scales the size of the individual particles but doesn't affect their
116 // position (and therefore the size of the particle system as a whole)
117 virtual void Scale(float scale);
118
119 // The particle buffer never receives a Set_Transform/Position call,
120 // evem though its bounding volume changes. Since bounding volume
121 // invalidations ordinarily occur when these functions are called,
122 // the cached bounding volumes will not be invalidated unless we do
123 // it elsewhere (such as here). We also need to call the particle
124 // emitter's Emit() function (done here to avoid order dependence).
125 virtual void On_Frame_Update(void);
126
127 virtual void Notify_Added(SceneClass * scene);
128 virtual void Notify_Removed(SceneClass * scene);
129
130 virtual void Get_Obj_Space_Bounding_Sphere(SphereClass & sphere) const;
131 virtual void Get_Obj_Space_Bounding_Box(AABoxClass & box) const;
132
134 // Render Object Interface - Predictive LOD
136
137 virtual void Prepare_LOD(CameraClass &camera);
138 virtual void Increment_LOD(void);
139 virtual void Decrement_LOD(void);
140 virtual float Get_Cost(void) const;
141 virtual float Get_Value(void) const;
142 virtual float Get_Post_Increment_Value(void) const;
143 virtual void Set_LOD_Level(int lod);
144 virtual int Get_LOD_Level(void) const;
145 virtual int Get_LOD_Count(void) const;
146 virtual void Set_LOD_Bias(float bias) { LodBias = MAX(bias, 0.0f); }
147 virtual int Calculate_Cost_Value_Arrays(float screen_area, float *values, float *costs) const;
148
149 /*
150 ** These members are not part of the RenderObjClass Interface:
151 */
155 void Reset_Rotations(ParticlePropertyStruct<float> &new_rotations, float orient_rnd);
158
159 // This informs the buffer that the emitter is dead, so it can release
160 // its pointer to it and be removed itself after all its particles dies
161 // out.
162 void Emitter_Is_Dead(void);
163
164 // This set's the buffer's current emitter - this should usually be
165 // called only by the emitter's copy constructor after it clones a
166 // buffer.
167 void Set_Emitter(ParticleEmitterClass *emitter);
168
169 // from RenderObj...
170 virtual bool Is_Complete(void) { return IsEmitterDead && !NonNewNum && !NewNum; }
171
172 // This adds an uninitialized NewParticleStuct to the new particle
173 // buffer and returns its address so the particle emitter can
174 // initialize it. This is how the emitter sends new particles to the
175 // buffer - it is done this way to avoid needless copying.
177
178 // Change the acceleration of the particles on the fly
179 void Set_Acceleration (const Vector3 &acceleration) { Accel = acceleration; HasAccel = ((Accel.X != 0) || (Accel.Y != 0) || (Accel.Z != 0)); }
180
181 //
182 // Inline accessors.
183 // These methods are provided as a means to get the emitter's settings.
184 //
185 int Get_Render_Mode (void) const { return RenderMode; }
186 int Get_Frame_Mode (void) const { return FrameMode; }
187 float Get_Particle_Size (void) const { return SizeKeyFrameValues[0]; }
188 Vector3 Get_Acceleration (void) const { return Accel * 1000000.0F; }
189 float Get_Lifetime (void) const { return (float(MaxAge)) / 1000.0F; }
190 float Get_Future_Start_Time(void) const{ return (float(FutureStartTime)) / 1000.0f; }
191 Vector3 Get_Start_Color (void) const { return ColorKeyFrameValues[0]; }
192 float Get_Start_Opacity (void) const { return AlphaKeyFrameValues[0]; }
195 TextureClass * Get_Texture (void) const;
196 void Set_Texture (TextureClass *tex);
197 float Get_Fade_Time (void) const { return (NumColorKeyFrames > 1) ? (((float)ColorKeyFrameTimes[1]) / 1000.0f) : 0.0f; }
198 ShaderClass Get_Shader (void) const;
199
200 //
201 // Line rendering properties. These functions will always return
202 // a default value if line rendering is not enabled.
203 //
204 int Get_Line_Texture_Mapping_Mode(void) const;
205 int Is_Merge_Intersections(void) const;
206 int Is_Freeze_Random(void) const;
207 int Is_Sorting_Disabled(void) const;
208 int Are_End_Caps_Enabled(void) const;
209 int Get_Subdivision_Level(void) const;
210 float Get_Noise_Amplitude(void) const;
211 float Get_Merge_Abort_Factor(void) const;
212 float Get_Texture_Tile_Factor(void) const;
213 Vector2 Get_UV_Offset_Rate(void) const;
214
215
216 // This is a utility function only meant to be called by the particle emitter.
217 unsigned int Get_Buffer_Size(void) const { return MaxNum; }
218
219 // Note: Caller IS RESPONSIBLE for freeing any memory allocated by these calls
227
228 void Set_Current_GroupID(unsigned char grp) { CurrentGroupID = grp; }
229
230 // Total Active Particle Buffer Count
231 static unsigned int Get_Total_Active_Count( void ) { return TotalActiveCount; }
232
233 // Global control of particle LOD.
234 static void Set_LOD_Max_Screen_Size(int lod_level,float max_screen_size);
235 static float Get_LOD_Max_Screen_Size(int lod_level);
236
237 protected:
238
239 virtual void Update_Cached_Bounding_Volumes(void) const;
240
241 // render the particle system as a collection of particles
242 void Render_Particles(RenderInfoClass & rinfo);
243
244 // render the particle system as a line
245 void Render_Line(RenderInfoClass & rinfo);
246
247 // render the particle system as a line group
249
250 // Update the kinematic particle state. This includes getting new
251 // particles from the new particle queue, updating velocity/position
252 // for any existing particles, killing old ones, and updating
253 // LastUpdateTime.
255
256 // Update the visual particle state. This includes updating color/size
257 // for all existing particles. Only needs to happen at rendering time.
259
260 // Update the bounding box. (Updates the particle state if it needs to).
261 void Update_Bounding_Box(void);
262
263 // Helper function for Render_Particles and Render_LineGroup
264 void Generate_APT(ShareBufferClass <unsigned int> **apt,unsigned int &active_point_count);
266
267 // Get new particles from the emitter and write them into the circular
268 // particle buffer, possibly overwriting older particles. Perform
269 // partial-interval upddate on them as well.
270 void Get_New_Particles(void);
271
272 // Kill all remaining particles which will be above their maxage at the
273 // end of this time interval.
274 void Kill_Old_Particles(void);
275
276 // Update all living non-new particles according to time elapsed since
277 // last update.
278 void Update_Non_New_Particles(unsigned int elapsed);
279
280 // Seperate circular buffer used by the emitter to pass new particles.
281 // It is implemented as an array, start and end indices and a count (to
282 // differentiate between completely full and completely empty).
287
288 // State global to the entire particle buffer.
289 int RenderMode; // rendering mode being used (settings found in w3d_file.h)
290 int FrameMode; // frame mode (settings found in w3d_file.h - 1x1..16x16)
291 Vector3 Accel; // Worldspace acceleration per ms^2.
292 bool HasAccel; // Is the acceleration non-zero?
293 unsigned int MaxAge; // Maximum age in milliseconds.
294 unsigned int FutureStartTime;// Future start time in milliseconds
295 unsigned int LastUpdateTime;// Time at last update.
297 float MaxSize; // Used for BBox calculations
298
299 // Circular buffer implementation. This is actually 2 sequential
300 // circular buffers: one for non-new particles and one for new
301 // particles (the distinction is needed because the two types of
302 // particles are updated differently).
303 // Besides the head/tail indices, a count is used for each buffer to
304 // distinguish between full and empty.
305 unsigned int MaxNum; // Maximum number of particles.
306 unsigned int Start; // Start of existing (non-new) particles.
307 unsigned int End; // End of existing (non-new) particles.
308 unsigned int NewEnd; // End of new particles.
309 int NonNewNum; // Non-new entry count (to know when empty).
310 int NewNum; // New entry count (to know when empty).
311
312 // Worldspace-aligned bounding box:
315
316 // At least one keyframe must exist for each property (time 0).
317 // If a randomizer is zero and there are no additional keyframes for
318 // that property (or the keyframes are all equal), all the arrays for
319 // that property are NULL (since they will never be used), except for
320 // the Values array which will have one entry (the constant value).
321 // Note that the rotation and orientation properties are different -
322 // only orientation is used in rendering. The rotation data is only
323 // used to compute the orientations. So the condition is different -
324 // if rotation and orientation randomizers, and all rotation keyframes
325 // are all zero, then all of the arrays will be NULL (including the
326 // Values array).
327 unsigned int NumColorKeyFrames;
328 unsigned int * ColorKeyFrameTimes; // 0th entry is always 0
331 unsigned int NumAlphaKeyFrames;
332 unsigned int * AlphaKeyFrameTimes; // 0th entry is always 0
335 unsigned int NumSizeKeyFrames;
336 unsigned int * SizeKeyFrameTimes; // 0th entry is always 0
340 unsigned int * RotationKeyFrameTimes; // 0th entry is always 0
341 float * RotationKeyFrameValues; // In rotations per millisecond
342 float * HalfRotationKeyFrameDeltas; // (* 0.5f)
343 float * OrientationKeyFrameValues; // Rotation preintegrated to keyframe times
344 unsigned int NumFrameKeyFrames;
345 unsigned int * FrameKeyFrameTimes; // 0th entry is always 0
349 unsigned int * BlurTimeKeyFrameTimes; // 0th entry is always 0
352
353 Vector4 DefaultTailDiffuse; // For line group mode, when all the tails are the same color
354
355 // These tables are indexed by the array position in the particle buffer.
356 // The table size is either the smallest power of two equal or larger
357 // than the buffer size, or MAX_RANDOM_ENTRIES (defined in the .cpp
358 // file - MUST be a power of two), whichever is smaller. Note that if a
359 // randomizer is zero, the table will have one entry (containing zero),
360 // which is why each property has its own NumXXXRandomEntries variable.
361 // If a randomizer is zero and the property has no keyframes, the table
362 // will be NULL since it will never be used (property is constant)).
363 unsigned int NumRandomColorEntriesMinus1; // 2^n - 1 so can be used as a mask also
365 unsigned int NumRandomAlphaEntriesMinus1; // 2^n - 1 so can be used as a mask also
367 unsigned int NumRandomSizeEntriesMinus1; // 2^n - 1 so can be used as a mask also
369 unsigned int NumRandomRotationEntriesMinus1; // 2^n - 1 so can be used as a mask also
371 unsigned int NumRandomOrientationEntriesMinus1; // 2^n - 1 so can be used as a mask also
373 unsigned int NumRandomFrameEntriesMinus1; // 2^n - 1 so can be used as a mask also
375 unsigned int NumRandomBlurTimeEntriesMinus1; // 2^n - 1 so can be used as a mask also
377
385
386 // This object implements particle rendering
388
389 // This object implements line rendering
391
392 // This object implements line group rendering
394
395 // These are shared with the point group. The position, color and alpha
396 // arrays serve double duty: they are used to store and update particle
397 // state and also to pass point information to the point group. The
398 // active point table is used to communicate to the point group which
399 // points are active (it is only used if all are not active)..
400 ShareBufferClass<Vector3> * Position[2]; // Only [0] used unless pingpong enabled
401 ShareBufferClass<Vector4> * Diffuse; // passed into point group
406 ShareBufferClass<float> * UCoord; // Only used for line groups, uses Frame keyframes
407 ShareBufferClass<Vector3> * TailPosition; // Only used for line groups
408 ShareBufferClass<Vector4> * TailDiffuse; // Only used for line groups
411 ShareBufferClass<unsigned char> * GroupID; // Only used for lines
412
413 // Do we keep two ping-pong position buffers (for collision and possibly other effects
414 // which need the previous frames position as well as this frames)
416
417 // Additional per-particle state:
418 Vector3 * Velocity; // World units per millisecond.
419 unsigned int * TimeStamp; // Millisecond time at creation.
420
421 // This pointer is used for synchronization - the emitter is called to
422 // add new particles at the start of the buffers render function - to
423 // prevent behavior which is dependent on the relative time order of
424 // the emitter and buffer in the rendering list.
426
427 // These are used for decimating particles for LOD purposes. The
428 // threshold is compared vs. an array filled with a random permutation
429 // of the numbers 0 to 15, and any particle whose entry (modulo 16) is
430 // less than the threshold is not rendered. So if DecimationThreshold
431 // is 0 (the minimum value), all particles are rendered - if it is 16
432 // (the maximum value) none are rendered.
434 static const unsigned int PermutationArray[16];
435
436 // LOD values
437 unsigned int LodCount;
438 float Cost[17]; // Cost array needs one entry for each LOD level
439 float Value[18]; // Value array needs one more entry than # of LODs
440 float LodBias;
441
442 // Projected area, used for LOD purposes
444
445 // Total Active Particle Buffer Count
446 static unsigned int TotalActiveCount;
447
448 // Static array of screen-size clamps for the 17 possible LOD levels a
449 // particle buffer can have. We can change these from being global to
450 // being per-buffer later if we wish. Default is NO_MAX_SCREEN_SIZE.
451 static float LODMaxScreenSizes[17];
452
459
460 // Determine based on shader and texture
461 // what the tail color should be
463
464 unsigned char CurrentGroupID;
465};
466
467#endif // PART_BUF_H
468
Color scale(const Color &a, const Color &b)
Definition GameMtl.cpp:722
#define MAX(a, b)
Definition always.h:185
virtual bool Is_Complete(void)
Definition part_buf.h:170
void Reset_Blur_Times(ParticlePropertyStruct< float > &new_blur_times)
unsigned int * ColorKeyFrameTimes
Definition part_buf.h:328
Vector3 Get_Acceleration(void) const
Definition part_buf.h:188
int Get_Frame_Mode(void) const
Definition part_buf.h:186
ShaderClass Get_Shader(void) const
float * FrameKeyFrameDeltas
Definition part_buf.h:347
unsigned int NewEnd
Definition part_buf.h:308
float Get_Initial_Orientation_Random(void) const
Definition part_buf.h:226
virtual int Calculate_Cost_Value_Arrays(float screen_area, float *values, float *costs) const
void Update_Bounding_Box(void)
static float Get_LOD_Max_Screen_Size(int lod_level)
float * RandomRotationEntries
Definition part_buf.h:370
ParticleEmitterClass * Emitter
Definition part_buf.h:425
SegLineRendererClass * LineRenderer
Definition part_buf.h:390
void Get_Rotation_Key_Frames(ParticlePropertyStruct< float > &rotations) const
void Set_Acceleration(const Vector3 &acceleration)
Definition part_buf.h:179
unsigned int * BlurTimeKeyFrameTimes
Definition part_buf.h:349
unsigned int DecimationThreshold
Definition part_buf.h:433
void Get_Frame_Key_Frames(ParticlePropertyStruct< float > &frames) const
int Is_Freeze_Random(void) const
virtual void Prepare_LOD(CameraClass &camera)
virtual void Notify_Removed(SceneClass *scene)
unsigned int * FrameKeyFrameTimes
Definition part_buf.h:345
virtual int Class_ID(void) const
Definition part_buf.h:107
ShareBufferClass< float > * Size
Definition part_buf.h:404
ShareBufferClass< uint8 > * Frame
Definition part_buf.h:405
virtual float Get_Cost(void) const
ShareBufferClass< float > * Alpha
Definition part_buf.h:403
unsigned int Start
Definition part_buf.h:306
virtual void Scale(float scale)
unsigned int NumFrameKeyFrames
Definition part_buf.h:344
unsigned int * RotationKeyFrameTimes
Definition part_buf.h:340
unsigned int NumRandomFrameEntriesMinus1
Definition part_buf.h:373
ShareBufferClass< unsigned char > * GroupID
Definition part_buf.h:411
unsigned char CurrentGroupID
Definition part_buf.h:464
float * BlurTimeKeyFrameValues
Definition part_buf.h:350
unsigned int NumRandomBlurTimeEntriesMinus1
Definition part_buf.h:375
virtual void Render(RenderInfoClass &rinfo)
Definition part_buf.cpp:815
unsigned int LastUpdateTime
Definition part_buf.h:295
virtual void Increment_LOD(void)
virtual int Get_LOD_Count(void) const
virtual ~ParticleBufferClass(void)
Definition part_buf.cpp:729
NewParticleStruct * Add_Uninitialized_New_Particle(void)
float Get_Future_Start_Time(void) const
Definition part_buf.h:190
unsigned int NumSizeKeyFrames
Definition part_buf.h:335
TailDiffuseTypeEnum Determine_Tail_Diffuse()
ShareBufferClass< Vector3 > * TailPosition
Definition part_buf.h:407
float Get_End_Opacity(void) const
Definition part_buf.h:194
void Render_Particles(RenderInfoClass &rinfo)
Definition part_buf.cpp:939
ParticleBufferClass(ParticleEmitterClass *emitter, unsigned int buffer_size, ParticlePropertyStruct< Vector3 > &color, ParticlePropertyStruct< float > &opacity, ParticlePropertyStruct< float > &size, ParticlePropertyStruct< float > &rotation, float orient_rnd, ParticlePropertyStruct< float > &frame, ParticlePropertyStruct< float > &blurtime, Vector3 accel, float max_age, float future_start, TextureClass *tex, ShaderClass shader, bool pingpong, int render_mode, int frame_mode, const W3dEmitterLinePropertiesStruct *line_props)
Definition part_buf.cpp:85
void Set_Texture(TextureClass *tex)
unsigned int LodCount
Definition part_buf.h:437
unsigned int FutureStartTime
Definition part_buf.h:294
float * RandomAlphaEntries
Definition part_buf.h:366
void Get_Size_Key_Frames(ParticlePropertyStruct< float > &sizes) const
void Generate_APT(ShareBufferClass< unsigned int > **apt, unsigned int &active_point_count)
Definition part_buf.cpp:856
int Get_Render_Mode(void) const
Definition part_buf.h:185
void Update_Visual_Particle_State(void)
void Get_Opacity_Key_Frames(ParticlePropertyStruct< float > &opacities) const
float * AlphaKeyFrameValues
Definition part_buf.h:333
float Get_Merge_Abort_Factor(void) const
float * AlphaKeyFrameDeltas
Definition part_buf.h:334
float Get_Texture_Tile_Factor(void) const
ShareBufferClass< Vector4 > * Diffuse
Definition part_buf.h:401
Vector3 Get_Start_Color(void) const
Definition part_buf.h:191
LineGroupClass * LineGroup
Definition part_buf.h:393
ShareBufferClass< unsigned int > * APT
Definition part_buf.h:410
virtual RenderObjClass * Clone(void) const
Definition part_buf.cpp:798
void Combine_Color_And_Alpha()
Definition part_buf.cpp:897
virtual void Set_LOD_Bias(float bias)
Definition part_buf.h:146
float Get_Particle_Size(void) const
Definition part_buf.h:187
unsigned int NewParticleQueueStart
Definition part_buf.h:284
void Reset_Opacity(ParticlePropertyStruct< float > &new_props)
unsigned int NumBlurTimeKeyFrames
Definition part_buf.h:348
unsigned int NumRandomSizeEntriesMinus1
Definition part_buf.h:367
float Get_Fade_Time(void) const
Definition part_buf.h:197
Vector3 * Velocity
Definition part_buf.h:418
unsigned int NewParticleQueueEnd
Definition part_buf.h:285
virtual void Update_Cached_Bounding_Volumes(void) const
ParticleBufferClass & operator=(const ParticleBufferClass &)
Definition part_buf.cpp:717
unsigned int Get_Buffer_Size(void) const
Definition part_buf.h:217
Vector3 * RandomColorEntries
Definition part_buf.h:364
unsigned int * AlphaKeyFrameTimes
Definition part_buf.h:332
float Get_Noise_Amplitude(void) const
void Get_Color_Key_Frames(ParticlePropertyStruct< Vector3 > &colors) const
float * OrientationKeyFrameValues
Definition part_buf.h:343
ShareBufferClass< Vector4 > * TailDiffuse
Definition part_buf.h:408
virtual void Get_Obj_Space_Bounding_Sphere(SphereClass &sphere) const
ShareBufferClass< Vector3 > * Color
Definition part_buf.h:402
void Reset_Rotations(ParticlePropertyStruct< float > &new_rotations, float orient_rnd)
float * BlurTimeKeyFrameDeltas
Definition part_buf.h:351
float InitialOrientationRandom
Definition part_buf.h:384
unsigned int MaxNum
Definition part_buf.h:305
float * RandomOrientationEntries
Definition part_buf.h:372
unsigned int NumRandomAlphaEntriesMinus1
Definition part_buf.h:365
Vector2 Get_UV_Offset_Rate(void) const
ShareBufferClass< uint8 > * Orientation
Definition part_buf.h:409
void Get_New_Particles(void)
int Get_Subdivision_Level(void) const
int Are_End_Caps_Enabled(void) const
virtual void Get_Obj_Space_Bounding_Box(AABoxClass &box) const
unsigned int * TimeStamp
Definition part_buf.h:419
unsigned int NumRandomOrientationEntriesMinus1
Definition part_buf.h:371
void Kill_Old_Particles(void)
Vector3 * ColorKeyFrameDeltas
Definition part_buf.h:330
float * RandomSizeEntries
Definition part_buf.h:368
ShareBufferClass< Vector3 > * Position[2]
Definition part_buf.h:400
TextureClass * Get_Texture(void) const
NewParticleStruct * NewParticleQueue
Definition part_buf.h:283
virtual float Get_Value(void) const
void Emitter_Is_Dead(void)
unsigned int MaxAge
Definition part_buf.h:293
void Update_Non_New_Particles(unsigned int elapsed)
unsigned int * SizeKeyFrameTimes
Definition part_buf.h:336
void Update_Kinematic_Particle_State(void)
AABoxClass BoundingBox
Definition part_buf.h:313
Vector3 Get_End_Color(void) const
Definition part_buf.h:193
virtual void Decrement_LOD(void)
void Reset_Size(ParticlePropertyStruct< float > &new_props)
void Render_Line(RenderInfoClass &rinfo)
Definition part_buf.cpp:985
float * SizeKeyFrameValues
Definition part_buf.h:337
unsigned int NumRandomColorEntriesMinus1
Definition part_buf.h:363
unsigned int NumColorKeyFrames
Definition part_buf.h:327
float * RandomBlurTimeEntries
Definition part_buf.h:376
static unsigned int Get_Total_Active_Count(void)
Definition part_buf.h:231
Vector4 DefaultTailDiffuse
Definition part_buf.h:353
float Get_Start_Opacity(void) const
Definition part_buf.h:192
unsigned int NumRotationKeyFrames
Definition part_buf.h:339
virtual int Get_LOD_Level(void) const
Vector3 * ColorKeyFrameValues
Definition part_buf.h:329
PointGroupClass * PointGroup
Definition part_buf.h:387
static unsigned int TotalActiveCount
Definition part_buf.h:446
static const unsigned int PermutationArray[16]
Definition part_buf.h:56
float Get_Lifetime(void) const
Definition part_buf.h:189
int Get_Particle_Count(void) const
Definition part_buf.cpp:810
float * RandomFrameEntries
Definition part_buf.h:374
unsigned int End
Definition part_buf.h:307
void Reset_Colors(ParticlePropertyStruct< Vector3 > &new_props)
int Get_Line_Texture_Mapping_Mode(void) const
int Is_Merge_Intersections(void) const
float * SizeKeyFrameDeltas
Definition part_buf.h:338
virtual void Set_LOD_Level(int lod)
virtual int Get_Num_Polys(void) const
Definition part_buf.cpp:804
ShareBufferClass< float > * UCoord
Definition part_buf.h:406
virtual float Get_Post_Increment_Value(void) const
void Reset_Frames(ParticlePropertyStruct< float > &new_frames)
int Is_Sorting_Disabled(void) const
float * RotationKeyFrameValues
Definition part_buf.h:341
float * HalfRotationKeyFrameDeltas
Definition part_buf.h:342
virtual void Notify_Added(SceneClass *scene)
void Render_Line_Group(RenderInfoClass &rinfo)
void Set_Current_GroupID(unsigned char grp)
Definition part_buf.h:228
static float LODMaxScreenSizes[17]
Definition part_buf.h:69
static void Set_LOD_Max_Screen_Size(int lod_level, float max_screen_size)
unsigned int NumAlphaKeyFrames
Definition part_buf.h:331
float * FrameKeyFrameValues
Definition part_buf.h:346
unsigned int NumRandomRotationEntriesMinus1
Definition part_buf.h:369
void Set_Emitter(ParticleEmitterClass *emitter)
virtual void On_Frame_Update(void)
void Get_Blur_Time_Key_Frames(ParticlePropertyStruct< float > &blurtimes) const
RenderObjClass(void)
Definition rendobj.cpp:170
@ CLASSID_PARTICLEBUFFER
Definition rendobj.h:215
bool operator==(const NewParticleStruct &p)
Definition part_buf.h:72
bool operator!=(const NewParticleStruct &p)
Definition part_buf.h:68
Vector3 Velocity
Definition part_buf.h:63
unsigned int TimeStamp
Definition part_buf.h:64
unsigned char GroupID
Definition part_buf.h:65
Vector3 Position
Definition part_buf.h:62