Table of Contents

Class ShapeBuilder

Namespace
Stride.Particles.ShapeBuilders
Assembly
Stride.Particles.dll

The ShapeBuilder base class is responsible for generating shapes (procedural mesh) ready for rendering from the particle data

[DataContract("ShapeBuilder")]
public abstract class ShapeBuilder
Inheritance
ShapeBuilder
Derived

Properties

QuadsPerParticle

Returns the number of quads required per particle to draw all particles. Assuming 1 Quad = 4 Vertices = 6 Indices

public abstract int QuadsPerParticle { get; protected set; }

Property Value

int

VertexLayoutHasChanged

Indicates that the required vertex layout has changed and UpdateVertexBuilder(ParticleVertexBuilder) should be called

public bool VertexLayoutHasChanged { get; protected set; }

Property Value

bool

Methods

BuildVertexBuffer(ref ParticleBufferState, Vector3, Vector3, ref Vector3, ref Quaternion, float, ref ParticleList, ref Matrix)

Builds the actual vertex buffer for the current frame using the particle data

public abstract int BuildVertexBuffer(ref ParticleBufferState bufferState, Vector3 invViewX, Vector3 invViewY, ref Vector3 spaceTranslation, ref Quaternion spaceRotation, float spaceScale, ref ParticleList sorter, ref Matrix viewProj)

Parameters

bufferState ParticleBufferState

Target particle buffer state, used to populate the assigned vertex buffer

invViewX Vector3

Unit vector X (right) in camera space, extracted from the inverse view matrix

invViewY Vector3

Unit vector Y (up) in camera space, extracted from the inverse view matrix

spaceTranslation Vector3

Translation of the target draw space in regard to the particle data (world or local)

spaceRotation Quaternion

Rotation of the target draw space in regard to the particle data (world or local)

spaceScale float

Uniform scale of the target draw space in regard to the particle data (world or local)

sorter ParticleList

Particle enumerator which can be iterated and returns sported particles

viewProj Matrix

The View-Projection matrix which is used for some shape builders

Returns

int

Circumcenter(ref Vector3, ref Vector3, ref Vector3)

Finds the circumcenter coordinates for triangle ABC

public static Vector3 Circumcenter(ref Vector3 A, ref Vector3 B, ref Vector3 C)

Parameters

A Vector3
B Vector3
C Vector3

Returns

Vector3

PreUpdate()

public virtual void PreUpdate()

PrepareVertexLayout(ParticlePoolFieldsList)

Check if ParticleVertexElements should be changed and set HasVertexLayoutChanged = true; if they do

public virtual void PrepareVertexLayout(ParticlePoolFieldsList fieldsList)

Parameters

fieldsList ParticlePoolFieldsList

A container for the ParticlePool which can poll if a certain field exists as an attribute

SetRequiredQuads(int, int, int)

Sets the required quads per particle and number of particles so that a sufficiently big buffer can be allocated

public virtual void SetRequiredQuads(int quadsPerParticle, int livingParticles, int totalParticles)

Parameters

quadsPerParticle int

Required quads per particle, assuming 1 quad = 4 vertices = 6 indices

livingParticles int

Number of living particles this frame

totalParticles int

Number of total number of possible particles for the parent emitter

UpdateVertexBuilder(ParticleVertexBuilder)

Should be invoked if the VertexLayoutHasChanged was true so that new layout fields can be added to the buffer builder

public virtual void UpdateVertexBuilder(ParticleVertexBuilder vertexBuilder)

Parameters

vertexBuilder ParticleVertexBuilder

Target vertex buffer stream builder which will be used for the current frame