You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-18 14:21:41 +00:00
Add an editor setting to configure number of threads for lightmap baking
This can be used to free some CPU cores when baking lightmaps. When using fewer CPU cores, lightmap baking is slower but background tasks aren't slowed down as much.
This commit is contained in:
@@ -64,8 +64,10 @@ void process_array_thread(void *ud) {
|
||||
}
|
||||
}
|
||||
|
||||
// p_num_threads is the number of logical CPU cores to use (0 = use all logical CPU cores available).
|
||||
// Negative values subtract from the total number of logical CPU cores available.
|
||||
template <class C, class M, class U>
|
||||
void thread_process_array(uint32_t p_elements, C *p_instance, M p_method, U p_userdata) {
|
||||
void thread_process_array(uint32_t p_elements, C *p_instance, M p_method, U p_userdata, int p_num_threads = 0) {
|
||||
ThreadArrayProcessData<C, U> data;
|
||||
data.method = p_method;
|
||||
data.instance = p_instance;
|
||||
@@ -74,7 +76,13 @@ void thread_process_array(uint32_t p_elements, C *p_instance, M p_method, U p_us
|
||||
data.elements = p_elements;
|
||||
data.process(0); //process first, let threads increment for next
|
||||
|
||||
int thread_count = OS::get_singleton()->get_processor_count();
|
||||
int thread_count;
|
||||
if (p_num_threads <= 0) {
|
||||
thread_count = MAX(1, OS::get_singleton()->get_processor_count() + p_num_threads);
|
||||
} else {
|
||||
thread_count = p_num_threads;
|
||||
}
|
||||
|
||||
Thread *threads = memnew_arr(Thread, thread_count);
|
||||
|
||||
for (int i = 0; i < thread_count; i++) {
|
||||
@@ -89,8 +97,9 @@ void thread_process_array(uint32_t p_elements, C *p_instance, M p_method, U p_us
|
||||
|
||||
#else
|
||||
|
||||
// p_num_threads is intentionally unused when threads are disabled.
|
||||
template <class C, class M, class U>
|
||||
void thread_process_array(uint32_t p_elements, C *p_instance, M p_method, U p_userdata) {
|
||||
void thread_process_array(uint32_t p_elements, C *p_instance, M p_method, U p_userdata, int p_num_threads = 0) {
|
||||
ThreadArrayProcessData<C, U> data;
|
||||
data.method = p_method;
|
||||
data.instance = p_instance;
|
||||
|
||||
Reference in New Issue
Block a user