static void initData(ShaderFxData *fx) { ColorizeShaderFxData *gpfx = (ColorizeShaderFxData *)fx; ARRAY_SET_ITEMS(gpfx->low_color, 0.0f, 0.0f, 0.0f, 1.0f); ARRAY_SET_ITEMS(gpfx->high_color, 1.0f, 1.0f, 1.0f, 1.0f); gpfx->mode = eShaderFxColorizeMode_GrayScale; gpfx->factor = 0.5f; }
/** * Until cycles moves to #MLoopTri, we need to keep face-rotation in sync with #test_index_face * * We only need to consider quads since #BKE_mesh_recalc_tessellation doesn't execute this on triangles. */ static void test_index_face_looptri(const MPoly *mp, MLoop *mloop, MLoopTri *lt) { if (mp->totloop == 4) { if (UNLIKELY((mloop[mp->loopstart + 2].v == 0) || (mloop[mp->loopstart + 3].v == 0))) { /* remap: (2, 3, 0, 1) */ unsigned int l = mp->loopstart; ARRAY_SET_ITEMS(lt[0].tri, l + 2, l + 3, l + 0); ARRAY_SET_ITEMS(lt[1].tri, l + 2, l + 0, l + 1); } } }
static void initData(ShaderFxData *fx) { BlurShaderFxData *gpfx = (BlurShaderFxData *)fx; ARRAY_SET_ITEMS(gpfx->radius, 1, 1); gpfx->samples = 4; gpfx->coc = 0.025f; }
void BLF_buffer_col(int fontid, float r, float g, float b, float a) { FontBLF *font = blf_get(fontid); if (font) { ARRAY_SET_ITEMS(font->buf_info.col_init, r, g, b, a); } }
/* Get palette color or create a new one */ bGPDpalettecolor *ED_gpencil_stroke_getcolor(bGPdata *gpd, bGPDstroke *gps) { bGPDpalette *palette; bGPDpalettecolor *palcolor; if ((gps->palcolor != NULL) && ((gps->flag & GP_STROKE_RECALC_COLOR) == 0)) return gps->palcolor; /* get palette */ palette = BKE_gpencil_palette_getactive(gpd); if (palette == NULL) { palette = BKE_gpencil_palette_addnew(gpd, DATA_("GP_Palette"), true); } /* get color */ palcolor = BKE_gpencil_palettecolor_getbyname(palette, gps->colorname); if (palcolor == NULL) { if (gps->palcolor == NULL) { palcolor = BKE_gpencil_palettecolor_addnew(palette, DATA_("Color"), true); /* set to a different color */ ARRAY_SET_ITEMS(palcolor->color, 1.0f, 0.0f, 1.0f, 0.9f); } else { palcolor = BKE_gpencil_palettecolor_addnew(palette, gps->colorname, true); /* set old color and attributes */ bGPDpalettecolor *gpscolor = gps->palcolor; copy_v4_v4(palcolor->color, gpscolor->color); copy_v4_v4(palcolor->fill, gpscolor->fill); palcolor->flag = gpscolor->flag; } } /* clear flag and set pointer */ gps->flag &= ~GP_STROKE_RECALC_COLOR; gps->palcolor = palcolor; return palcolor; }
void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, MTex *slot, int sizex, int sizey, int method) { Object *ob = CTX_data_active_object(C); wmJob *wm_job; ShaderPreview *sp; Scene *scene = CTX_data_scene(C); short id_type = GS(id->name); /* Use workspace render only for buttons Window, * since the other previews are related to the datablock. */ if (!check_engine_supports_preview(scene)) { return; } /* Only texture node preview is supported with Cycles. */ if (method == PR_NODE_RENDER && id_type != ID_TE) { return; } ED_preview_ensure_dbase(); wm_job = WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), owner, "Shader Preview", WM_JOB_EXCL_RENDER, WM_JOB_TYPE_RENDER_PREVIEW); sp = MEM_callocN(sizeof(ShaderPreview), "shader preview"); /* customdata for preview thread */ sp->scene = scene; sp->depsgraph = CTX_data_depsgraph(C); sp->owner = owner; sp->sizex = sizex; sp->sizey = sizey; sp->pr_method = method; sp->id = id; sp->id_copy = duplicate_ids(id); sp->own_id_copy = true; sp->parent = parent; sp->slot = slot; sp->bmain = CTX_data_main(C); Material *ma = NULL; /* hardcoded preview .blend for Eevee + Cycles, this should be solved * once with custom preview .blend path for external engines */ /* grease pencil use its own preview file */ if (GS(id->name) == ID_MA) { ma = (Material *)id; } if ((ma == NULL) || (ma->gp_style == NULL)) { sp->pr_main = G_pr_main; } else { sp->pr_main = G_pr_main_grease_pencil; } if (ob && ob->totcol) { copy_v4_v4(sp->color, ob->color); } else { ARRAY_SET_ITEMS(sp->color, 0.0f, 0.0f, 0.0f, 1.0f); } /* setup job */ WM_jobs_customdata_set(wm_job, sp, shader_preview_free); WM_jobs_timer(wm_job, 0.1, NC_MATERIAL, NC_MATERIAL); WM_jobs_callbacks(wm_job, common_preview_startjob, NULL, shader_preview_updatejob, NULL); WM_jobs_start(CTX_wm_manager(C), wm_job); }
/* patching UserDef struct and Themes */ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef) { #define USER_VERSION_ATLEAST(ver, subver) MAIN_VERSION_ATLEAST(bmain, ver, subver) /* the UserDef struct is not corrected with do_versions() .... ugh! */ if (userdef->wheellinescroll == 0) { userdef->wheellinescroll = 3; } if (userdef->menuthreshold1 == 0) { userdef->menuthreshold1 = 5; userdef->menuthreshold2 = 2; } if (userdef->mixbufsize == 0) { userdef->mixbufsize = 2048; } if (userdef->autokey_mode == 0) { /* 'add/replace' but not on */ userdef->autokey_mode = 2; } if (userdef->savetime <= 0) { userdef->savetime = 1; // XXX error(STRINGIFY(BLENDER_STARTUP_FILE)" is buggy, please consider removing it.\n"); } if (userdef->gizmo_size == 0) { userdef->gizmo_size = 75; userdef->gizmo_flag |= USER_GIZMO_DRAW; } if (userdef->pad_rot_angle == 0.0f) { userdef->pad_rot_angle = 15.0f; } /* graph editor - unselected F-Curve visibility */ if (userdef->fcu_inactive_alpha == 0) { userdef->fcu_inactive_alpha = 0.25f; } if (!USER_VERSION_ATLEAST(192, 0)) { strcpy(userdef->sounddir, "/"); } /* patch to set Dupli Armature */ if (!USER_VERSION_ATLEAST(220, 0)) { userdef->dupflag |= USER_DUP_ARM; } /* added seam, normal color, undo */ if (!USER_VERSION_ATLEAST(235, 0)) { userdef->uiflag |= USER_GLOBALUNDO; if (userdef->undosteps == 0) { userdef->undosteps = 32; } } if (!USER_VERSION_ATLEAST(236, 0)) { /* illegal combo... */ if (userdef->flag & USER_LMOUSESELECT) { userdef->flag &= ~USER_TWOBUTTONMOUSE; } } if (!USER_VERSION_ATLEAST(240, 0)) { userdef->uiflag |= USER_PLAINMENUS; } if (!USER_VERSION_ATLEAST(242, 0)) { /* set defaults for 3D View rotating axis indicator */ /* since size can't be set to 0, this indicates it's not saved in startup.blend */ if (userdef->rvisize == 0) { userdef->rvisize = 15; userdef->rvibright = 8; userdef->uiflag |= USER_SHOW_GIZMO_AXIS; } } if (!USER_VERSION_ATLEAST(244, 0)) { /* set default number of recently-used files (if not set) */ if (userdef->recent_files == 0) { userdef->recent_files = 10; } } if (!USER_VERSION_ATLEAST(245, 3)) { if (userdef->coba_weight.tot == 0) { BKE_colorband_init(&userdef->coba_weight, true); } } if (!USER_VERSION_ATLEAST(245, 3)) { userdef->flag |= USER_ADD_VIEWALIGNED | USER_ADD_EDITMODE; } if (!USER_VERSION_ATLEAST(250, 0)) { /* adjust grease-pencil distances */ userdef->gp_manhattendist = 1; userdef->gp_euclideandist = 2; /* adjust default interpolation for new IPO-curves */ userdef->ipo_new = BEZT_IPO_BEZ; } if (!USER_VERSION_ATLEAST(250, 3)) { /* new audio system */ if (userdef->audiochannels == 0) { userdef->audiochannels = 2; } if (userdef->audioformat == 0) { userdef->audioformat = 0x24; } if (userdef->audiorate == 0) { userdef->audiorate = 48000; } } if (!USER_VERSION_ATLEAST(250, 8)) { wmKeyMap *km; for (km = userdef->user_keymaps.first; km; km = km->next) { if (STREQ(km->idname, "Armature_Sketch")) { strcpy(km->idname, "Armature Sketch"); } else if (STREQ(km->idname, "View3D")) { strcpy(km->idname, "3D View"); } else if (STREQ(km->idname, "View3D Generic")) { strcpy(km->idname, "3D View Generic"); } else if (STREQ(km->idname, "EditMesh")) { strcpy(km->idname, "Mesh"); } else if (STREQ(km->idname, "UVEdit")) { strcpy(km->idname, "UV Editor"); } else if (STREQ(km->idname, "Animation_Channels")) { strcpy(km->idname, "Animation Channels"); } else if (STREQ(km->idname, "GraphEdit Keys")) { strcpy(km->idname, "Graph Editor"); } else if (STREQ(km->idname, "GraphEdit Generic")) { strcpy(km->idname, "Graph Editor Generic"); } else if (STREQ(km->idname, "Action_Keys")) { strcpy(km->idname, "Dopesheet"); } else if (STREQ(km->idname, "NLA Data")) { strcpy(km->idname, "NLA Editor"); } else if (STREQ(km->idname, "Node Generic")) { strcpy(km->idname, "Node Editor"); } else if (STREQ(km->idname, "Logic Generic")) { strcpy(km->idname, "Logic Editor"); } else if (STREQ(km->idname, "File")) { strcpy(km->idname, "File Browser"); } else if (STREQ(km->idname, "FileMain")) { strcpy(km->idname, "File Browser Main"); } else if (STREQ(km->idname, "FileButtons")) { strcpy(km->idname, "File Browser Buttons"); } else if (STREQ(km->idname, "Buttons Generic")) { strcpy(km->idname, "Property Editor"); } } } if (!USER_VERSION_ATLEAST(252, 3)) { if (userdef->flag & USER_LMOUSESELECT) { userdef->flag &= ~USER_TWOBUTTONMOUSE; } } if (!USER_VERSION_ATLEAST(252, 4)) { /* default new handle type is auto handles */ userdef->keyhandles_new = HD_AUTO; } if (!USER_VERSION_ATLEAST(257, 0)) { /* clear "AUTOKEY_FLAG_ONLYKEYINGSET" flag from userprefs, * so that it doesn't linger around from old configs like a ghost */ userdef->autokey_flag &= ~AUTOKEY_FLAG_ONLYKEYINGSET; } if (!USER_VERSION_ATLEAST(260, 3)) { /* if new keyframes handle default is stuff "auto", make it "auto-clamped" instead * was changed in 260 as part of GSoC11, but version patch was wrong */ if (userdef->keyhandles_new == HD_AUTO) { userdef->keyhandles_new = HD_AUTO_ANIM; } /* enable (Cycles) addon by default */ BKE_addon_ensure(&userdef->addons, "cycles"); } if (!USER_VERSION_ATLEAST(267, 0)) { /* GL Texture Garbage Collection */ if (userdef->textimeout == 0) { userdef->texcollectrate = 60; userdef->textimeout = 120; } if (userdef->memcachelimit <= 0) { userdef->memcachelimit = 32; } if (userdef->dbl_click_time == 0) { userdef->dbl_click_time = 350; } if (userdef->v2d_min_gridsize == 0) { userdef->v2d_min_gridsize = 35; } if (userdef->widget_unit == 0) { userdef->widget_unit = 20; } if (userdef->anisotropic_filter <= 0) { userdef->anisotropic_filter = 1; } if (userdef->ndof_sensitivity == 0.0f) { userdef->ndof_sensitivity = 1.0f; userdef->ndof_flag = (NDOF_LOCK_HORIZON | NDOF_SHOULD_PAN | NDOF_SHOULD_ZOOM | NDOF_SHOULD_ROTATE); } if (userdef->ndof_orbit_sensitivity == 0.0f) { userdef->ndof_orbit_sensitivity = userdef->ndof_sensitivity; if (!(userdef->flag & USER_TRACKBALL)) { userdef->ndof_flag |= NDOF_TURNTABLE; } } } /* NOTE!! from now on use userdef->versionfile and userdef->subversionfile */ #undef USER_VERSION_ATLEAST #define USER_VERSION_ATLEAST(ver, subver) MAIN_VERSION_ATLEAST(userdef, ver, subver) if (!USER_VERSION_ATLEAST(271, 5)) { userdef->pie_menu_radius = 100; userdef->pie_menu_threshold = 12; userdef->pie_animation_timeout = 6; } if (!USER_VERSION_ATLEAST(275, 2)) { userdef->ndof_deadzone = 0.1; } if (!USER_VERSION_ATLEAST(275, 4)) { userdef->node_margin = 80; } if (!USER_VERSION_ATLEAST(278, 6)) { /* Clear preference flags for re-use. */ userdef->flag &= ~(USER_FLAG_NUMINPUT_ADVANCED | USER_FLAG_UNUSED_2 | USER_FLAG_UNUSED_3 | USER_FLAG_UNUSED_6 | USER_FLAG_UNUSED_7 | USER_FLAG_UNUSED_9 | USER_DEVELOPER_UI); userdef->uiflag &= ~(USER_HEADER_BOTTOM); userdef->transopts &= ~(USER_TR_UNUSED_2 | USER_TR_UNUSED_3 | USER_TR_UNUSED_4 | USER_TR_UNUSED_6 | USER_TR_UNUSED_7); userdef->uiflag |= USER_LOCK_CURSOR_ADJUST; } if (!USER_VERSION_ATLEAST(280, 20)) { userdef->gpu_viewport_quality = 0.6f; /* Reset theme, old themes will not be compatible with minor version updates from now on. */ for (bTheme *btheme = userdef->themes.first; btheme; btheme = btheme->next) { memcpy(btheme, &U_theme_default, sizeof(*btheme)); } /* Annotations - new layer color * Replace anything that used to be set if it looks like was left * on the old default (i.e. black), which most users used */ if ((userdef->gpencil_new_layer_col[3] < 0.1f) || (userdef->gpencil_new_layer_col[0] < 0.1f)) { /* - New color matches the annotation pencil icon * - Non-full alpha looks better! */ ARRAY_SET_ITEMS(userdef->gpencil_new_layer_col, 0.38f, 0.61f, 0.78f, 0.9f); } } if (!USER_VERSION_ATLEAST(280, 31)) { /* Remove select/action mouse from user defined keymaps. */ for (wmKeyMap *keymap = userdef->user_keymaps.first; keymap; keymap = keymap->next) { for (wmKeyMapDiffItem *kmdi = keymap->diff_items.first; kmdi; kmdi = kmdi->next) { if (kmdi->remove_item) { do_version_select_mouse(userdef, kmdi->remove_item); } if (kmdi->add_item) { do_version_select_mouse(userdef, kmdi->add_item); } } for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) { do_version_select_mouse(userdef, kmi); } } } if (!USER_VERSION_ATLEAST(280, 33)) { /* Enable GLTF addon by default. */ BKE_addon_ensure(&userdef->addons, "io_scene_gltf2"); } if (!USER_VERSION_ATLEAST(280, 35)) { /* Preserve RMB select setting after moving to Python and changing default value. */ if (USER_VERSION_ATLEAST(280, 32) || !(userdef->flag & USER_LMOUSESELECT)) { BKE_keyconfig_pref_set_select_mouse(userdef, 1, false); } userdef->flag &= ~USER_LMOUSESELECT; } if (!USER_VERSION_ATLEAST(280, 38)) { /* (keep this block even if it becomes empty). */ copy_v4_fl4(userdef->light_param[0].vec, -0.580952, 0.228571, 0.781185, 0.0); copy_v4_fl4(userdef->light_param[0].col, 0.900000, 0.900000, 0.900000, 1.000000); copy_v4_fl4(userdef->light_param[0].spec, 0.318547, 0.318547, 0.318547, 1.000000); userdef->light_param[0].flag = 1; userdef->light_param[0].smooth = 0.1; copy_v4_fl4(userdef->light_param[1].vec, 0.788218, 0.593482, -0.162765, 0.0); copy_v4_fl4(userdef->light_param[1].col, 0.267115, 0.269928, 0.358840, 1.000000); copy_v4_fl4(userdef->light_param[1].spec, 0.090838, 0.090838, 0.090838, 1.000000); userdef->light_param[1].flag = 1; userdef->light_param[1].smooth = 0.25; copy_v4_fl4(userdef->light_param[2].vec, 0.696472, -0.696472, -0.172785, 0.0); copy_v4_fl4(userdef->light_param[2].col, 0.293216, 0.304662, 0.401968, 1.000000); copy_v4_fl4(userdef->light_param[2].spec, 0.069399, 0.020331, 0.020331, 1.000000); userdef->light_param[2].flag = 1; userdef->light_param[2].smooth = 0.4; copy_v4_fl4(userdef->light_param[3].vec, 0.021053, -0.989474, 0.143173, 0.0); copy_v4_fl4(userdef->light_param[3].col, 0.0, 0.0, 0.0, 1.0); copy_v4_fl4(userdef->light_param[3].spec, 0.072234, 0.082253, 0.162642, 1.000000); userdef->light_param[3].flag = 1; userdef->light_param[3].smooth = 0.7; copy_v3_fl3(userdef->light_ambient, 0.025000, 0.025000, 0.025000); userdef->flag &= ~(USER_FLAG_UNUSED_4); userdef->uiflag &= ~(USER_HEADER_FROM_PREF | USER_UIFLAG_UNUSED_12 | USER_UIFLAG_UNUSED_22); } if (!USER_VERSION_ATLEAST(280, 41)) { /* (keep this block even if it becomes empty). */ if (userdef->pie_tap_timeout == 0) { userdef->pie_tap_timeout = 20; } } if (!USER_VERSION_ATLEAST(280, 44)) { userdef->uiflag &= ~(USER_UIFLAG_UNUSED_0 | USER_UIFLAG_UNUSED_1); userdef->uiflag2 &= ~(USER_UIFLAG2_UNUSED_0); userdef->gp_settings &= ~(GP_PAINT_UNUSED_0); } if (!USER_VERSION_ATLEAST(280, 50)) { /* 3ds is no longer enabled by default and not ported yet. */ BKE_addon_remove_safe(&userdef->addons, "io_scene_3ds"); } if (!USER_VERSION_ATLEAST(280, 51)) { userdef->move_threshold = 2; } if (!USER_VERSION_ATLEAST(280, 58)) { if (userdef->image_draw_method != IMAGE_DRAW_METHOD_GLSL) { userdef->image_draw_method = IMAGE_DRAW_METHOD_AUTO; } } /* patch to set Dupli Lightprobes and Grease Pencil */ if (!USER_VERSION_ATLEAST(280, 58)) { userdef->dupflag |= USER_DUP_LIGHTPROBE; userdef->dupflag |= USER_DUP_GPENCIL; } if (!USER_VERSION_ATLEAST(280, 60)) { const float GPU_VIEWPORT_QUALITY_FXAA = 0.10f; const float GPU_VIEWPORT_QUALITY_TAA8 = 0.25f; const float GPU_VIEWPORT_QUALITY_TAA16 = 0.6f; const float GPU_VIEWPORT_QUALITY_TAA32 = 0.8f; if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_FXAA) { userdef->viewport_aa = SCE_DISPLAY_AA_OFF; } else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA8) { userdef->viewport_aa = SCE_DISPLAY_AA_FXAA; } else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA16) { userdef->viewport_aa = SCE_DISPLAY_AA_SAMPLES_8; } else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA32) { userdef->viewport_aa = SCE_DISPLAY_AA_SAMPLES_16; } else { userdef->viewport_aa = SCE_DISPLAY_AA_SAMPLES_32; } } if (!USER_VERSION_ATLEAST(280, 62)) { /* (keep this block even if it becomes empty). */ if (userdef->vbotimeout == 0) { userdef->vbocollectrate = 60; userdef->vbotimeout = 120; } if (userdef->lookdev_sphere_size == 0) { userdef->lookdev_sphere_size = 150; } userdef->pref_flag |= USER_PREF_FLAG_SAVE; } if (!USER_VERSION_ATLEAST(280, 73)) { userdef->drag_threshold = 30; userdef->drag_threshold_mouse = 3; userdef->drag_threshold_tablet = 10; } /** * Include next version bump. */ { /* pass */ } if (userdef->pixelsize == 0.0f) { userdef->pixelsize = 1.0f; } for (bTheme *btheme = userdef->themes.first; btheme; btheme = btheme->next) { do_versions_theme(userdef, btheme); } #undef USER_VERSION_ATLEAST }