Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_cache_impl_mesh.c
| Show First 20 Lines • Show All 490 Lines • ▼ Show 20 Lines | if (cache->is_editmode == false) { | ||||
| // cache->edge_len = mesh_render_edges_len_get(me); | // cache->edge_len = mesh_render_edges_len_get(me); | ||||
| // cache->tri_len = mesh_render_looptri_len_get(me); | // cache->tri_len = mesh_render_looptri_len_get(me); | ||||
| // cache->poly_len = mesh_render_polys_len_get(me); | // cache->poly_len = mesh_render_polys_len_get(me); | ||||
| // cache->vert_len = mesh_render_verts_len_get(me); | // cache->vert_len = mesh_render_verts_len_get(me); | ||||
| } | } | ||||
| cache->mat_len = mesh_render_mat_len_get(me); | cache->mat_len = mesh_render_mat_len_get(me); | ||||
| cache->surface_per_mat = MEM_callocN(sizeof(*cache->surface_per_mat) * cache->mat_len, __func__); | cache->surface_per_mat = MEM_callocN(sizeof(*cache->surface_per_mat) * cache->mat_len, __func__); | ||||
| FOREACH_MESH_BUFFER_CACHE (cache, mbufcache) { | cache->final.tris_per_mat = MEM_callocN(sizeof(*cache->final.tris_per_mat) * cache->mat_len, | ||||
| mbufcache->tris_per_mat = MEM_callocN(sizeof(*mbufcache->tris_per_mat) * cache->mat_len, | |||||
| __func__); | __func__); | ||||
| } | |||||
| cache->is_dirty = false; | cache->is_dirty = false; | ||||
| cache->batch_ready = 0; | cache->batch_ready = 0; | ||||
| cache->batch_requested = 0; | cache->batch_requested = 0; | ||||
| drw_mesh_weight_state_clear(&cache->weight_state); | drw_mesh_weight_state_clear(&cache->weight_state); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 191 Lines • ▼ Show 20 Lines | FOREACH_MESH_BUFFER_CACHE (cache, mbufcache) { | ||||
| GPUVertBuf **vbos = (GPUVertBuf **)&mbufcache->vbo; | GPUVertBuf **vbos = (GPUVertBuf **)&mbufcache->vbo; | ||||
| GPUIndexBuf **ibos = (GPUIndexBuf **)&mbufcache->ibo; | GPUIndexBuf **ibos = (GPUIndexBuf **)&mbufcache->ibo; | ||||
| for (int i = 0; i < sizeof(mbufcache->vbo) / sizeof(void *); i++) { | for (int i = 0; i < sizeof(mbufcache->vbo) / sizeof(void *); i++) { | ||||
| GPU_VERTBUF_DISCARD_SAFE(vbos[i]); | GPU_VERTBUF_DISCARD_SAFE(vbos[i]); | ||||
| } | } | ||||
| for (int i = 0; i < sizeof(mbufcache->ibo) / sizeof(void *); i++) { | for (int i = 0; i < sizeof(mbufcache->ibo) / sizeof(void *); i++) { | ||||
| GPU_INDEXBUF_DISCARD_SAFE(ibos[i]); | GPU_INDEXBUF_DISCARD_SAFE(ibos[i]); | ||||
| } | } | ||||
| } | |||||
| BLI_assert((mbufcache->tris_per_mat != NULL) || (cache->mat_len == 0)); | |||||
| BLI_assert((mbufcache->tris_per_mat != NULL) && (cache->mat_len > 0)); | |||||
| if (mbufcache->tris_per_mat) { | |||||
| for (int i = 0; i < cache->mat_len; i++) { | for (int i = 0; i < cache->mat_len; i++) { | ||||
| GPU_INDEXBUF_DISCARD_SAFE(mbufcache->tris_per_mat[i]); | GPU_INDEXBUF_DISCARD_SAFE(cache->final.tris_per_mat[i]); | ||||
| } | |||||
| MEM_SAFE_FREE(mbufcache->tris_per_mat); | |||||
| } | |||||
| } | } | ||||
| MEM_SAFE_FREE(cache->final.tris_per_mat); | |||||
| for (int i = 0; i < sizeof(cache->batch) / sizeof(void *); i++) { | for (int i = 0; i < sizeof(cache->batch) / sizeof(void *); i++) { | ||||
| GPUBatch **batch = (GPUBatch **)&cache->batch; | GPUBatch **batch = (GPUBatch **)&cache->batch; | ||||
| GPU_BATCH_DISCARD_SAFE(batch[i]); | GPU_BATCH_DISCARD_SAFE(batch[i]); | ||||
| } | } | ||||
| mesh_batch_cache_discard_shaded_tri(cache); | mesh_batch_cache_discard_shaded_tri(cache); | ||||
| mesh_batch_cache_discard_uvedit(cache); | mesh_batch_cache_discard_uvedit(cache); | ||||
| MEM_SAFE_FREE(cache->surface_per_mat); | MEM_SAFE_FREE(cache->surface_per_mat); | ||||
| ▲ Show 20 Lines • Show All 539 Lines • ▼ Show 20 Lines | if (cd_overlap == false) { | ||||
| } | } | ||||
| } | } | ||||
| /* We can't discard batches at this point as they have been | /* We can't discard batches at this point as they have been | ||||
| * referenced for drawing. Just clear them in place. */ | * referenced for drawing. Just clear them in place. */ | ||||
| for (int i = 0; i < cache->mat_len; i++) { | for (int i = 0; i < cache->mat_len; i++) { | ||||
| GPU_BATCH_CLEAR_SAFE(cache->surface_per_mat[i]); | GPU_BATCH_CLEAR_SAFE(cache->surface_per_mat[i]); | ||||
| } | } | ||||
| GPU_BATCH_CLEAR_SAFE(cache->batch.surface); | GPU_BATCH_CLEAR_SAFE(cache->batch.surface); | ||||
| GPU_INDEXBUF_DISCARD_SAFE(cache->final.ibo.tris); | |||||
| cache->batch_ready &= ~(MBC_SURFACE); | cache->batch_ready &= ~(MBC_SURFACE); | ||||
| mesh_cd_layers_type_merge(&cache->cd_used, cache->cd_needed); | mesh_cd_layers_type_merge(&cache->cd_used, cache->cd_needed); | ||||
| } | } | ||||
| mesh_cd_layers_type_merge(&cache->cd_used_over_time, cache->cd_needed); | mesh_cd_layers_type_merge(&cache->cd_used_over_time, cache->cd_needed); | ||||
| mesh_cd_layers_type_clear(&cache->cd_needed); | mesh_cd_layers_type_clear(&cache->cd_needed); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 298 Lines • Show Last 20 Lines | |||||