Example #1
0
static void icon_preview_startjob_all_sizes(void *customdata,
                                            short *stop,
                                            short *do_update,
                                            float *progress)
{
  IconPreview *ip = (IconPreview *)customdata;
  IconPreviewSize *cur_size;

  for (cur_size = ip->sizes.first; cur_size; cur_size = cur_size->next) {
    PreviewImage *prv = ip->owner;

    if (prv->tag & PRV_TAG_DEFFERED_DELETE) {
      /* Non-thread-protected reading is not an issue here. */
      continue;
    }

    if (!check_engine_supports_preview(ip->scene)) {
      continue;
    }

    ShaderPreview *sp = MEM_callocN(sizeof(ShaderPreview), "Icon ShaderPreview");
    const bool is_render = !(prv->tag & PRV_TAG_DEFFERED);

    /* construct shader preview from image size and previewcustomdata */
    sp->scene = ip->scene;
    sp->depsgraph = ip->depsgraph;
    sp->owner = ip->owner;
    sp->sizex = cur_size->sizex;
    sp->sizey = cur_size->sizey;
    sp->pr_method = is_render ? PR_ICON_RENDER : PR_ICON_DEFERRED;
    sp->pr_rect = cur_size->rect;
    sp->id = ip->id;
    sp->id_copy = ip->id_copy;
    sp->bmain = ip->bmain;
    sp->own_id_copy = false;
    Material *ma = NULL;

    if (is_render) {
      BLI_assert(ip->id);

      /* grease pencil use its own preview file */
      if (GS(ip->id->name) == ID_MA) {
        ma = (Material *)ip->id;
      }

      if ((ma == NULL) || (ma->gp_style == NULL)) {
        sp->pr_main = G_pr_main;
      }
      else {
        sp->pr_main = G_pr_main_grease_pencil;
      }
    }

    common_preview_startjob(sp, stop, do_update, progress);
    shader_preview_free(sp);
  }
}
Example #2
0
static void icon_preview_free(void *customdata)
{
  IconPreview *ip = (IconPreview *)customdata;

  if (ip->id_copy) {
    /* Feels a bit hacky just to reuse shader_preview_free() */
    ShaderPreview *sp = MEM_callocN(sizeof(ShaderPreview), "Icon ShaderPreview");
    sp->id_copy = ip->id_copy;
    sp->own_id_copy = true;
    shader_preview_free(sp);
    ip->id_copy = NULL;
  }

  BLI_freelistN(&ip->sizes);
  MEM_freeN(ip);
}
static void icon_preview_startjob_all_sizes(void *customdata, short *stop, short *do_update, float *progress)
{
	IconPreview *ip = (IconPreview *)customdata;
	IconPreviewSize *cur_size = ip->sizes.first;
	const bool use_new_shading = BKE_scene_use_new_shading_nodes(ip->scene);

	while (cur_size) {
		PreviewImage *prv = ip->owner;
		ShaderPreview *sp = MEM_callocN(sizeof(ShaderPreview), "Icon ShaderPreview");
		const bool is_render = !prv->use_deferred;

		/* construct shader preview from image size and previewcustomdata */
		sp->scene = ip->scene;
		sp->owner = ip->owner;
		sp->sizex = cur_size->sizex;
		sp->sizey = cur_size->sizey;
		sp->pr_method = is_render ? PR_ICON_RENDER : PR_ICON_DEFERRED;
		sp->pr_rect = cur_size->rect;
		sp->id = ip->id;
		sp->bmain = ip->bmain;

		if (is_render) {
			BLI_assert(ip->id);
			if (use_new_shading) {
				/* texture icon rendering is hardcoded to use BI,
				 * so don't even think of using cycle's bmain for
				 * texture icons
				 */
				if (GS(ip->id->name) != ID_TE)
					sp->pr_main = G_pr_main_cycles;
				else
					sp->pr_main = G_pr_main;
			}
			else {
				sp->pr_main = G_pr_main;
			}
		}

		common_preview_startjob(sp, stop, do_update, progress);
		shader_preview_free(sp);

		cur_size = cur_size->next;
	}
}
Example #4
0
static void icon_preview_startjob_all_sizes(void *customdata, short *stop, short *do_update, float *progress)
{
	IconPreview *ip = (IconPreview *)customdata;
	IconPreviewSize *cur_size = ip->sizes.first;

	while (cur_size) {
		ShaderPreview *sp = MEM_callocN(sizeof(ShaderPreview), "Icon ShaderPreview");

		/* construct shader preview from image size and previewcustomdata */
		sp->scene = ip->scene;
		sp->owner = ip->owner;
		sp->sizex = cur_size->sizex;
		sp->sizey = cur_size->sizey;
		sp->pr_method = PR_ICON_RENDER;
		sp->pr_rect = cur_size->rect;
		sp->id = ip->id;

		common_preview_startjob(sp, stop, do_update, progress);
		shader_preview_free(sp);

		cur_size = cur_size->next;
	}
}