Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/gpencil/gpencil_engine.c
| Show First 20 Lines • Show All 172 Lines • ▼ Show 20 Lines | else { | ||||
| DRW_TEXTURE_FREE_SAFE(txl->background_depth_tx); | DRW_TEXTURE_FREE_SAFE(txl->background_depth_tx); | ||||
| DRW_TEXTURE_FREE_SAFE(txl->background_color_tx); | DRW_TEXTURE_FREE_SAFE(txl->background_color_tx); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static void GPENCIL_create_shaders(void) | static void GPENCIL_create_shaders(void) | ||||
| { | { | ||||
| /* blank texture used if no texture defined for fill shader */ | |||||
| if (!e_data.gpencil_blank_texture) { | |||||
| float rect[1][1][4] = {{{0.0f}}}; | |||||
| e_data.gpencil_blank_texture = DRW_texture_create_2d( | |||||
| 1, 1, GPU_RGBA8, DRW_TEX_FILTER, (float *)rect); | |||||
| } | |||||
| /* normal fill shader */ | /* normal fill shader */ | ||||
| if (!e_data.gpencil_fill_sh) { | if (!e_data.gpencil_fill_sh) { | ||||
| e_data.gpencil_fill_sh = GPU_shader_create_from_arrays({ | e_data.gpencil_fill_sh = GPU_shader_create_from_arrays({ | ||||
| .vert = | .vert = | ||||
| (const char *[]){datatoc_common_view_lib_glsl, datatoc_gpencil_fill_vert_glsl, NULL}, | (const char *[]){datatoc_common_view_lib_glsl, datatoc_gpencil_fill_vert_glsl, NULL}, | ||||
| .frag = (const char *[]){datatoc_common_colormanagement_lib_glsl, | .frag = (const char *[]){datatoc_common_colormanagement_lib_glsl, | ||||
| datatoc_gpencil_fill_frag_glsl, | datatoc_gpencil_fill_frag_glsl, | ||||
| NULL}, | NULL}, | ||||
| ▲ Show 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | static void GPENCIL_engine_free(void) | ||||
| DRW_SHADER_FREE_SAFE(e_data.gpencil_edit_point_sh); | DRW_SHADER_FREE_SAFE(e_data.gpencil_edit_point_sh); | ||||
| DRW_SHADER_FREE_SAFE(e_data.gpencil_line_sh); | DRW_SHADER_FREE_SAFE(e_data.gpencil_line_sh); | ||||
| DRW_SHADER_FREE_SAFE(e_data.gpencil_fullscreen_sh); | DRW_SHADER_FREE_SAFE(e_data.gpencil_fullscreen_sh); | ||||
| DRW_SHADER_FREE_SAFE(e_data.gpencil_simple_fullscreen_sh); | DRW_SHADER_FREE_SAFE(e_data.gpencil_simple_fullscreen_sh); | ||||
| DRW_SHADER_FREE_SAFE(e_data.gpencil_blend_fullscreen_sh); | DRW_SHADER_FREE_SAFE(e_data.gpencil_blend_fullscreen_sh); | ||||
| DRW_SHADER_FREE_SAFE(e_data.gpencil_background_sh); | DRW_SHADER_FREE_SAFE(e_data.gpencil_background_sh); | ||||
| DRW_SHADER_FREE_SAFE(e_data.gpencil_paper_sh); | DRW_SHADER_FREE_SAFE(e_data.gpencil_paper_sh); | ||||
| DRW_TEXTURE_FREE_SAFE(e_data.gpencil_blank_texture); | |||||
| /* effects */ | /* effects */ | ||||
| GPENCIL_delete_fx_shaders(&e_data); | GPENCIL_delete_fx_shaders(&e_data); | ||||
| } | } | ||||
| void GPENCIL_cache_init(void *vedata) | void GPENCIL_cache_init(void *vedata) | ||||
| { | { | ||||
| GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl; | GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl; | ||||
| GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; | GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; | ||||
| Show All 29 Lines | if (!stl->g_data) { | ||||
| stl->storage->stroke_style = GP_STYLE_STROKE_STYLE_SOLID; /* used for drawing */ | stl->storage->stroke_style = GP_STYLE_STROKE_STYLE_SOLID; /* used for drawing */ | ||||
| } | } | ||||
| stl->storage->tonemapping = 0; | stl->storage->tonemapping = 0; | ||||
| stl->g_data->shgrps_edit_line = NULL; | stl->g_data->shgrps_edit_line = NULL; | ||||
| stl->g_data->shgrps_edit_point = NULL; | stl->g_data->shgrps_edit_point = NULL; | ||||
| /* reset textures */ | /* reset textures */ | ||||
| stl->g_data->gpencil_blank_texture = NULL; | |||||
| stl->g_data->batch_buffer_stroke = NULL; | stl->g_data->batch_buffer_stroke = NULL; | ||||
| stl->g_data->batch_buffer_fill = NULL; | stl->g_data->batch_buffer_fill = NULL; | ||||
| stl->g_data->batch_buffer_ctrlpoint = NULL; | stl->g_data->batch_buffer_ctrlpoint = NULL; | ||||
| stl->g_data->batch_grid = NULL; | stl->g_data->batch_grid = NULL; | ||||
| /* blank texture used if no texture defined for fill shader */ | |||||
| float rect[1][1][4] = {{{0.0f}}}; | |||||
| stl->g_data->gpencil_blank_texture = DRW_texture_create_2d( | |||||
| 1, 1, GPU_RGBA8, DRW_TEX_FILTER, (float *)rect); | |||||
| if (!stl->shgroups) { | if (!stl->shgroups) { | ||||
| /* Alloc maximum size because count strokes is very slow and can be very complex due onion | /* Alloc maximum size because count strokes is very slow and can be very complex due onion | ||||
| * skinning. | * skinning. | ||||
| */ | */ | ||||
| stl->shgroups = MEM_mallocN(sizeof(GPENCIL_shgroup) * GPENCIL_MAX_SHGROUPS, "GPENCIL_shgroup"); | stl->shgroups = MEM_mallocN(sizeof(GPENCIL_shgroup) * GPENCIL_MAX_SHGROUPS, "GPENCIL_shgroup"); | ||||
| } | } | ||||
| /* init gp objects cache */ | /* init gp objects cache */ | ||||
| ▲ Show 20 Lines • Show All 424 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| void DRW_gpencil_free_runtime_data(void *ved) | void DRW_gpencil_free_runtime_data(void *ved) | ||||
| { | { | ||||
| GPENCIL_Data *vedata = (GPENCIL_Data *)ved; | GPENCIL_Data *vedata = (GPENCIL_Data *)ved; | ||||
| GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; | GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl; | ||||
| /* free gpu data */ | /* free gpu data */ | ||||
| DRW_TEXTURE_FREE_SAFE(stl->g_data->gpencil_blank_texture); | |||||
| GPU_BATCH_DISCARD_SAFE(stl->g_data->batch_buffer_stroke); | GPU_BATCH_DISCARD_SAFE(stl->g_data->batch_buffer_stroke); | ||||
| MEM_SAFE_FREE(stl->g_data->batch_buffer_stroke); | MEM_SAFE_FREE(stl->g_data->batch_buffer_stroke); | ||||
| GPU_BATCH_DISCARD_SAFE(stl->g_data->batch_buffer_fill); | GPU_BATCH_DISCARD_SAFE(stl->g_data->batch_buffer_fill); | ||||
| MEM_SAFE_FREE(stl->g_data->batch_buffer_fill); | MEM_SAFE_FREE(stl->g_data->batch_buffer_fill); | ||||
| GPU_BATCH_DISCARD_SAFE(stl->g_data->batch_buffer_ctrlpoint); | GPU_BATCH_DISCARD_SAFE(stl->g_data->batch_buffer_ctrlpoint); | ||||
| MEM_SAFE_FREE(stl->g_data->batch_buffer_ctrlpoint); | MEM_SAFE_FREE(stl->g_data->batch_buffer_ctrlpoint); | ||||
| ▲ Show 20 Lines • Show All 344 Lines • Show Last 20 Lines | |||||