Blitz3D+ Command Reference

ParticleBackend ( emitter )

Parameters

emitter - an existing CPU or GPU particle emitter entity

Description

Returns which backend simulates a particle emitter.

The result is 0 for an emitter made by CreateParticleEmitter and 1 for one made by CreateGPUParticleEmitter. The backend is fixed at creation and is preserved by CopyEntity.

This query does not wait for GPU work or clear ParticleError. An invalid or freed emitter handle raises a runtime error. Use it when displaying effect diagnostics or deciding whether CPU-only collision is available. The example displays a CPU fire on the left and a GPU fire on the right; their random streams need not match.

Requires Extended mode.

See also: CreateGPUParticleEmitter, CreateParticleEmitter, CountParticlesAsync.

Example

; ParticleBackend - Extended mode, DX12.

Graphics3D 800,600,0,2
SetBuffer BackBuffer()
If GPUParticlesSupported()=0 Then RuntimeError "GPU particles are unavailable."
VSync 0
FrameLimit 60
camera=CreateCamera()
PositionEntity camera,0,1,-5
CameraClsColor camera,10,15,30
emitter=CreateGPUParticleEmitter(10000)
If emitter=0 Then RuntimeError ParticleError$()
cpu=CreateParticleEmitter(500)
ParticlePreset cpu,1
PositionEntity cpu,-1,0,0
PositionEntity emitter,1,0,0
ParticlePreset emitter,1
timer=CreateTimer(60)
paused=False
While Not KeyHit(1)
    If KeyHit(25)
        paused=Not paused
        PauseParticles emitter,paused
    EndIf
    If KeyHit(57) Then EmitParticles emitter,100
    If KeyHit(19) Then ClearParticles emitter
    PauseParticles cpu,paused
    ticks=WaitTimer(timer)
    If ticks>15 Then ticks=15
    For tick=1 To ticks
        UpdateWorld
    Next
    RenderWorld
    live=CountParticlesAsync(emitter)
    live_text$="pending"
    If live>=0 Then live_text$=Str$(live)
    Color 255,255,255
    Text 16,16,"ParticleBackend | P Pause | Space Burst | R Clear | Esc Exit"
    Text 16,38,"Latest GPU count: "+live_text$+"   Paused: "+paused
    Text 16,60,"Left CPU backend: "+ParticleBackend(cpu)+"   Right GPU backend: "+ParticleBackend(emitter)
    Flip
Wend
FreeTimer timer
FreeEntity emitter
FreeEntity cpu
End

Index