GAM531 Engine Assignment
Game Engine Apex
Title: Multi-threaded Node Absolute Calculator
- The frame flow is very smooth due to the transformation of the node chains which are updated concurrently and efficiently during rendering instead of being done sequentially.
- The program runs significantly faster. To show improved performance of the Emperor Engine, we used Performance and Diagnostic tool in Visual Studio on a lab computer. It shows that by using multiple threads, performance has improved 10 times.
- Class ThreadPool
- An object of ThreadPool class is created at its initialization to accept threads in a vector called threads.
- The number of threads depends on the number of the computer core systems, it can be obtained at the run time through std::thread::hardware_concurrency() in ThreadPool constructor.
- The threadPool is a queue holding jobs which are defined as std::function, and a job is added into threadPool in AddJob function.
- std::mutex and std::condition_variable is used to lock and unlock threads status and to wake threads respectively. In addition to, two bool type variables (quit and stopped) are flags to decline a new job while the thread pool is shutting down.
- In Run function, the threadPool dispatches a job to each thread to be finished one by one until all jobs are done or the program is terminated.
- The ShutDown function wakes all threads up and makes them join to be terminated.
- To Use the Threads
- When the NodeManager performs the function updateValues for each active object from the vector activeObjects, jobs(active objects(Node)’ _updateAbs function) are added to the queue threadPool waiting to calculate node’s absolute transformation.
- While adding jobs, one slept thread from the thread pool wakes up, and performs the Run function subsequently.
- Before the function updateValues ends, threads are terminated through the ShutDown function of ThreadPool.
Work Load Division
- Member 1(Erquan (Ashley) Bi)
- Worked on how many threads are needed and how they are being divided and dispatched form the thread pool to a vector of threads for each core to calculate node absolute transformation.
- Member 2 (Eunju Han)
- Managed threads’ running and termination with determined threads and Merged code with Ashley’s work and tested with the client program (Lab8).
Source Code Repository https://bitbucket.org/Apex_Page/scs_emperor
Sphere Collision or View Frustum Culling
<Sphere Collision Resources>
SIMPLE SPHERE-SPHERE COLLISION DETECTION AND COLLISION RESPONSE
Work Breakdown and Progress
BitBucket Fetching a remote reference
Lab Workload Plan
- Anybody: lab1(Eunju)
- Ashley: lab2,5,8
- Eunju: lab3,6,9
- Ashley: Lab2, 4, 5, 7, 10
- Eunju: Lab1, 3, 6, 8, 9
|Tasks||Assigned||Completed Status||Due date|
|Lab 1||Eunju||Yes 2015-09-25||2015-09-25|
|Lab 2||Ashley||Yes 2015-10-02||2015-10-02|
|Lab 3||Eunju||Yes 2015-10-17||2015-10-09|
|Submit Proposal / Research Document||Group||YES||Friday October 16th, 2015|
|Lab 5||Ashley||Yes 2015-11-03||2015-11-03|
|Lab 6||Eunju||Yes 2015-11-07(1 min late because of merging issue)||2015-11-06|
|Lab 9||Eunju||Yes 2015-11-26||2015-11-27|
|Submit Engine Enhancement||Group||YES||Friday November 27th, 2015|
|Submit Project (completed engine)||Group||NO||Thursday December 10th, 2015|