Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/BKE_subdiv_modifier.h
| /* SPDX-License-Identifier: GPL-2.0-or-later | /* SPDX-License-Identifier: GPL-2.0-or-later | ||||
| * Copyright 2021 Blender Foundation. All rights reserved. */ | * Copyright 2021 Blender Foundation. All rights reserved. */ | ||||
| /** \file | /** \file | ||||
| * \ingroup bke | * \ingroup bke | ||||
| */ | */ | ||||
| #pragma once | #pragma once | ||||
| #include "BKE_subdiv.h" | |||||
| #include "BLI_sys_types.h" | #include "BLI_sys_types.h" | ||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| extern "C" { | extern "C" { | ||||
| #endif | #endif | ||||
| /* Hardcoded for until GPU shaders are automatically generated, then we will have a more | /* Hardcoded for until GPU shaders are automatically generated, then we will have a more | ||||
| * programmatic way of detecting this. */ | * programmatic way of detecting this. */ | ||||
| #define MAX_GPU_SUBDIV_SSBOS 12 | #define MAX_GPU_SUBDIV_SSBOS 12 | ||||
| struct Mesh; | struct Mesh; | ||||
| struct Object; | struct Object; | ||||
| struct Scene; | struct Scene; | ||||
| struct Subdiv; | struct Subdiv; | ||||
| struct SubdivSettings; | struct SubdivSettings; | ||||
| struct SubsurfModifierData; | struct SubsurfModifierData; | ||||
| void BKE_subsurf_modifier_subdiv_settings_init(struct SubdivSettings *settings, | /* Runtime subsurf modifier data, cached in modifier on evaluated meshes. */ | ||||
| const struct SubsurfModifierData *smd, | typedef struct SubsurfRuntimeData { | ||||
| bool use_render_params); | /* Subdivision settings, exists before descriptor or mesh wrapper is created. */ | ||||
| SubdivSettings settings; | |||||
| /* Cached subdivision surface descriptor, with topology and settings. */ | |||||
| struct Subdiv *subdiv; | |||||
| bool set_by_draw_code; | |||||
| /* Cached mesh wrapper data, to be used for GPU subdiv or lazy evaluation on CPU. */ | |||||
| bool has_gpu_subdiv; | |||||
| int resolution; | |||||
| bool use_optimal_display; | |||||
| bool calc_loop_normals; | |||||
| bool use_loop_normals; | |||||
| /* Cached from the draw code for stats display. */ | |||||
| int stats_totvert; | |||||
| int stats_totedge; | |||||
| int stats_totpoly; | |||||
| int stats_totloop; | |||||
| } SubsurfRuntimeData; | |||||
| bool BKE_subsurf_modifier_runtime_init(struct SubsurfModifierData *smd, bool use_render_params); | |||||
| bool BKE_subsurf_modifier_use_custom_loop_normals(const struct SubsurfModifierData *smd, | bool BKE_subsurf_modifier_use_custom_loop_normals(const struct SubsurfModifierData *smd, | ||||
| const struct Mesh *mesh); | const struct Mesh *mesh); | ||||
| /** | /** | ||||
| * Return true if GPU subdivision evaluation is disabled by force due to incompatible mesh or | * Return true if GPU subdivision evaluation is disabled by force due to incompatible mesh or | ||||
| * modifier settings. This will only return true if GPU subdivision is enabled in the preferences | * modifier settings. This will only return true if GPU subdivision is enabled in the preferences | ||||
| * and supported by the GPU. It is mainly useful for showing UI messages. | * and supported by the GPU. It is mainly useful for showing UI messages. | ||||
| Show All 14 Lines | |||||
| extern void (*BKE_subsurf_modifier_free_gpu_cache_cb)(struct Subdiv *subdiv); | extern void (*BKE_subsurf_modifier_free_gpu_cache_cb)(struct Subdiv *subdiv); | ||||
| /** | /** | ||||
| * Main goal of this function is to give usable subdivision surface descriptor | * Main goal of this function is to give usable subdivision surface descriptor | ||||
| * which matches settings and topology. | * which matches settings and topology. | ||||
| */ | */ | ||||
| struct Subdiv *BKE_subsurf_modifier_subdiv_descriptor_ensure( | struct Subdiv *BKE_subsurf_modifier_subdiv_descriptor_ensure( | ||||
| const struct SubsurfModifierData *smd, | struct SubsurfRuntimeData *runtime_data, const struct Mesh *mesh, bool for_draw_code); | ||||
| const struct SubdivSettings *subdiv_settings, | |||||
| const struct Mesh *mesh, | |||||
| bool for_draw_code); | |||||
| struct SubsurfRuntimeData *BKE_subsurf_modifier_ensure_runtime(struct SubsurfModifierData *smd); | |||||
| /** | /** | ||||
| * Return the #ModifierMode required for the evaluation of the subsurf modifier, | * Return the #ModifierMode required for the evaluation of the subsurf modifier, | ||||
| * which should be used to check if the modifier is enabled. | * which should be used to check if the modifier is enabled. | ||||
| */ | */ | ||||
| int BKE_subsurf_modifier_eval_required_mode(bool is_final_render, bool is_edit_mode); | int BKE_subsurf_modifier_eval_required_mode(bool is_final_render, bool is_edit_mode); | ||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||
| } | } | ||||
| #endif | #endif | ||||