Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/eevee/eevee_lightcache.c
| Show First 20 Lines • Show All 525 Lines • ▼ Show 20 Lines | |||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Light Bake Context | /** \name Light Bake Context | ||||
| * \{ */ | * \{ */ | ||||
| static void eevee_lightbake_context_enable(EEVEE_LightBake *lbake) | static void eevee_lightbake_context_enable(EEVEE_LightBake *lbake) | ||||
| { | { | ||||
| const bool use_main_context = GPU_use_main_context_workaround(); | |||||
fclem: Style nitpick: Don't use vars if it is not reused. | |||||
| if (use_main_context && !BLI_thread_is_main()) { | |||||
| GPU_context_main_lock(); | |||||
| DRW_opengl_context_enable(); | |||||
| return; | |||||
| } | |||||
| if (lbake->gl_context) { | if (lbake->gl_context) { | ||||
| DRW_opengl_render_context_enable(lbake->gl_context); | DRW_opengl_render_context_enable(lbake->gl_context); | ||||
| if (lbake->gpu_context == NULL) { | if (lbake->gpu_context == NULL) { | ||||
| lbake->gpu_context = GPU_context_create(0); | lbake->gpu_context = GPU_context_create(0); | ||||
| } | } | ||||
| DRW_gpu_render_context_enable(lbake->gpu_context); | DRW_gpu_render_context_enable(lbake->gpu_context); | ||||
| } | } | ||||
| else { | else { | ||||
| DRW_opengl_context_enable(); | DRW_opengl_context_enable(); | ||||
| } | } | ||||
| } | } | ||||
| static void eevee_lightbake_context_disable(EEVEE_LightBake *lbake) | static void eevee_lightbake_context_disable(EEVEE_LightBake *lbake) | ||||
| { | { | ||||
| const bool use_main_context = GPU_use_main_context_workaround(); | |||||
fclemUnsubmitted Done Inline ActionsSame here fclem: Same here | |||||
| if (use_main_context && !BLI_thread_is_main()) { | |||||
| DRW_opengl_context_disable(); | |||||
| GPU_context_main_unlock(); | |||||
| return; | |||||
| } | |||||
| if (lbake->gl_context) { | if (lbake->gl_context) { | ||||
| DRW_gpu_render_context_disable(lbake->gpu_context); | DRW_gpu_render_context_disable(lbake->gpu_context); | ||||
| DRW_opengl_render_context_disable(lbake->gl_context); | DRW_opengl_render_context_disable(lbake->gl_context); | ||||
| } | } | ||||
| else { | else { | ||||
| DRW_opengl_context_disable(); | DRW_opengl_context_disable(); | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | wmJob *EEVEE_lightbake_job_create(struct wmWindowManager *wm, | ||||
| int frame) | int frame) | ||||
| { | { | ||||
| EEVEE_LightBake *lbake = NULL; | EEVEE_LightBake *lbake = NULL; | ||||
| /* only one render job at a time */ | /* only one render job at a time */ | ||||
| if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER)) { | if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER)) { | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| const bool use_main_context = GPU_use_main_context_workaround(); | |||||
fclemUnsubmitted Not Done Inline ActionsSame here fclem: Same here | |||||
| wmJob *wm_job = WM_jobs_get(wm, | wmJob *wm_job = WM_jobs_get(wm, | ||||
| win, | win, | ||||
| scene, | scene, | ||||
| "Bake Lighting", | "Bake Lighting", | ||||
| WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS, | WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS, | ||||
| WM_JOB_TYPE_LIGHT_BAKE); | WM_JOB_TYPE_LIGHT_BAKE); | ||||
| Show All 15 Lines | if (old_lbake && (old_lbake->view_layer_input == view_layer) && (old_lbake->bmain == bmain)) { | ||||
| lbake->scene = scene; | lbake->scene = scene; | ||||
| lbake->bmain = bmain; | lbake->bmain = bmain; | ||||
| lbake->view_layer_input = view_layer; | lbake->view_layer_input = view_layer; | ||||
| lbake->gl_context = old_lbake->gl_context; | lbake->gl_context = old_lbake->gl_context; | ||||
| lbake->own_resources = true; | lbake->own_resources = true; | ||||
| lbake->delay = delay; | lbake->delay = delay; | ||||
| lbake->frame = frame; | lbake->frame = frame; | ||||
| if (lbake->gl_context == NULL) { | if (lbake->gl_context == NULL && !use_main_context) { | ||||
| lbake->gl_context = WM_opengl_context_create(); | lbake->gl_context = WM_opengl_context_create(); | ||||
| wm_window_reset_drawable(); | wm_window_reset_drawable(); | ||||
| } | } | ||||
| if (old_lbake->stop != NULL) { | if (old_lbake->stop != NULL) { | ||||
| *old_lbake->stop = 1; | *old_lbake->stop = 1; | ||||
| } | } | ||||
| BLI_mutex_unlock(old_lbake->mutex); | BLI_mutex_unlock(old_lbake->mutex); | ||||
| Show All 28 Lines | void *EEVEE_lightbake_job_data_alloc(struct Main *bmain, | ||||
| lbake->scene = scene; | lbake->scene = scene; | ||||
| lbake->bmain = bmain; | lbake->bmain = bmain; | ||||
| lbake->view_layer_input = view_layer; | lbake->view_layer_input = view_layer; | ||||
| lbake->own_resources = true; | lbake->own_resources = true; | ||||
| lbake->own_light_cache = false; | lbake->own_light_cache = false; | ||||
| lbake->mutex = BLI_mutex_alloc(); | lbake->mutex = BLI_mutex_alloc(); | ||||
| lbake->frame = frame; | lbake->frame = frame; | ||||
| if (run_as_job) { | if (run_as_job && !GPU_use_main_context_workaround()) { | ||||
| lbake->gl_context = WM_opengl_context_create(); | lbake->gl_context = WM_opengl_context_create(); | ||||
| wm_window_reset_drawable(); | wm_window_reset_drawable(); | ||||
| } | } | ||||
| return lbake; | return lbake; | ||||
| } | } | ||||
| void EEVEE_lightbake_job_data_free(void *custom_data) | void EEVEE_lightbake_job_data_free(void *custom_data) | ||||
| ▲ Show 20 Lines • Show All 702 Lines • Show Last 20 Lines | |||||
Style nitpick: Don't use vars if it is not reused.