29 settings.level = settings.is_simple ? 1 :
30 (settings.is_adaptive ? smd->
quality : requested_levels);
38 if (settings.level == 0) {
49 if (runtime_data ==
NULL) {
50 runtime_data =
MEM_callocN(
sizeof(*runtime_data),
"subsurf runtime");
154 const bool for_draw_code)
162 runtime_data->
subdiv = subdiv;
169 if (is_final_render) {
bool CustomData_has_layer(const struct CustomData *data, int type)
bool BKE_modifier_is_enabled(const struct Scene *scene, struct ModifierData *md, int required_mode)
eSubdivVtxBoundaryInterpolation BKE_subdiv_vtx_boundary_interpolation_from_subsurf(int boundary_smooth)
void BKE_subdiv_free(Subdiv *subdiv)
Subdiv * BKE_subdiv_update_from_mesh(Subdiv *subdiv, const SubdivSettings *settings, const struct Mesh *mesh)
eSubdivFVarLinearInterpolation BKE_subdiv_fvar_interpolation_from_uv_smooth(int uv_smooth)
#define MAX_GPU_SUBDIV_SSBOS
@ eSubsurfModifierFlag_UseRecursiveSubdivision
@ eSubsurfModifierFlag_UseCrease
@ eSubsurfModifierFlag_UseCustomNormals
Object is a sort of wrapper for general info.
@ USER_GPU_FLAG_SUBDIVISION_EVALUATION
bool GPU_compute_shader_support(void)
int GPU_max_compute_shader_storage_blocks(void)
bool GPU_shader_storage_buffer_objects_support(void)
eGPUBackendType GPU_backend_get_type(void)
Read Guarded memory(de)allocation.
SyclQueue void void size_t num_bytes void
void *(* MEM_callocN)(size_t len, const char *str)
struct SubsurfRuntimeData * subsurf_runtime_data
struct ModifierData * prev
static bool is_subdivision_evaluation_possible_on_gpu(void)
int BKE_subsurf_modifier_eval_required_mode(bool is_final_render, bool is_edit_mode)
bool BKE_subsurf_modifier_force_disable_gpu_evaluation_for_mesh(const SubsurfModifierData *smd, const Mesh *mesh)
bool BKE_subsurf_modifier_runtime_init(SubsurfModifierData *smd, const bool use_render_params)
bool BKE_subsurf_modifier_can_do_gpu_subdiv(const Scene *scene, const Object *ob, const Mesh *mesh, const SubsurfModifierData *smd, int required_mode)
Subdiv * BKE_subsurf_modifier_subdiv_descriptor_ensure(SubsurfRuntimeData *runtime_data, const Mesh *mesh, const bool for_draw_code)
bool BKE_subsurf_modifier_use_custom_loop_normals(const SubsurfModifierData *smd, const Mesh *mesh)
void(* BKE_subsurf_modifier_free_gpu_cache_cb)(Subdiv *subdiv)
bool BKE_subsurf_modifier_has_gpu_subdiv(const Mesh *mesh)
static bool subsurf_modifier_use_autosmooth_or_split_normals(const SubsurfModifierData *smd, const Mesh *mesh)
static ModifierData * modifier_get_last_enabled_for_mode(const Scene *scene, const Object *ob, int required_mode)