/// <summary> /// /// </summary> void SetupGPUParameters(float stepTime, RenderWorld renderWorld, Matrix view, Matrix projection, Flags flags) { var deltaTime = stepTime; var camera = renderWorld.Camera; var cameraMatrix = Matrix.Invert(view); // kill particles by applying very large delta. if (requestKill) { deltaTime = float.MaxValue / 2; requestKill = false; } if (rs.FreezeParticles) { deltaTime = 0; } // fill constant data : PrtParams param = new PrtParams(); param.View = view; param.Projection = projection; param.MaxParticles = 0; param.DeltaTime = deltaTime; param.CameraForward = new Vector4(cameraMatrix.Forward, 0); param.CameraRight = new Vector4(cameraMatrix.Right, 0); param.CameraUp = new Vector4(cameraMatrix.Up, 0); param.CameraPosition = new Vector4(cameraMatrix.TranslationVector, 1); param.Gravity = new Vector4(this.Gravity, 0); param.MaxParticles = MaxSimulatedParticles; param.LinearizeDepthA = camera.LinearizeDepthScale; param.LinearizeDepthB = camera.LinearizeDepthBias; param.CocBias = renderWorld.DofSettings.CocBias; param.CocScale = renderWorld.DofSettings.CocScale; if (flags == Flags.INJECTION) { param.MaxParticles = injectionCount; } // copy to gpu : paramsCB.SetData(param); // set DeadListSize to prevent underflow: if (flags == Flags.INJECTION) { deadParticlesIndices.CopyStructureCount(paramsCB, Marshal.OffsetOf(typeof(PrtParams), "DeadListSize").ToInt32()); } }
/// <summary> /// /// </summary> void SetupGPUParameters ( float stepTime, RenderWorld renderWorld, Matrix view, Matrix projection, Flags flags ) { var deltaTime = stepTime; var camera = renderWorld.Camera; var cameraMatrix = Matrix.Invert( view ); // kill particles by applying very large delta. if (requestKill) { deltaTime = float.MaxValue / 2; requestKill = false; } if (rs.FreezeParticles) { deltaTime = 0; } // fill constant data : PrtParams param = new PrtParams(); param.View = view; param.Projection = projection; param.MaxParticles = 0; param.DeltaTime = deltaTime; param.CameraForward = new Vector4( cameraMatrix.Forward , 0 ); param.CameraRight = new Vector4( cameraMatrix.Right , 0 ); param.CameraUp = new Vector4( cameraMatrix.Up , 0 ); param.CameraPosition = new Vector4( cameraMatrix.TranslationVector , 1 ); param.Gravity = new Vector4( this.Gravity, 0 ); param.MaxParticles = MaxSimulatedParticles; param.LinearizeDepthA = camera.LinearizeDepthScale; param.LinearizeDepthB = camera.LinearizeDepthBias; param.CocBias = renderWorld.DofSettings.CocBias; param.CocScale = renderWorld.DofSettings.CocScale; if (flags==Flags.INJECTION) { param.MaxParticles = injectionCount; } // copy to gpu : paramsCB.SetData( param ); // set DeadListSize to prevent underflow: if (flags==Flags.INJECTION) { deadParticlesIndices.CopyStructureCount( paramsCB, Marshal.OffsetOf( typeof(PrtParams), "DeadListSize").ToInt32() ); } }