forked from blender/blender
main sync #3
@ -838,8 +838,12 @@ static DRWSubdivCache *mesh_batch_cache_ensure_subdiv_cache(MeshBatchCache *mbc)
|
||||
|
||||
static void draw_subdiv_invalidate_evaluator_for_orco(Subdiv *subdiv, Mesh *mesh)
|
||||
{
|
||||
if (!(subdiv && subdiv->evaluator)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const bool has_orco = CustomData_has_layer(&mesh->vdata, CD_ORCO);
|
||||
if (has_orco && subdiv->evaluator && !subdiv->evaluator->hasVertexData(subdiv->evaluator)) {
|
||||
if (has_orco && !subdiv->evaluator->hasVertexData(subdiv->evaluator)) {
|
||||
/* If we suddenly have/need original coordinates, recreate the evaluator if the extra
|
||||
* source was not created yet. The refiner also has to be recreated as refinement for source
|
||||
* and vertex data is done only once. */
|
||||
@ -2113,13 +2117,13 @@ static bool draw_subdiv_create_requested_buffers(Object *ob,
|
||||
bm = mesh->edit_mesh->bm;
|
||||
}
|
||||
|
||||
draw_subdiv_invalidate_evaluator_for_orco(runtime_data->subdiv_gpu, mesh_eval);
|
||||
|
||||
Subdiv *subdiv = BKE_subsurf_modifier_subdiv_descriptor_ensure(runtime_data, mesh_eval, true);
|
||||
if (!subdiv) {
|
||||
return false;
|
||||
}
|
||||
|
||||
draw_subdiv_invalidate_evaluator_for_orco(subdiv, mesh_eval);
|
||||
|
||||
if (!BKE_subdiv_eval_begin_from_mesh(
|
||||
subdiv, mesh_eval, nullptr, SUBDIV_EVALUATOR_TYPE_GPU, evaluator_cache)) {
|
||||
/* This could happen in two situations:
|
||||
|
Loading…
Reference in New Issue
Block a user