Ejemplo n.º 1
0
        /// <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());
            }
        }
Ejemplo n.º 2
0
		/// <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() );
			}
		}