Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_manager.c
| Show First 20 Lines • Show All 489 Lines • ▼ Show 20 Lines | const float *DRW_viewport_size_get(void) | ||||
| return DST.size; | return DST.size; | ||||
| } | } | ||||
| const float *DRW_viewport_invert_size_get(void) | const float *DRW_viewport_invert_size_get(void) | ||||
| { | { | ||||
| return DST.inv_size; | return DST.inv_size; | ||||
| } | } | ||||
| const float *DRW_viewport_render_size_get(void) | |||||
| { | |||||
| return DST.render_size; | |||||
| } | |||||
| float DRW_viewport_render_scale_get(void) | |||||
| { | |||||
| return DST.render_size[0] * DST.inv_size[0]; | |||||
| } | |||||
| const float *DRW_viewport_invert_render_size_get(void) | |||||
| { | |||||
| return DST.inv_render_size; | |||||
| } | |||||
| const float *DRW_viewport_screenvecs_get(void) | const float *DRW_viewport_screenvecs_get(void) | ||||
| { | { | ||||
| return &DST.screenvecs[0][0]; | return &DST.screenvecs[0][0]; | ||||
| } | } | ||||
| const float *DRW_viewport_pixelsize_get(void) | const float *DRW_viewport_pixelsize_get(void) | ||||
| { | { | ||||
| return &DST.pixsize; | return &DST.pixsize; | ||||
| ▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | if (DST.draw_ctx.rv3d && DST.draw_ctx.rv3d->rflag & RV3D_CLIPPING) { | ||||
| DST.draw_ctx.sh_cfg = GPU_SHADER_CFG_CLIPPED; | DST.draw_ctx.sh_cfg = GPU_SHADER_CFG_CLIPPED; | ||||
| } | } | ||||
| } | } | ||||
| /* It also stores viewport variable to an immutable place: DST | /* It also stores viewport variable to an immutable place: DST | ||||
| * This is because a cache uniform only store reference | * This is because a cache uniform only store reference | ||||
| * to its value. And we don't want to invalidate the cache | * to its value. And we don't want to invalidate the cache | ||||
| * if this value change per viewport */ | * if this value change per viewport */ | ||||
| static void drw_viewport_var_init(void) | static void drw_viewport_var_init(bool use_render_scale) | ||||
| { | { | ||||
| RegionView3D *rv3d = DST.draw_ctx.rv3d; | RegionView3D *rv3d = DST.draw_ctx.rv3d; | ||||
| /* Refresh DST.size */ | /* Refresh DST.size */ | ||||
| if (DST.viewport) { | if (DST.viewport) { | ||||
| int size[2]; | int size[2]; | ||||
| GPU_viewport_size_get(DST.viewport, size); | GPU_viewport_size_get(DST.viewport, size); | ||||
| DST.size[0] = size[0]; | DST.size[0] = size[0]; | ||||
| DST.size[1] = size[1]; | DST.size[1] = size[1]; | ||||
| DST.inv_size[0] = 1.0f / size[0]; | DST.inv_size[0] = 1.0f / size[0]; | ||||
| DST.inv_size[1] = 1.0f / size[1]; | DST.inv_size[1] = 1.0f / size[1]; | ||||
| if (use_render_scale) { | |||||
| /* Lower the internal resolution */ | |||||
| float scale = U.gpu_viewport_scale; | |||||
| /* As a precaution to an invalid scale value */ | |||||
| if (!(scale >= 0.0f && scale <= 2.0f)) { | |||||
| scale = 1.0; | |||||
| } | |||||
| DST.render_size[0] = (int)ceil(DST.size[0] * scale); | |||||
| DST.render_size[1] = (int)ceil(DST.size[1] * scale); | |||||
| } else { | |||||
| DST.render_size[0] = DST.size[0]; | |||||
| DST.render_size[1] = DST.size[1]; | |||||
| } | |||||
| DST.inv_render_size[0] = 1.0f / DST.render_size[0]; | |||||
| DST.inv_render_size[1] = 1.0f / DST.render_size[1]; | |||||
| DefaultFramebufferList *fbl = (DefaultFramebufferList *)GPU_viewport_framebuffer_list_get(DST.viewport); | DefaultFramebufferList *fbl = (DefaultFramebufferList *)GPU_viewport_framebuffer_list_get(DST.viewport); | ||||
| DST.default_framebuffer = fbl->default_fb; | DST.default_framebuffer = fbl->default_fb; | ||||
| DST.vmempool = GPU_viewport_mempool_get(DST.viewport); | DST.vmempool = GPU_viewport_mempool_get(DST.viewport); | ||||
| if (DST.vmempool->calls == NULL) { | if (DST.vmempool->calls == NULL) { | ||||
| DST.vmempool->calls = BLI_mempool_create(sizeof(DRWCall), 0, 512, 0); | DST.vmempool->calls = BLI_mempool_create(sizeof(DRWCall), 0, 512, 0); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 883 Lines • ▼ Show 20 Lines | DST.draw_ctx = (DRWContextState){ | ||||
| .scene = scene, .view_layer = view_layer, .obact = OBACT(view_layer), | .scene = scene, .view_layer = view_layer, .obact = OBACT(view_layer), | ||||
| .engine_type = engine_type, | .engine_type = engine_type, | ||||
| .depsgraph = depsgraph, | .depsgraph = depsgraph, | ||||
| /* reuse if caller sets */ | /* reuse if caller sets */ | ||||
| .evil_C = DST.draw_ctx.evil_C, | .evil_C = DST.draw_ctx.evil_C, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(true); | ||||
| /* Get list of enabled engines */ | /* Get list of enabled engines */ | ||||
| drw_engines_enable(view_layer, engine_type); | drw_engines_enable(view_layer, engine_type); | ||||
| /* Update ubos */ | /* Update ubos */ | ||||
| DRW_globals_update(); | DRW_globals_update(); | ||||
| drw_debug_init(); | drw_debug_init(); | ||||
| ▲ Show 20 Lines • Show All 295 Lines • ▼ Show 20 Lines | DST.draw_ctx = (DRWContextState) { | ||||
| .depsgraph = depsgraph, .object_mode = OB_MODE_OBJECT, | .depsgraph = depsgraph, .object_mode = OB_MODE_OBJECT, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| DST.viewport = GPU_viewport_create(); | DST.viewport = GPU_viewport_create(); | ||||
| const int size[2] = { (r->size * r->xsch) / 100, (r->size * r->ysch) / 100 }; | const int size[2] = { (r->size * r->xsch) / 100, (r->size * r->ysch) / 100 }; | ||||
| GPU_viewport_size_set(DST.viewport, size); | GPU_viewport_size_set(DST.viewport, size); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(false); | ||||
| /* set default viewport */ | /* set default viewport */ | ||||
| gpuPushAttr(GPU_ENABLE_BIT | GPU_VIEWPORT_BIT); | gpuPushAttr(GPU_ENABLE_BIT | GPU_VIEWPORT_BIT); | ||||
| glDisable(GL_SCISSOR_TEST); | glDisable(GL_SCISSOR_TEST); | ||||
| glViewport(0, 0, size[0], size[1]); | glViewport(0, 0, size[0], size[1]); | ||||
| /* Main rendering. */ | /* Main rendering. */ | ||||
| rctf view_rect; | rctf view_rect; | ||||
| ▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | DST.draw_ctx = (DRWContextState){ | ||||
| .depsgraph = depsgraph, .object_mode = OB_MODE_OBJECT, | .depsgraph = depsgraph, .object_mode = OB_MODE_OBJECT, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| DST.viewport = GPU_viewport_create(); | DST.viewport = GPU_viewport_create(); | ||||
| const int size[2] = {engine->resolution_x, engine->resolution_y}; | const int size[2] = {engine->resolution_x, engine->resolution_y}; | ||||
| GPU_viewport_size_set(DST.viewport, size); | GPU_viewport_size_set(DST.viewport, size); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(false); | ||||
| ViewportEngineData *data = drw_viewport_engine_data_ensure(draw_engine_type); | ViewportEngineData *data = drw_viewport_engine_data_ensure(draw_engine_type); | ||||
| /* set default viewport */ | /* set default viewport */ | ||||
| glViewport(0, 0, size[0], size[1]); | glViewport(0, 0, size[0], size[1]); | ||||
| /* Main rendering. */ | /* Main rendering. */ | ||||
| rctf view_rect; | rctf view_rect; | ||||
| ▲ Show 20 Lines • Show All 110 Lines • ▼ Show 20 Lines | DST.draw_ctx = (DRWContextState){ | ||||
| .object_mode = OB_MODE_OBJECT, | .object_mode = OB_MODE_OBJECT, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| DST.viewport = GPU_viewport_create(); | DST.viewport = GPU_viewport_create(); | ||||
| const int size[2] = {1, 1}; | const int size[2] = {1, 1}; | ||||
| GPU_viewport_size_set(DST.viewport, size); | GPU_viewport_size_set(DST.viewport, size); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(false); | ||||
| DRW_hair_init(); | DRW_hair_init(); | ||||
| ViewportEngineData *data = drw_viewport_engine_data_ensure(draw_engine_type); | ViewportEngineData *data = drw_viewport_engine_data_ensure(draw_engine_type); | ||||
| /* Execute the callback */ | /* Execute the callback */ | ||||
| callback(data, user_data); | callback(data, user_data); | ||||
| DST.buffer_finish_called = false; | DST.buffer_finish_called = false; | ||||
| ▲ Show 20 Lines • Show All 160 Lines • ▼ Show 20 Lines | #else | ||||
| /* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */ | /* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */ | ||||
| DST.draw_ctx = (DRWContextState){ | DST.draw_ctx = (DRWContextState){ | ||||
| .ar = ar, .rv3d = rv3d, .v3d = v3d, | .ar = ar, .rv3d = rv3d, .v3d = v3d, | ||||
| .scene = scene, .view_layer = view_layer, .obact = obact, | .scene = scene, .view_layer = view_layer, .obact = obact, | ||||
| .engine_type = engine_type, | .engine_type = engine_type, | ||||
| .depsgraph = depsgraph, | .depsgraph = depsgraph, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(false); | ||||
| /* Update ubos */ | /* Update ubos */ | ||||
| DRW_globals_update(); | DRW_globals_update(); | ||||
| /* Init engines */ | /* Init engines */ | ||||
| drw_engines_init(); | drw_engines_init(); | ||||
| DRW_hair_init(); | DRW_hair_init(); | ||||
| ▲ Show 20 Lines • Show All 187 Lines • ▼ Show 20 Lines | void DRW_draw_depth_loop( | ||||
| /* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */ | /* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */ | ||||
| DST.draw_ctx = (DRWContextState){ | DST.draw_ctx = (DRWContextState){ | ||||
| .ar = ar, .rv3d = rv3d, .v3d = v3d, | .ar = ar, .rv3d = rv3d, .v3d = v3d, | ||||
| .scene = scene, .view_layer = view_layer, .obact = OBACT(view_layer), | .scene = scene, .view_layer = view_layer, .obact = OBACT(view_layer), | ||||
| .engine_type = engine_type, | .engine_type = engine_type, | ||||
| .depsgraph = depsgraph, | .depsgraph = depsgraph, | ||||
| }; | }; | ||||
| drw_context_state_init(); | drw_context_state_init(); | ||||
| drw_viewport_var_init(); | drw_viewport_var_init(false); | ||||
| /* Update ubos */ | /* Update ubos */ | ||||
| DRW_globals_update(); | DRW_globals_update(); | ||||
| /* Init engines */ | /* Init engines */ | ||||
| drw_engines_init(); | drw_engines_init(); | ||||
| DRW_hair_init(); | DRW_hair_init(); | ||||
| ▲ Show 20 Lines • Show All 493 Lines • Show Last 20 Lines | |||||