Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_manager.c
| Show First 20 Lines • Show All 1,720 Lines • ▼ Show 20 Lines | |||||
| void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph) | void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph) | ||||
| { | { | ||||
| Scene *scene = DEG_get_evaluated_scene(depsgraph); | Scene *scene = DEG_get_evaluated_scene(depsgraph); | ||||
| ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); | ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); | ||||
| RenderEngineType *engine_type = engine->type; | RenderEngineType *engine_type = engine->type; | ||||
| DrawEngineType *draw_engine_type = engine_type->draw_engine; | DrawEngineType *draw_engine_type = engine_type->draw_engine; | ||||
| Render *render = engine->re; | Render *render = engine->re; | ||||
| /* HD4000 series Intel Devices on Windows aren't able to share shaders between contextes. | |||||
jbakker: HD4000 Series | |||||
| * For image rendering these iGPUs are scheduled on the main thread so they can share the same | |||||
| * context. | |||||
| * | |||||
Done Inline Actionsthese devices are officially supported jbakker: these devices are officially supported | |||||
| * TODO: This ignores icon/preview rendering; adding support in a clean way requires an overhaul | |||||
| * icon/preview rendering. */ | |||||
| if (!BLI_thread_is_main() && GPU_main_thread_workaround()) { | |||||
| return; | |||||
| } | |||||
| /* IMPORTANT: We don't support immediate mode in render mode! | /* IMPORTANT: We don't support immediate mode in render mode! | ||||
| * This shall remain in effect until immediate mode supports | * This shall remain in effect until immediate mode supports | ||||
| * multiple threads. */ | * multiple threads. */ | ||||
| /* Reset before using it. */ | /* Reset before using it. */ | ||||
| drw_state_prepare_clean_for_draw(&DST); | drw_state_prepare_clean_for_draw(&DST); | ||||
| DST.options.is_image_render = true; | DST.options.is_image_render = true; | ||||
| DST.options.is_scene_render = true; | DST.options.is_scene_render = true; | ||||
| ▲ Show 20 Lines • Show All 980 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| if (G.background && DST.gl_context == NULL) { | if (G.background && DST.gl_context == NULL) { | ||||
| WM_init_opengl(G_MAIN); | WM_init_opengl(G_MAIN); | ||||
| } | } | ||||
| void *re_gl_context = RE_gl_context_get(render); | void *re_gl_context = RE_gl_context_get(render); | ||||
| /* Changing Context */ | /* Changing Context */ | ||||
| if (re_gl_context != NULL) { | if (re_gl_context != NULL && !GPU_main_thread_workaround()) { | ||||
| DRW_opengl_render_context_enable(re_gl_context); | DRW_opengl_render_context_enable(re_gl_context); | ||||
| /* We need to query gpu context after a gl context has been bound. */ | /* We need to query gpu context after a gl context has been bound. */ | ||||
| void *re_gpu_context = NULL; | void *re_gpu_context = NULL; | ||||
| re_gpu_context = RE_gpu_context_get(render); | re_gpu_context = RE_gpu_context_get(render); | ||||
| DRW_gpu_render_context_enable(re_gpu_context); | DRW_gpu_render_context_enable(re_gpu_context); | ||||
| } | } | ||||
| else { | else { | ||||
| DRW_opengl_context_enable(); | DRW_opengl_context_enable(); | ||||
| } | } | ||||
| } | } | ||||
| void DRW_render_context_disable(Render *render) | void DRW_render_context_disable(Render *render) | ||||
| { | { | ||||
| void *re_gl_context = RE_gl_context_get(render); | void *re_gl_context = RE_gl_context_get(render); | ||||
| if (re_gl_context != NULL) { | if (re_gl_context != NULL && !GPU_main_thread_workaround()) { | ||||
| void *re_gpu_context = NULL; | void *re_gpu_context = NULL; | ||||
| re_gpu_context = RE_gpu_context_get(render); | re_gpu_context = RE_gpu_context_get(render); | ||||
| DRW_gpu_render_context_disable(re_gpu_context); | DRW_gpu_render_context_disable(re_gpu_context); | ||||
| DRW_opengl_render_context_disable(re_gl_context); | DRW_opengl_render_context_disable(re_gl_context); | ||||
| } | } | ||||
| else { | else { | ||||
| DRW_opengl_context_disable(); | DRW_opengl_context_disable(); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 169 Lines • Show Last 20 Lines | |||||
HD4000 Series