// Seperate task info for a morph mod as wont be doing all verts
    void DoWork(object info)
    {
        MegaTaskInfo inf = (MegaTaskInfo)info;

        while (isRunning)
        {
            inf.pauseevent.WaitOne(Timeout.Infinite);

            switch (inf.jobtype)
            {
            case MegaJobType.Modifier:
                if (inf.end > 0)
                {
                    for (int m = 0; m < inf.modcontext.mod.mods.Length; m++)
                    {
                        MegaModifier mod = inf.modcontext.mod.mods[m];

                        if (mod.valid)
                        {
                            mod.DoWork(this, inf.index, inf.start, inf.end, Cores + 1);
                        }
                    }
                    //inf.end = 0;	// Done the job
                }
                break;

            case MegaJobType.FaceNormalCalc:
                RecalcFaceNormalsMT(inf.modcontext.mod, inf.index, Cores + 1);
                break;

            case MegaJobType.VertexNormalCalc:
                RecalcVertexNormalsMT(inf.modcontext.mod, inf.index, Cores + 1);
                break;

            case MegaJobType.FaceTangentCalc:
                BuildFaceTangentsMT(inf.modcontext.mod, inf.index, Cores + 1);
                break;

            case MegaJobType.VertexTangentCalc:
                BuildVertexTangentsMT(inf.modcontext.mod, inf.index, Cores + 1);
                break;
            }

            inf.end = 0;                // Done the job
        }
    }
Esempio n. 2
0
    void MakeThreads()
    {
        if (Cores > 0)
        {
            isRunning = true;
            tasks     = new MegaTaskInfo[Cores];

            for (int i = 0; i < Cores; i++)
            {
                tasks[i] = new MegaTaskInfo();

                tasks[i].name       = "ThreadID " + i;
                tasks[i].pauseevent = new AutoResetEvent(false);
                tasks[i]._thread    = new Thread(DoWork);
                tasks[i]._thread.Start(tasks[i]);
            }
        }
    }
Esempio n. 3
0
	void MakeThreads()
	{
		if ( Cores > 0 )
		{
			isRunning = true;
			tasks = new MegaTaskInfo[Cores];

			for ( int i = 0; i < Cores; i++ )
			{
				tasks[i] = new MegaTaskInfo();

				tasks[i].name = "ThreadID " + i;
				tasks[i].pauseevent = new AutoResetEvent(false);
				tasks[i]._thread = new Thread(DoWork);
				tasks[i]._thread.Start(tasks[i]);
			}
		}
	}