95 float winmat[4][4], persmat[4][4];
111 float distance_factor = world_pixel_scale * scale * winmat[1][1] * vp_size[1] /
w;
118 if (blur_size[0] > 0.0f) {
125 if (blur_size[1] > 0.0f) {
171 float winmat[4][4], persmat[4][4];
184 float distance_factor = (world_pixel_scale * scale * winmat[1][1] * vp_size[1]) /
w;
245 float persmat[4][4], winmat[4][4], ob_center[3], pixsize_uniform[2];
255 mul_v3_m4v3(ob_center, persmat, ob->object_to_world().location());
267 mul_v2_fl(pixel_size, (world_pixel_scale * scale * winmat[1][1] * vp_size[1]) /
w);
277 if (pixel_size[0] > vp_size_inv[0]) {
278 copy_v2_fl2(pixsize_uniform, pixel_size[0], vp_size_inv[1]);
286 int samp_count = (pixel_size[0] / vp_size_inv[0] > 3.0) ? 2 : 1;
291 if (pixel_size[1] > vp_size_inv[1]) {
294 copy_v2_fl2(pixsize_uniform, vp_size_inv[0], pixel_size[1]);
298 int samp_count = (pixel_size[1] / vp_size_inv[1] > 3.0) ? 2 : 1;
311 float uv_mat[4][4], winmat[4][4], persmat[4][4], rot_center[3];
312 float wave_ofs[3], wave_dir[3], wave_phase, blur_dir[2], tmp[2];
319 const float ratio = vp_size_inv[1] / vp_size_inv[0];
322 (use_obj_pivot && fx->
object) ? fx->
object->object_to_world().location() :
323 ob->object_to_world().location());
332 float distance_factor = (world_pixel_scale * scale * winmat[1][1] * vp_size[1]) /
w;
337 rot_center[0] = rot_center[0] * 0.5f + 0.5f;
338 rot_center[1] = rot_center[1] * 0.5f + 0.5f;
342 translate_m4(uv_mat, rot_center[0], rot_center[1], 0.0f);
348 translate_m4(uv_mat, -rot_center[0], -rot_center[1], 0.0f);
364 std::swap(wave_ofs[0], wave_ofs[1]);
365 wave_ofs[1] *= -1.0f;
382 copy_v2_fl2(blur_dir, blur_size[0] * vp_size_inv[0], 0.0f);
492 float winmat[4][4], persmat[4][4], wave_center[3];
493 float wave_ofs[3], wave_dir[3], wave_phase;
500 mul_v3_m4v3(wave_center, persmat, ob->object_to_world().location());
506 float distance_factor = (world_pixel_scale * scale * winmat[1][1] * vp_size[1]) /
w;
508 wave_center[0] = wave_center[0] * 0.5f + 0.5f;
509 wave_center[1] = wave_center[1] * 0.5f + 0.5f;
521 std::swap(wave_ofs[0], wave_ofs[1]);
522 wave_ofs[1] *= -1.0f;
547 if (fx->
object ==
nullptr) {
551 float winmat[4][4], persmat[4][4], swirl_center[3];
565 float distance_factor = (world_pixel_scale * scale * winmat[1][1] * vp_size[1]) /
w;
571 float radius = fx->
radius * distance_factor;
591 const bool is_edit_mode)
Camera data-block and utility functions.
Single link-list utility macros. (header only api).
#define BLI_LINKS_APPEND(list, link)
#define LISTBASE_FOREACH(type, var, list)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
float mat4_to_scale(const float mat[4][4])
void unit_m4(float m[4][4])
void translate_m4(float mat[4][4], float Tx, float Ty, float Tz)
void rescale_m4(float mat[4][4], const float scale[3])
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
void rotate_m4(float mat[4][4], char axis, float angle)
MINLINE void copy_v2_fl2(float v[2], float x, float y)
MINLINE void madd_v2_v2fl(float r[2], const float a[2], float f)
MINLINE void mul_v2_v2(float r[2], const float a[2])
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void add_v2_fl(float r[2], float f)
MINLINE void zero_v2(float r[2])
MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
void rotate_v2_v2fl(float r[2], const float p[2], float angle)
MINLINE void copy_v2_fl(float r[2], float f)
void * BLI_memblock_alloc(BLI_memblock *mblk) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
@ eShaderFxGlowMode_Luminance
@ eShaderFxRimMode_Multiply
@ eShaderFxRimMode_Normal
@ eShaderFxRimMode_Overlay
@ eShaderFxRimMode_Subtract
@ eShaderFxRimMode_Divide
@ FX_PIXEL_FILTER_NEAREST
struct GPUShader GPUShader
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
local_group_size(16, 16) .push_constant(Type local_group_size(16, 16) .push_constant(Type input_tx sampler(1, ImageType::FLOAT_2D, "matte_tx") .image(0
const float * DRW_viewport_invert_size_get()
const float * DRW_viewport_size_get()
DRWShadingGroup * DRW_shgroup_create(GPUShader *shader, DRWPass *pass)
void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name, const float value)
void DRW_view_persmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_shgroup_state_disable(DRWShadingGroup *shgroup, DRWState state)
DRWPass * DRW_pass_create(const char *name, DRWState state)
void DRW_shgroup_state_enable(DRWShadingGroup *shgroup, DRWState state)
void DRW_shgroup_uniform_vec3_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
DRWShadingGroup * DRW_shgroup_create_sub(DRWShadingGroup *shgroup)
void DRW_view_winmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_shgroup_uniform_int_copy(DRWShadingGroup *shgroup, const char *name, const int value)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *shgroup, const Object *ob, uint tri_count)
void DRW_shgroup_uniform_vec4_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
void DRW_shgroup_uniform_bool_copy(DRWShadingGroup *shgroup, const char *name, const bool value)
void DRW_shgroup_uniform_vec2_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
void DRW_shgroup_uniform_texture_ref_ex(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex, GPUSamplerState sampler_state)
@ DRW_STATE_BLEND_ADD_FULL
@ DRW_STATE_BLEND_ALPHA_PREMUL
draw_view in_light_buf[] float
struct GPUShader * GPENCIL_shader_fx_composite_get(void)
struct GPUShader * GPENCIL_shader_fx_transform_get(void)
struct GPUShader * GPENCIL_shader_fx_shadow_get(void)
struct GPUShader * GPENCIL_shader_fx_blur_get(void)
struct GPUShader * GPENCIL_shader_fx_glow_get(void)
#define GPENCIL_PIXEL_FACTOR
struct GPUShader * GPENCIL_shader_fx_rim_get(void)
struct GPUShader * GPENCIL_shader_fx_colorize_get(void)
struct GPUShader * GPENCIL_shader_fx_pixelize_get(void)
static void gpencil_vfx_flip(FlipShaderFxData *fx, Object *, gpIterVfxData *iter)
void gpencil_vfx_cache_populate(GPENCIL_Data *vedata, Object *ob, GPENCIL_tObject *tgp_ob, const bool is_edit_mode)
static void gpencil_vfx_pixelize(PixelShaderFxData *fx, Object *ob, gpIterVfxData *iter)
static void gpencil_vfx_glow(GlowShaderFxData *fx, Object *, gpIterVfxData *iter)
static void gpencil_vfx_shadow(ShadowShaderFxData *fx, Object *ob, gpIterVfxData *iter)
static void gpencil_vfx_rim(RimShaderFxData *fx, Object *ob, gpIterVfxData *iter)
static void gpencil_vfx_colorize(ColorizeShaderFxData *fx, Object *, gpIterVfxData *iter)
static void gpencil_vfx_wave(WaveShaderFxData *fx, Object *ob, gpIterVfxData *iter)
static void gpencil_vfx_blur(BlurShaderFxData *fx, Object *ob, gpIterVfxData *iter)
static DRWShadingGroup * gpencil_vfx_pass_create(const char *name, DRWState state, gpIterVfxData *iter, GPUShader *sh, GPUSamplerState sampler=GPUSamplerState::internal_sampler())
static bool effect_is_active(ShaderFxData *fx, bool is_edit, bool is_viewport)
static void gpencil_vfx_swirl(SwirlShaderFxData *fx, Object *, gpIterVfxData *iter)
ccl_device_inline float3 cos(float3 v)
struct GPENCIL_StorageList * stl
struct GPENCIL_FramebufferList * fbl
struct GPUFrameBuffer * gpencil_fb
struct GPUFrameBuffer * object_fb
struct GPUFrameBuffer * layer_fb
struct BLI_memblock * gp_vfx_pool
GPUTexture * color_object_tx
GPUTexture * reveal_layer_tx
GPUTexture * color_layer_tx
GPUTexture * reveal_object_tx
struct GPENCIL_PrivateData * pd
struct GPENCIL_tObject::@201 vfx
GPUFrameBuffer ** target_fb
static constexpr GPUSamplerState internal_sampler()
static constexpr GPUSamplerState default_sampler()
GPUFrameBuffer ** source_fb
GPUTexture ** target_reveal_tx
GPUFrameBuffer ** target_fb
GPUTexture ** source_reveal_tx
GPUTexture ** source_color_tx
GPUTexture ** target_color_tx