44 const bool is_stroke_order_3d,
57 for (
int i = 0;
i < tot_materials;
i++) {
124#define SORT_IMPL_LINKTYPE tObject
126#define SORT_IMPL_FUNC gpencil_tobject_sort_fn_r
130#undef SORT_IMPL_LINKTYPE
134 const tObject *ob_a = (
const tObject *)a;
196 const bke::greasepencil::Layer &layer)
198 const bool is_obact = ((inst->
obact) && (inst->
obact == ob));
200 !grease_pencil.is_layer_active(&layer);
205 if (is_obact && is_fade) {
212 return layer.opacity;
220 const bool use_onion = (onion_id != 0);
226 const bool use_next_col = onion_id > 0;
230 float3 color_next, color_prev;
231 if (use_onion_custom_col) {
240 const float4 onion_col_custom = use_next_col ?
float4(color_next, 1.0f) :
243 *r_alpha = use_onion_fade ? (1.0f /
abs(onion_id)) : 0.5f;
244 *r_alpha *= onion_factor;
245 *r_alpha = (onion_factor > 0.0f) ?
clamp_f(*r_alpha, 0.1f, 1.0f) :
246 clamp_f(*r_alpha, 0.01f, 1.0f);
249 return onion_col_custom;
256 layer_tint[3] = 0.0f;
269 const float hsv_saturation = 0.7f;
270 const float hsv_value = 0.6f;
275 const float hsv[3] = {hue, hsv_saturation, hsv_value};
283 if (skip_onion && layer->is_onion) {
286 if (layer->layer_id == layer_id) {
297 const bool is_used_as_mask,
314 const bool disable_masks_render = is_viewlayer_render &&
317 bool is_masked = !disable_masks_render && layer.use_masks() &&
320 const float vert_col_opacity = (override_vertcol) ?
326 inst, ob, grease_pencil, layer) :
331 inst, grease_pencil, onion_id, &layer_alpha);
337 tgp_layer->
layer_id = *grease_pencil.get_layer_index(layer);
338 tgp_layer->
is_onion = onion_id != 0;
345 bool valid_mask =
false;
357 const TreeNode *node = grease_pencil.find_node_by_name(
mask->layer_name);
358 if (node ==
nullptr) {
362 if ((&mask_layer == &layer) || !mask_layer.is_visible()) {
365 const int index = *grease_pencil.get_layer_index(mask_layer);
380 is_masked = valid_mask;
408 if (tgp_layer->
blend_ps ==
nullptr) {
409 tgp_layer->
blend_ps = std::make_unique<PassSimple>(
"GPencil Blend Layer");
413 pass.state_set(
state);
415 pass.push_constant(
"blend_mode",
int(layer.
blend_mode));
416 pass.push_constant(
"blend_opacity", layer_opacity);
419 pass.bind_texture(
"mask_buf", (is_masked) ? &inst->
mask_tx : &inst->
dummy_tx);
420 pass.state_stencil(0xFF, 0xFF, 0xFF);
427 pass.push_constant(
"blend_mode", 999);
436 if (tgp_layer->
geom_ps ==
nullptr) {
437 tgp_layer->
geom_ps = std::make_unique<PassSimple>(
"GPencil Layer");
442 GPUTexture **depth_tex = (is_in_front) ? &inst->
dummy_depth : &inst->scene_depth_tx;
443 GPUTexture **mask_tex = (is_masked) ? &inst->
mask_tx : &inst->dummy_tx;
451 pass.state_set(
state);
453 pass.bind_texture(
"gp_scene_depth_tx", depth_tex);
454 pass.bind_texture(
"gp_mask_tx", mask_tex);
456 pass.push_constant(
"gp_stroke_order3d", tgp_ob->
is_drawmode3d);
457 pass.push_constant(
"gp_vertex_color_opacity", vert_col_opacity);
459 pass.bind_texture(
"gp_fill_tx", inst->
dummy_tx);
460 pass.bind_texture(
"gp_stroke_tx", inst->
dummy_tx);
469 pass.push_constant(
"gp_layer_tint", gpl_color);
471 pass.push_constant(
"gp_layer_opacity", layer_alpha);
472 pass.state_stencil(0xFF, 0xFF, 0xFF);
#define GPENCIL_SIMPLIFY_TINT(scene)
Low-level operations for grease pencil.
General operations, lookup, etc. for materials.
MaterialGPencilStyle * BKE_gpencil_material_settings(Object *ob, short act)
int BKE_object_material_used_with_fallback_eval(const Object &ob)
General operations, lookup, etc. for blender objects.
void BLI_bitmap_set_all(BLI_bitmap *bitmap, bool set, size_t bits)
#define BLI_BITMAP_SET(_bitmap, _index, _set)
unsigned int BLI_ghashutil_strhash_p_murmur(const void *ptr)
BLI_INLINE float BLI_hash_int_01(unsigned int k)
Single link-list utility macros. (header only API).
#define BLI_LINKS_APPEND(list, link)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
MINLINE float clamp_f(float value, float min, float max)
void hsv_to_rgb_v(const float hsv[3], float r_rgb[3])
void orthogonalize_m4(float R[4][4], int axis)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void rescale_m4(float mat[4][4], const float scale[3])
void mul_m4_v3(const float M[4][4], float r[3])
bool invert_m4(float mat[4][4])
void transpose_m4(float R[4][4])
void mul_mat3_m4_v3(const float mat[4][4], float r[3])
void unit_m4(float m[4][4])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE void add_v3_fl(float r[3], float f)
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3(float n[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
void * BLI_memblock_alloc(BLI_memblock *mblk) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
@ GP_LAYER_BLEND_HARDLIGHT
@ GP_LAYER_BLEND_MULTIPLY
@ GP_LAYER_BLEND_SUBTRACT
@ GP_LAYER_TREE_NODE_DISABLE_MASKS_IN_VIEWLAYER
@ GP_ONION_SKINNING_USE_FADE
@ GP_ONION_SKINNING_USE_CUSTOM_COLORS
@ GP_MATERIAL_IS_STROKE_HOLDOUT
@ GP_MATERIAL_IS_FILL_HOLDOUT
@ OB_MODE_PAINT_GREASE_PENCIL
@ V3D_SHADING_VERTEX_COLOR
@ V3D_SHADING_RANDOM_COLOR
void UI_GetThemeColor3fv(int colorid, float col[3])
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
const Layer & as_layer() const
constexpr bool is_empty() const
constexpr const char * c_str() const
StringRefNull view_layer_name() const
static View & default_get()
int64_t append_and_get_index(T &&elem)
static ShaderCache & get()
Mesh & DRW_object_get_data_for_drawing(const Object &object)
@ DRW_STATE_STENCIL_EQUAL
@ DRW_STATE_STENCIL_ALWAYS
@ DRW_STATE_BLEND_ADD_FULL
@ DRW_STATE_DEPTH_LESS_EQUAL
@ DRW_STATE_BLEND_ALPHA_PREMUL
@ DRW_STATE_DEPTH_GREATER
@ DRW_STATE_WRITE_STENCIL
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
static void grease_pencil_layer_random_color_get(const Object *ob, const bke::greasepencil::Layer &layer, float r_color[3])
void gpencil_object_cache_sort(Instance *inst)
static float4 grease_pencil_layer_final_tint_and_alpha_get(const Instance *inst, const GreasePencil &grease_pencil, const int onion_id, float *r_alpha)
static int gpencil_tobject_dist_sort(const void *a, const void *b)
static float grease_pencil_layer_final_opacity_get(const Instance *inst, const Object *ob, const GreasePencil &grease_pencil, const bke::greasepencil::Layer &layer)
tLayer * grease_pencil_layer_cache_add(Instance *inst, const Object *ob, const bke::greasepencil::Layer &layer, const int onion_id, const bool is_used_as_mask, tObject *tgp_ob)
tLayer * grease_pencil_layer_cache_get(tObject *tgp_ob, int layer_id, const bool skip_onion)
tObject * gpencil_object_cache_add(Instance *inst, Object *ob, const bool is_stroke_order_3d, const Bounds< float3 > bounds)
detail::Pass< command::DrawCommandBuf > PassSimple
CartesianBasis invert(const CartesianBasis &basis)
T midpoint(const T &a, const T &b)
VecBase< float, 4 > float4
VecBase< float, 3 > float3
GreasePencilLayerTreeNode base
GreasePencilOnionSkinningSettings onion_skinning_settings
struct BLI_memblock * gp_object_pool
tLayer_Pool * gp_layer_pool
float vertex_paint_opacity
struct ViewLayer * view_layer
float fade_gp_object_opacity
TextureFromPool color_layer_tx
struct blender::draw::gpencil::Instance::@152377213014026372203341216150255134366273024311 tobjects_infront
struct blender::draw::gpencil::Instance::@152377213014026372203341216150255134366273024311 tobjects
TextureFromPool reveal_layer_tx
struct BLI_memblock * gp_maskbit_pool
std::unique_ptr< PassSimple > geom_ps
BLI_bitmap * mask_invert_bits
std::unique_ptr< PassSimple > blend_ps
struct blender::draw::gpencil::tObject::@261115346126022153273150100117013047072144070143 layers
struct blender::draw::gpencil::tObject::@276074042154162376333337100100321162123366311017 vfx