43 #include "RNA_prototypes.h"
101 if (runtime_data_v ==
NULL) {
221 #if !defined(WITH_OPENSUBDIV)
249 if (subdiv ==
NULL) {
277 if (subdiv != runtime_data->
subdiv) {
286 float (*vertex_cos)[3],
287 float (*deform_matrices)[3][3],
290 #if !defined(WITH_OPENSUBDIV)
296 (
void)deform_matrices;
304 if (subdiv ==
NULL) {
309 if (subdiv != runtime_data->
subdiv) {
315 static bool get_show_adaptive_options(
const bContext *
C,
Panel *panel)
353 bool show_adaptive_options =
false;
354 bool ob_use_adaptive_subdivision =
false;
365 ob_use_adaptive_subdivision =
RNA_boolean_get(&ob_cycles_ptr,
"use_adaptive_subdivision");
366 show_adaptive_options = get_show_adaptive_options(
C, panel);
377 if (show_adaptive_options) {
380 "use_adaptive_subdivision",
382 IFACE_(
"Adaptive Subdivision"),
385 if (ob_use_adaptive_subdivision && show_adaptive_options) {
386 uiItemR(layout, &ob_cycles_ptr,
"dicing_rate", 0,
NULL, ICON_NONE);
396 TIP_(
"Final Scale: Render %.2f px, Viewport %.2f px"),
411 uiItemR(layout,
ptr,
"show_only_control_edges", 0,
NULL, ICON_NONE);
417 uiItemL(layout,
"Autosmooth or custom normals detected, disabling GPU subdivision", ICON_INFO);
430 bool ob_use_adaptive_subdivision =
false;
431 bool show_adaptive_options =
false;
437 ob_use_adaptive_subdivision =
RNA_boolean_get(&ob_cycles_ptr,
"use_adaptive_subdivision");
438 show_adaptive_options = get_show_adaptive_options(
C, panel);
447 uiLayoutSetActive(layout, !(show_adaptive_options && ob_use_adaptive_subdivision));
476 "SubsurfModifierData",
478 &RNA_SubsurfModifier,
typedef float(TangentPoint)[2]
struct Scene * CTX_data_scene(const bContext *C)
struct RenderEngineType * CTX_data_engine_type(const bContext *C)
void CustomData_clear_layer_flag(struct CustomData *data, int type, int flag)
void * CustomData_get_layer(const struct CustomData *data, int type)
void CustomData_set_layer_flag(struct CustomData *data, int type, int flag)
void BKE_mesh_calc_normals_split(struct Mesh *mesh)
void BKE_mesh_set_custom_normals(struct Mesh *mesh, float(*r_custom_loopnors)[3])
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, int flag)
@ eModifierTypeType_Constructive
void BKE_modifier_set_error(const struct Object *ob, struct ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
bool BKE_scene_uses_cycles(const struct Scene *scene)
int get_render_subsurf_level(const struct RenderData *r, int lvl, bool for_render)
bool BKE_scene_uses_cycles_experimental_features(struct Scene *scene)
void BKE_subdiv_free(Subdiv *subdiv)
struct Mesh * BKE_subdiv_to_ccg_mesh(struct Subdiv *subdiv, const SubdivToCCGSettings *settings, const struct Mesh *coarse_mesh)
struct Mesh * BKE_subdiv_to_mesh(struct Subdiv *subdiv, const SubdivToMeshSettings *settings, const struct Mesh *coarse_mesh)
int BKE_subsurf_modifier_eval_required_mode(bool is_final_render, bool is_edit_mode)
bool BKE_subsurf_modifier_can_do_gpu_subdiv(const struct Scene *scene, const struct Object *ob, const struct Mesh *mesh, const struct SubsurfModifierData *smd, int required_mode)
bool BKE_subsurf_modifier_force_disable_gpu_evaluation_for_mesh(const struct SubsurfModifierData *smd, const struct Mesh *mesh)
struct Subdiv * BKE_subsurf_modifier_subdiv_descriptor_ensure(struct SubsurfRuntimeData *runtime_data, const struct Mesh *mesh, bool for_draw_code)
bool BKE_subsurf_modifier_use_custom_loop_normals(const struct SubsurfModifierData *smd, const struct Mesh *mesh)
bool BKE_subsurf_modifier_runtime_init(struct SubsurfModifierData *smd, bool use_render_params)
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
void ccgSubSurf_free(CCGSubSurf *ss)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
#define CD_MASK_CUSTOMLOOPNORMAL
#define DNA_struct_default_get(struct_name)
struct SubsurfModifierData SubsurfModifierData
@ eSubsurfModifierFlag_UseCrease
@ eSubsurfModifierFlag_ControlEdges
@ eSubsurfModifierFlag_UseCustomNormals
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
static void copyData(const ModifierData *md, ModifierData *target, const int flag)
static Mesh * modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
static void subdiv_mesh_settings_init(SubdivToMeshSettings *settings, const SubsurfModifierData *smd, const ModifierEvalContext *ctx)
static bool dependsOnNormals(ModifierData *md)
static void freeRuntimeData(void *runtime_data_v)
static void subdiv_ccg_settings_init(SubdivToCCGSettings *settings, const SubsurfModifierData *smd, const ModifierEvalContext *ctx)
static void deformMatrices(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float(*vertex_cos)[3], float(*deform_matrices)[3][3], int verts_num)
ModifierTypeInfo modifierType_Subsurf
static void advanced_panel_draw(const bContext *C, Panel *panel)
static Mesh * subdiv_as_ccg(SubsurfModifierData *smd, const ModifierEvalContext *ctx, Mesh *mesh, Subdiv *subdiv)
static bool isDisabled(const Scene *scene, ModifierData *md, bool useRenderParams)
static void initData(ModifierData *md)
static void panelRegister(ARegionType *region_type)
static int subdiv_levels_for_modifier_get(const SubsurfModifierData *smd, const ModifierEvalContext *ctx)
static void freeData(ModifierData *md)
static Mesh * subdiv_as_mesh(SubsurfModifierData *smd, const ModifierEvalContext *ctx, Mesh *mesh, Subdiv *subdiv)
static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
static void panel_draw(const bContext *C, Panel *panel)
static void subdiv_cache_mesh_wrapper_settings(const ModifierEvalContext *ctx, Mesh *mesh, SubsurfModifierData *smd, SubsurfRuntimeData *runtime_data)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
void uiLayoutSetActive(uiLayout *layout, bool active)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiItemL(uiLayout *layout, const char *name, int icon)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
SyclQueue void void size_t num_bytes void
ccl_global KernelShaderEvalInput ccl_global float * output
void(* MEM_freeN)(void *vmemh)
static const pxr::TfToken preview("preview", pxr::TfToken::Immortal)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
struct SubsurfRuntimeData * subsurf_runtime_data
struct BMEditMesh * edit_mesh
struct ModifierData * next
struct Depsgraph * depsgraph
void(* render)(struct RenderEngine *engine, struct Depsgraph *depsgraph)