37 #define DNA_DEPRECATED_ALLOW
119 memset(&
image->runtime, 0,
sizeof(
image->runtime));
130 image->runtime.partial_update_register =
nullptr;
131 image->runtime.partial_update_user =
nullptr;
138 image->runtime.cache_mutex =
nullptr;
140 if (
image->runtime.partial_update_user !=
nullptr) {
142 image->runtime.partial_update_user =
nullptr;
151 if (
image !=
nullptr) {
159 const Image *image_src = (
const Image *)id_src;
171 image_dst->
cache =
nullptr;
172 image_dst->
rr =
nullptr;
176 slot->render =
nullptr;
183 for (
int eye = 0; eye < 2; eye++) {
211 slot->render =
nullptr;
235 function_callback(
id, &key, (
void **)&
image->cache, 0,
user_data);
237 auto gputexture_offset = [
image](
int target,
int eye) {
238 constexpr
size_t base_offset = offsetof(
Image, gputexture);
240 const size_t array_offset =
sizeof(*first) * (&
image->gputexture[target][eye] - first);
241 return base_offset + array_offset;
244 for (
int eye = 0; eye < 2; eye++) {
247 if (texture ==
nullptr) {
251 function_callback(
id, &key, (
void **)&
image->gputexture[
a][eye], 0,
user_data);
260 function_callback(
id, &key, (
void **)&slot->render, 0,
user_data);
326 ima->
cache =
nullptr;
331 for (
int i = 0; i < 3; i++) {
332 for (
int j = 0; j < 2; j++) {
359 imapf = imapf->
next) {
373 ima->packedfile =
nullptr;
396 ima->packedfile =
nullptr;
420 if (ima->
cache ==
nullptr) {
431 info.struct_size =
sizeof(
Image);
433 info.name_plural =
"images";
436 info.asset_type_info =
nullptr;
441 info.make_local =
nullptr;
442 info.foreach_id =
nullptr;
445 info.owner_get =
nullptr;
450 info.blend_read_expand =
nullptr;
452 info.blend_read_undo_preserve =
nullptr;
454 info.lib_override_apply_post =
nullptr;
462 Image *ima,
ImageUser *iuser,
int entry,
int cfra,
bool is_sequence);
468 #define IMA_NO_INDEX 0x7FEFEFEF
471 #define IMA_MAKE_INDEX(entry, index) (((entry) << 10) + (index))
472 #define IMA_INDEX_ENTRY(index) ((index) >> 10)
474 # define IMA_INDEX_PASS(index) (index & ~1023)
498 return (
a->index !=
b->index);
514 if (
image->cache ==
nullptr) {
530 if (
image->cache ==
nullptr) {
560 image->cache =
nullptr;
645 tile->tile_number = 1001;
649 for (
int i = 0; i < 8; i++) {
657 ima->
stereo3d_format = MEM_cnew<Stereo3dFormat>(
"Image Stereo Format");
682 bool *r_is_cached_empty)
714 imapf_src = imapf_src->
next) {
733 if (
dest && source &&
dest != source) {
737 if (source->
cache !=
nullptr) {
738 struct MovieCacheIter *iter;
773 return (ibuf !=
nullptr);
778 for (
int eye = 0; eye < 2; eye++) {
792 return (iuser && iuser->
tile) ? iuser->
tile :
tile->tile_number;
797 if (ima ==
nullptr) {
803 if (
ELEM(tile_number, 0, 1001)) {
813 if (
tile->tile_number == tile_number) {
829 if (r_ofs ==
nullptr) {
842 int tile_number = 1001 + 10 * iy + ix;
861 r_uv[0] =
static_cast<float>(
tile_index % 10);
862 r_uv[1] =
static_cast<float>(
tile_index / 10);
868 float r_uv_offset[2])
871 float dist_best_sq = FLT_MAX;
872 float uv_offset_best[2] = {0, 0};
873 int tile_number_best = -1;
875 const float co_offset[2] = {co[0] - 0.5f, co[1] - 0.5f};
884 if (dist_sq < dist_best_sq) {
885 dist_best_sq = dist_sq;
886 tile_number_best =
tile->tile_number;
889 if (dist_best_sq < 0.5f * 0.5f) {
894 if (tile_number_best != -1) {
897 return tile_number_best;
902 float uv_offset_dummy[2];
1031 const short gen_type = usersata->
gen_type;
1035 unsigned char *rect = usersata->
rect;
1057 const float color[4],
1061 unsigned char *rect =
nullptr;
1062 float *rect_float =
nullptr;
1063 float fill_color[4];
1068 if (colorspace_settings->
name[0] ==
'\0') {
1075 if (ibuf !=
nullptr) {
1092 if (colorspace_settings->
name[0] ==
'\0') {
1099 if (ibuf !=
nullptr) {
1100 rect = (
unsigned char *)ibuf->
rect;
1115 data.gen_type = gen_type;
1119 data.rect_float = rect_float;
1134 const float color[4],
1135 const bool stereo3d,
1147 if (ima ==
nullptr) {
1168 for (view_id = 0; view_id < 2; view_id++) {
1173 int entry = tiled ? 1001 : 0;
1190 const char *colorspace_name =
NULL;
1201 if (ibuf->
rect && !colorspace_name) {
1210 if (colorspace_name) {
1211 STRNCPY(
image->colorspace_settings.name, colorspace_name);
1217 if (name ==
nullptr) {
1267 Image *ima,
ImBuf *ibuf,
int view,
int tile_number,
const char *filepath)
1317 int entry = is_tiled ?
tile->tile_number : 0;
1324 const char *filepath = ibuf->
name;
1326 iuser.tile =
tile->tile_number;
1328 filepath = tiled_filepath;
1330 else if (is_multiview) {
1366 iuser.tile =
tile->tile_number;
1390 const size_t data_len)
1394 if (tot_viewfiles != 1) {
1395 BKE_report(reports,
RPT_ERROR,
"Cannot pack multiview images from raw data currently...");
1427 if (
image->cache !=
nullptr) {
1433 if (ibuf ==
nullptr) {
1447 ibufm = ibuf->
mipmap[level];
1476 printf(
"\ntotal image memory len: %.3f MB\n", (
double)totsize / (
double)(1024 * 1024));
1483 printf(
"%s len: %.3f MB\n", ima->
id.
name + 2, (
double)
size / (
double)(1024 * 1024));
1490 if (ibuf ==
nullptr) {
1498 #undef CHECK_FREED_SIZE
1502 #ifdef CHECK_FREED_SIZE
1521 #ifdef CHECK_FREED_SIZE
1527 #ifdef CHECK_FREED_SIZE
1532 #ifdef CHECK_FREED_SIZE
1533 printf(
"%s: freed total %lu MB\n", __func__, tot_freed_size / (1024 * 1024));
1539 if (ibuf ==
nullptr) {
1542 int except_frame = *(
int *)userdata;
1550 if (ima->
cache !=
nullptr) {
1574 #define STAMP_NAME_SIZE ((MAX_ID_NAME - 2) + 16)
1608 #undef STAMP_NAME_SIZE
1624 do_prefix ?
"File %s" :
"%s",
1625 (blendfile_path[0] !=
'\0') ? blendfile_path :
"<untitled>");
1628 stamp_data->
file[0] =
'\0';
1636 stamp_data->
note[0] =
'\0';
1643 "%04d/%02d/%02d %02d:%02d:%02d",
1650 SNPRINTF(stamp_data->
date, do_prefix ?
"Date %s" :
"%s", text);
1653 stamp_data->
date[0] =
'\0';
1666 SNPRINTF(stamp_data->
marker, do_prefix ?
"Marker %s" :
"%s", text);
1669 stamp_data->
marker[0] =
'\0';
1676 SNPRINTF(stamp_data->
time, do_prefix ?
"Timecode %s" :
"%s", text);
1679 stamp_data->
time[0] =
'\0';
1690 SNPRINTF(fmtstr, do_prefix ?
"Frame %%0%di" :
"%%0%di", digits);
1694 stamp_data->
frame[0] =
'\0';
1699 do_prefix ?
"Frame Range %d:%d" :
"%d:%d",
1709 do_prefix ?
"Camera %s" :
"%s",
1713 stamp_data->
camera[0] =
'\0';
1734 stamp_data->
scene[0] =
'\0';
1747 SNPRINTF(stamp_data->
strip, do_prefix ?
"Strip %s" :
"%s", text);
1750 stamp_data->
strip[0] =
'\0';
1770 stamp_data->
memory[0] =
'\0';
1775 do_prefix ?
"Frame Range %d:%d" :
"%d:%d",
1786 SNPRINTF(stamp_data->
hostname, do_prefix ?
"Hostname %s" :
"%s", hostname);
1799 SNPRINTF(stamp_data->
file, do_prefix ?
"File %s" :
"%s", stamp_data_template->
file);
1802 stamp_data->
file[0] =
'\0';
1808 stamp_data->
note[0] =
'\0';
1811 SNPRINTF(stamp_data->
date, do_prefix ?
"Date %s" :
"%s", stamp_data_template->
date);
1814 stamp_data->
date[0] =
'\0';
1820 stamp_data->
marker[0] =
'\0';
1823 SNPRINTF(stamp_data->
time, do_prefix ?
"Timecode %s" :
"%s", stamp_data_template->
time);
1826 stamp_data->
time[0] =
'\0';
1829 SNPRINTF(stamp_data->
frame, do_prefix ?
"Frame %s" :
"%s", stamp_data_template->
frame);
1832 stamp_data->
frame[0] =
'\0';
1836 do_prefix ?
"Frame Range %s" :
"%s",
1846 stamp_data->
camera[0] =
'\0';
1856 SNPRINTF(stamp_data->
scene, do_prefix ?
"Scene %s" :
"%s", stamp_data_template->
scene);
1859 stamp_data->
scene[0] =
'\0';
1862 SNPRINTF(stamp_data->
strip, do_prefix ?
"Strip %s" :
"%s", stamp_data_template->
strip);
1865 stamp_data->
strip[0] =
'\0';
1869 do_prefix ?
"RenderTime %s" :
"%s",
1876 SNPRINTF(stamp_data->
memory, do_prefix ?
"Peak Memory %s" :
"%s", stamp_data_template->
memory);
1879 stamp_data->
memory[0] =
'\0';
1883 stamp_data->
hostname, do_prefix ?
"Hostname %s" :
"%s", stamp_data_template->
hostname);
1893 unsigned char *rect,
1905 const char *display_device;
1916 #define TEXT_SIZE_CHECK(str, w, h) \
1917 ((str[0]) && ((void)(h = h_fixed), (w = (int)BLF_width(mono, str, sizeof(str)))))
1920 #define TEXT_SIZE_CHECK_WORD_WRAP(str, w, h) \
1921 ((str[0]) && (BLF_boundbox_ex(mono, str, sizeof(str), &wrap.rect, &wrap.info), \
1922 (void)(h = h_fixed * wrap.info.lines), \
1923 (w = BLI_rcti_size_x(&wrap.rect))))
1925 #define BUFF_MARGIN_X 2
1926 #define BUFF_MARGIN_Y 1
1928 if (!rect && !rectf) {
1936 if (stamp_data_template ==
nullptr) {
2276 BLF_buffer(mono,
nullptr,
nullptr, 0, 0, 0,
nullptr);
2279 #undef TEXT_SIZE_CHECK
2280 #undef TEXT_SIZE_CHECK_WORD_WRAP
2281 #undef BUFF_MARGIN_X
2282 #undef BUFF_MARGIN_Y
2297 stamp_data = MEM_cnew<StampData>(
"RenderResult.stamp_data");
2303 if (!allocate_only) {
2322 stamp_data = MEM_cnew<StampData>(__func__);
2363 if ((
callback ==
nullptr) || (stamp_data ==
nullptr)) {
2367 #define CALL(member, value_str) \
2368 if (noskip || stamp_data->member[0]) { \
2369 callback(data, value_str, stamp_data->member, sizeof(stamp_data->member)); \
2391 if (noskip || custom_field->value[0]) {
2392 callback(
data, custom_field->key, custom_field->value, strlen(custom_field->value) + 1);
2403 rr->
stamp_data = MEM_cnew<StampData>(
"RenderResult.stamp_data");
2415 if (stamp_data ==
nullptr) {
2423 custom_fieldn->value =
static_cast<char *
>(
MEM_dupallocN(custom_fieldn->value));
2431 if (stamp_data ==
nullptr) {
2475 rr->
stamp_data = MEM_cnew<StampData>(
"RenderResult.stamp_data");
2489 for (tot = ibuf->
x * ibuf->
y; tot--; buf += 4) {
2490 if (buf[3] < 1.0f) {
2495 else if (ibuf->
rect) {
2496 unsigned char *buf = (
unsigned char *)ibuf->
rect;
2497 for (tot = ibuf->
x * ibuf->
y; tot--; buf += 4) {
2498 if (buf[3] != 255) {
2524 const bool save_copy)
2526 ImBuf ibuf_back = *ibuf;
2574 if (
anim ==
nullptr) {
2579 if (ibuf ==
nullptr) {
2581 printf(
"not an anim: %s\n",
name);
2584 printf(
"anim file doesn't exist: %s\n",
name);
2630 if (ima ==
nullptr) {
2635 if (ima->
id.
us == 0) {
2673 if (is_multiview && !do_reset) {
2730 callback(ima,
id, iuser, customdata);
2739 callback(ima,
id, iuser, customdata);
2756 if (gpu_material_texture->iuser_available) {
2757 callback(gpu_material_texture->ima,
id, &gpu_material_texture->iuser, customdata);
2765 bool skip_nested_nodes,
2818 callback(bgpic->ima,
nullptr, &bgpic->iuser, customdata);
2864 ob =
static_cast<Object *
>(ob->id.next)) {
2874 ma =
static_cast<Material *
>(ma->id.next)) {
2879 light =
static_cast<Light *
>(light->id.next)) {
2894 cam =
static_cast<Camera *
>(cam->id.next)) {
2906 Image *changed_image =
static_cast<Image *
>(customdata);
2920 Image *changed_image =
static_cast<Image *
>(customdata);
2922 if (ima == changed_image) {
2962 for (
int eye = 0; eye < 2; eye++) {
2973 for (
int i = 0; i < totviews; i++) {
2984 if (ima ==
nullptr) {
3032 tile_next =
tile->next;
3036 base_tile->
next =
nullptr;
3071 imapf = imapf->
next) {
3079 printf(
"ERROR: Image \"%s\" not available. Keeping packed image\n", imapf->
filepath);
3093 ListBase new_tiles = {
nullptr,
nullptr};
3094 int new_start, new_range;
3110 bool needs_final_cleanup =
true;
3116 if (new_tile_number == remaining_tile_number) {
3117 needs_final_cleanup =
false;
3122 if (needs_final_cleanup) {
3167 const char *rp_name =
"";
3170 rpass = rpass->
next, rp_index++) {
3171 if (rp_index == pass) {
3178 rp_name = rpass->
name;
3188 if (rpass_ret ==
nullptr) {
3194 *r_passindex = (rpass == rpass_ret ? rp_index : pass);
3203 if (ima ==
nullptr ||
tile ==
nullptr) {
3207 if (
tile->label[0]) {
3227 bool all_valid_udim =
true;
3234 for (
int i = 0; i < dirs_num; i++) {
3235 if (!(dirs[i].
type & S_IFREG)) {
3240 dirs[i].
relname, udim_pattern, tile_format, &
id)) {
3245 all_valid_udim =
false;
3250 min_udim =
min_ii(min_udim,
id);
3251 max_udim =
max_ii(max_udim,
id);
3259 *r_tile_start = min_udim;
3260 *r_tile_range = max_udim - min_udim + 1;
3272 if (tile_number < 1001 || tile_number >
IMA_UDIM_MAX) {
3280 next_tile = next_tile->
next) {
3291 tile->tile_number = tile_number;
3304 for (
int eye = 0; eye < 2; eye++) {
3344 if (new_tile_number < 1001 || new_tile_number >
IMA_UDIM_MAX) {
3348 const int old_tile_number =
tile->tile_number;
3349 tile->tile_number = new_tile_number;
3353 for (
int i = 0; i < totviews; i++) {
3367 for (
int eye = 0; eye < 2; eye++) {
3401 const float color[4],
3415 if (tile_ibuf !=
nullptr) {
3426 return strstr(filename,
"<UDIM>") !=
nullptr || strstr(filename,
"<UVTILE>") !=
nullptr;
3432 "Only the file-name component should be used!");
3438 std::string
path(filename);
3444 std::regex pattern(R
"((.*[._-])([12]\d{3})([._-].*))");
3445 if (std::regex_search(
path, match, pattern)) {
3451 pattern = std::regex(R
"((.*)(u\d{1,2}_v\d{1,3})(\D.*))");
3452 if (std::regex_search(
path, match, pattern)) {
3471 for (
int i = 0; i < dirs_num; i++) {
3472 if (!(dirs[i].
type & S_IFREG)) {
3496 if (filepath ==
nullptr || r_tile_format ==
nullptr) {
3500 if (strstr(filepath,
"<UDIM>") !=
nullptr) {
3504 if (strstr(filepath,
"<UVTILE>") !=
nullptr) {
3514 const char *pattern,
3518 if (filepath ==
nullptr || pattern ==
nullptr || r_tile_number ==
nullptr) {
3526 if (sscanf(filepath, pattern, &u) == 1) {
3532 if (sscanf(filepath, pattern, &u, &
v) == 2) {
3533 *r_tile_number = 1001 + (u - 1) + ((
v - 1) * 10);
3542 const char *pattern,
3546 if (filepath ==
nullptr || pattern ==
nullptr) {
3551 sprintf(filepath, pattern, tile_number);
3554 int u = ((tile_number - 1001) % 10);
3555 int v = ((tile_number - 1001) / 10);
3556 sprintf(filepath, pattern, u + 1,
v + 1);
3567 if (rr ==
nullptr) {
3572 short index = 0, rv_index, rl_index = 0;
3581 if (iuser->
layer == rl_index) {
3603 if ((iuser->
view < 0) ||
3653 bool modified =
false;
3654 for (; rv; rv = rv->
next, iv = iv->
next) {
3666 ImageView *iv = MEM_cnew<ImageView>(
"Viewer Image View");
3740 last_slot->
render =
nullptr;
3744 if (free_current_slot) {
3781 if (left_iv ==
nullptr) {
3796 static void image_create_multilayer(
Image *ima,
ImBuf *ibuf,
int framenr)
3809 if (ima->
rr !=
nullptr) {
3861 if (!is_multiview) {
3874 struct ImBuf *ibuf =
nullptr;
3879 if (ima->
rr ==
nullptr || frame != ima->
rr->
framenr) {
3894 printf(
"error, multi is normal image\n");
3922 struct ImBuf *ibuf =
nullptr;
3927 if (ia->
anim ==
nullptr) {
3940 iuser_t.
view = view_id;
3948 if (ia->
anim && iuser && iuser->
frames == 0) {
3955 int fra = frame - 1;
3960 if (fra > (dur - 1)) {
3975 struct ImBuf *ibuf =
nullptr;
3982 for (
int i = 0; i < tot_viewfiles; i++) {
3984 ImageAnim *ia = MEM_cnew<ImageAnim>(
"Image Anim");
3989 if (!is_multiview) {
3997 for (
int i = 0; i < tot_viewfiles; i++) {
4005 for (
int i = 0; i < totviews; i++) {
4010 ibuf = ibuf_arr[(iuser ? iuser->
multi_index : 0)];
4013 for (
int i = 0; i < totviews; i++) {
4014 if (ibuf_arr[i] != ibuf) {
4027 const bool has_packed,
4028 const bool is_sequence,
4032 struct ImBuf *ibuf =
nullptr;
4035 *r_cache_ibuf =
true;
4039 if (has_packed && !is_sequence) {
4043 if (imapf->view == view_id && imapf->tile_number == tile_number) {
4044 if (imapf->packedfile) {
4046 imapf->packedfile->size,
4062 if (!(is_sequence || is_tiled)) {
4074 iuser_t.view = view_id;
4090 image_create_multilayer(ima, ibuf, cfra);
4096 *r_cache_ibuf =
false;
4105 if (!is_sequence && (has_packed ==
false) && (
G.fileflags &
G_FILE_AUTOPACK)) {
4111 imapf->
view = view_id;
4126 Image *ima,
ImageUser *iuser,
int entry,
int cfra,
bool is_sequence)
4128 struct ImBuf *ibuf =
nullptr;
4134 if (!(is_sequence || is_tiled)) {
4140 if (!is_sequence && has_packed) {
4148 if (!is_multiview) {
4150 ibuf =
load_image_single(ima, iuser, cfra, 0, has_packed, is_sequence, &put_in_cache);
4163 for (
int i = 0; i < tot_viewfiles; i++) {
4165 ima, iuser, cfra, i, has_packed, is_sequence, &cache_ibuf_arr[i]);
4170 tot_viewfiles == 1 && totviews >= 2) {
4176 ibuf = ibuf_arr[ibuf_index];
4178 for (
int i = 0; i < totviews; i++) {
4179 if (cache_ibuf_arr[i]) {
4185 for (
int i = 0; i < totviews; i++) {
4186 if (ibuf_arr[i] != ibuf) {
4197 ImBuf *ibuf =
nullptr;
4199 if (ima->
rr ==
nullptr) {
4234 float *rectf, *rectz;
4242 if (!(iuser && iuser->
scene)) {
4254 layer = iuser->
layer;
4256 actview = iuser->
view;
4269 rres.have_combined = ((
RenderView *)rres.views.first)->rectf !=
nullptr;
4272 if (!(rres.rectx > 0 && rres.recty > 0)) {
4287 if (rv ==
nullptr) {
4288 rv =
static_cast<RenderView *
>(rres.views.first);
4293 if (rv ==
nullptr) {
4294 rect = (
unsigned int *)rres.rect32;
4307 if (rres.have_combined && layer == 0) {
4310 else if (
rect && layer == 0) {
4318 else if (rres.layers.first) {
4320 BLI_findlink(&rres.layers, layer - (rres.have_combined ? 1 : 0)));
4324 rectf = rpass->
rect;
4333 rectz = rpass->
rect;
4342 if (ibuf ==
nullptr) {
4362 if (ibuf->
x != rres.rectx || ibuf->
y != rres.recty || ibuf->
rect_float != rectf) {
4366 ibuf->
x = rres.rectx;
4367 ibuf->
y = rres.recty;
4380 ibuf->
rect =
nullptr;
4426 if (is_multilayer) {
4473 Image *ima,
ImageUser *iuser,
int *r_entry,
int *r_index,
bool *r_is_cached_empty)
4475 ImBuf *ibuf =
nullptr;
4531 if (ima ==
nullptr) {
4536 if (
tile ==
nullptr) {
4550 ImBuf *ibuf =
nullptr;
4551 int entry = 0,
index = 0;
4562 bool is_cached_empty =
false;
4564 if (is_cached_empty) {
4568 if (ibuf ==
nullptr) {
4600 ima, iuser, 0, entry,
false);
4611 if (ima->
gen_x == 0) {
4614 if (ima->
gen_y == 0) {
4673 if (ima ==
nullptr) {
4690 if (
lock !=
nullptr) {
4729 return ibuf !=
nullptr;
4768 item = item->
next) {
4769 if (item->ibuf !=
nullptr) {
4811 if (
pool ==
nullptr) {
4843 item->
entry = entry;
4844 item->
index = index;
4860 if (
pool ==
nullptr) {
4869 if (r_is_in_range) {
4870 *r_is_in_range =
false;
4878 cfra = cfra - iuser->
sfra + 1;
4882 cfra = ((cfra) %
len);
4890 if (r_is_in_range) {
4891 *r_is_in_range =
true;
4898 else if (cfra >
len) {
4902 if (r_is_in_range) {
4903 *r_is_in_range =
true;
4909 if (framenr > iuser->
frames) {
4914 framenr = ((framenr) %
len);
4915 while (framenr < 0) {
4924 framenr += iuser->
offset;
4972 int cfra = *(
int *)customdata;
4993 *(
bool *)customdata =
true;
5001 bool has_animation =
false;
5002 bool skip_nested_nodes =
true;
5004 return has_animation;
5031 bool skip_nested_nodes =
true;
5044 const bool resolve_udim,
5045 const bool resolve_multiview)
5062 unsigned short numlen;
5070 else if (resolve_udim) {
5087 const int planes = (ibuf ? ibuf->
planes : 0);
5090 if (planes == 32 || planes == 16) {
5099 ImBuf *ibuf =
nullptr;
5102 if (
image !=
nullptr) {
5106 if (ibuf && ibuf->
x > 0 && ibuf->
y > 0) {
5108 *r_height = ibuf->
y;
5111 iuser->
scene !=
nullptr) {
5119 if (
image !=
nullptr) {
5152 unsigned char *pixels =
nullptr;
5160 pixels = (
unsigned char *)ibuf->
rect;
5163 pixels =
static_cast<unsigned char *
>(
MEM_dupallocN(pixels));
5182 float *pixels =
nullptr;
5240 bool is_dirty =
false;
5241 bool is_writable =
false;
5244 if (
image->cache !=
nullptr) {
5260 if (r_is_writable) {
5261 *r_is_writable = is_writable;
5288 if (
image->cache !=
nullptr) {
5293 if (ibuf !=
nullptr) {
5306 bool has_loaded_ibuf =
false;
5309 if (
image->cache !=
nullptr) {
5314 if (ibuf !=
nullptr) {
5315 has_loaded_ibuf =
true;
5324 return has_loaded_ibuf;
5329 ImBuf *ibuf =
nullptr;
5332 if (
image->cache !=
nullptr) {
5337 if (current_ibuf !=
nullptr &&
STREQ(current_ibuf->
name, name)) {
5338 ibuf = current_ibuf;
5353 ImBuf *ibuf =
nullptr;
5356 if (
image->cache !=
nullptr) {
5361 if (ibuf !=
nullptr) {
5384 if (!is_multiview) {
5390 for (
int i = 0; i < 2; i++) {
5399 const char *ext =
nullptr;
5403 if (prefix[0] ==
'\0') {
5455 RenderSlot *slot = MEM_cnew<RenderSlot>(
"Image new Render Slot");
5456 if (name && name[0]) {
5471 if (
G.is_rendering) {
5477 if (slot >= num_slots || num_slots == 1) {
5488 if (current_slot == remove_slot) {
5493 next_slot = current_slot;
5498 if (remove_slot == current_last_slot) {
5502 if (current_slot == remove_slot) {
5503 next_last_slot = next_slot;
5506 next_last_slot = current_slot;
5509 if (iuser ==
nullptr || iuser->
scene ==
nullptr) {
5513 if (re !=
nullptr) {
5517 current_last_slot = next_last_slot;
5520 current_slot = next_slot;
5527 if (remove_slot->
render) {
5541 if (
G.is_rendering) {
5556 if (render_slot->
render) {
5558 render_slot->
render =
nullptr;
typedef float(TangentPoint)[2]
bool BKE_bpath_foreach_path_fixed_process(struct BPathForeachPathData *bpath_data, char *path)
@ BKE_BPATH_FOREACH_PATH_SKIP_PACKED
@ BKE_BPATH_FOREACH_PATH_RESOLVE_TOKEN
@ BKE_BPATH_FOREACH_PATH_RELOAD_EDITED
void BKE_icon_id_delete(struct ID *id)
void BKE_previewimg_free(struct PreviewImage **prv)
void BKE_previewimg_id_copy(struct ID *new_id, const struct ID *old_id)
void BKE_icon_changed(int icon_id)
void BKE_previewimg_blend_read(struct BlendDataReader *reader, struct PreviewImage *prv)
void BKE_previewimg_blend_write(struct BlendWriter *writer, const struct PreviewImage *prv)
int BKE_icon_id_ensure(struct ID *id)
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
@ IDTYPE_FLAGS_NO_ANIMDATA
void(* IDTypeForeachCacheFunctionCallback)(struct ID *id, const struct IDCacheKey *cache_key, void **cache_p, uint flags, void *user_data)
@ UDIM_TILE_FORMAT_UVTILE
void() StampCallback(void *data, const char *propname, char *propvalue, int len)
void BKE_image_partial_update_free(struct PartialUpdateUser *user)
free a partial update user.
void BKE_image_partial_update_mark_full_update(struct Image *image)
Mark the whole image to be updated.
void BKE_image_buf_fill_checker_color(unsigned char *rect, float *rect_float, int width, int height)
void BKE_image_buf_fill_checker(unsigned char *rect, float *rect_float, int width, int height)
#define IMA_SIGNAL_COLORMANAGE
void BKE_image_partial_update_register_free(struct Image *image)
void BKE_image_free_gputextures(struct Image *ima)
#define IMA_SIGNAL_SRC_CHANGE
#define IMA_SIGNAL_USER_NEW_IMAGE
#define IMA_SIGNAL_RELOAD
void BKE_image_buf_fill_color(unsigned char *rect, float *rect_float, int width, int height, const float color[4])
void * BKE_libblock_alloc(struct Main *bmain, short type, const char *name, int flag) ATTR_WARN_UNUSED_RESULT
void BKE_id_free(struct Main *bmain, void *idv)
void id_us_ensure_real(struct ID *id)
void id_us_plus(struct ID *id)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
const char * BKE_main_blendfile_path(const struct Main *bmain) ATTR_NONNULL()
const char * BKE_main_blendfile_path_from_global(void)
#define SH_NODE_TEX_ENVIRONMENT
void BKE_ntree_update_tag_id_changed(struct Main *bmain, struct ID *id)
void BKE_ntree_update_main(struct Main *bmain, struct NodeTreeUpdateExtraParams *params)
struct PackedFile * BKE_packedfile_new(struct ReportList *reports, const char *filepath, const char *basepath)
struct PackedFile * BKE_packedfile_new_from_memory(void *mem, int memlen)
struct PackedFile * BKE_packedfile_duplicate(const struct PackedFile *pf_src)
void BKE_packedfile_blend_write(struct BlendWriter *writer, struct PackedFile *pf)
void BKE_packedfile_blend_read(struct BlendDataReader *reader, struct PackedFile **pf_p)
void BKE_packedfile_free(struct PackedFile *pf)
void BKE_report(ReportList *reports, eReportType type, const char *message)
bool BKE_scene_multiview_is_stereo3d(const struct RenderData *rd)
bool BKE_scene_multiview_is_render_view_active(const struct RenderData *rd, const struct SceneRenderView *srv)
void BKE_render_resolution(const struct RenderData *r, const bool use_crop, int *r_width, int *r_height)
void BKE_scene_multiview_view_prefix_get(struct Scene *scene, const char *name, char *r_prefix, const char **r_ext)
const char * BKE_scene_find_last_marker_name(const struct Scene *scene, int frame)
int BKE_scene_multiview_num_views_get(const struct RenderData *rd)
struct bScreen * BKE_workspace_active_screen_get(const struct WorkSpaceInstanceHook *hook) GETTER_ATTRS
void BLF_draw_buffer(int fontid, const char *str, size_t str_len) ATTR_NONNULL(2)
int BLF_descender(int fontid) ATTR_WARN_UNUSED_RESULT
int BLF_width_max(int fontid) ATTR_WARN_UNUSED_RESULT
void BLF_disable(int fontid, int option)
void BLF_buffer_col(int fontid, const float rgba[4]) ATTR_NONNULL(2)
void BLF_buffer(int fontid, float *fbuf, unsigned char *cbuf, int w, int h, int nch, struct ColorManagedDisplay *display)
void BLF_enable(int fontid, int option)
int BLF_height_max(int fontid) ATTR_WARN_UNUSED_RESULT
void BLF_size(int fontid, float size, int dpi)
void BLF_wordwrap(int fontid, int wrap_width)
void BLF_position(int fontid, float x, float y, float z)
#define BLI_assert_msg(a, msg)
int BLI_exists(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
unsigned int BLI_filelist_dir_contents(const char *dir, struct direntry **r_filelist)
void BLI_filelist_free(struct direntry *filelist, unsigned int nrentries)
int BLI_open(const char *filepath, int oflag, int pmode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
unsigned int BLI_ghashutil_strhash_p(const void *ptr)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
struct LinkData * BLI_genericNodeN(void *data)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
int BLI_listbase_count_at_most(const struct ListBase *listbase, int count_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void void BLI_INLINE bool BLI_listbase_is_single(const struct ListBase *lb)
void void BLI_listbase_sort(struct ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
MINLINE int integer_digits_i(int i)
MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2(float r[2], const float a[2])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void zero_v2(float r[2])
BLI_mempool * BLI_mempool_create(unsigned int esize, unsigned int elem_num, unsigned int pchunk, unsigned int flag) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
void * BLI_mempool_alloc(BLI_mempool *pool) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
void BLI_mempool_destroy(BLI_mempool *pool) ATTR_NONNULL(1)
const char * BLI_path_slash_find(const char *string) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
bool BLI_path_extension_check_array(const char *str, const char **ext_array) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
void BLI_split_dir_part(const char *string, char *dir, size_t dirlen)
int BLI_path_sequence_decode(const char *string, char *head, char *tail, unsigned short *r_digits_len)
const char * BLI_path_basename(const char *path) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
bool BLI_path_is_rel(const char *path) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
bool BLI_make_existing_file(const char *name)
void BLI_split_dirfile(const char *string, char *dir, char *file, size_t dirlen, size_t filelen)
bool BLI_path_extension_check(const char *str, const char *ext) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
void BLI_path_sequence_encode(char *string, const char *head, const char *tail, unsigned short numlen, int pic)
void BLI_split_file_part(const char *string, char *file, size_t filelen)
bool BLI_path_extension_check_n(const char *str,...) ATTR_NONNULL(1) ATTR_SENTINEL(0)
bool BLI_path_abs(char *path, const char *basepath) ATTR_NONNULL()
void BLI_join_dirfile(char *__restrict dst, size_t maxlen, const char *__restrict dir, const char *__restrict file) ATTR_NONNULL()
bool BLI_path_suffix(char *string, size_t maxlen, const char *suffix, const char *sep) ATTR_NONNULL()
#define STRNCPY(dst, src)
#define SNPRINTF(dst, format,...)
char * BLI_str_replaceN(const char *__restrict str, const char *__restrict substr_old, const char *__restrict substr_new) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
void BLI_hostname_get(char *buffer, size_t bufsize)
void BLI_task_isolate(void(*func)(void *userdata), void *userdata)
void BLI_thread_unlock(int type)
void BLI_mutex_end(ThreadMutex *mutex)
void BLI_thread_lock(int type)
void BLI_mutex_init(ThreadMutex *mutex)
int BLI_thread_is_main(void)
void BLI_mutex_lock(ThreadMutex *mutex)
void BLI_mutex_unlock(ThreadMutex *mutex)
pthread_mutex_t ThreadMutex
size_t BLI_timecode_string_from_time_simple(char *str, size_t maxncpy, double time_seconds) ATTR_NONNULL()
size_t BLI_timecode_string_from_time(char *str, size_t maxncpy, int brevity_level, float time_seconds, double fps, short timecode_style) ATTR_NONNULL()
#define POINTER_FROM_INT(i)
#define UNUSED_VARS_NDEBUG(...)
#define POINTER_AS_INT(i)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
const char * dirname(char *path)
#define BLO_read_data_address(reader, ptr_p)
bool BLO_read_data_is_undo(BlendDataReader *reader)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
#define BLO_write_struct_list(writer, struct_name, list_ptr)
bool BLO_write_is_undo(BlendWriter *writer)
#define BLT_I18NCONTEXT_ID_IMAGE
#define CLOG_STR_ERROR(clg_ref, str)
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
float DEG_get_ctime(const Depsgraph *graph)
eEvaluationMode DEG_get_mode(const Depsgraph *graph)
@ ID_RECALC_COPY_ON_WRITE
#define ID_BLEND_PATH_FROM_GLOBAL(_id)
#define ID_BLEND_PATH(_bmain, _id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
#define DNA_struct_default_get(struct_name)
@ IMA_USER_FRAME_IN_RANGE
#define IMA_NEED_FRAME_RECALC
@ IMA_ALPHA_CHANNEL_PACKED
Object is a sort of wrapper for general info.
#define R_STAMP_RENDERTIME
#define R_STAMP_FRAME_RANGE
#define R_STAMP_HIDE_LABELS
#define STEREO_LEFT_SUFFIX
#define STEREO_RIGHT_NAME
#define STEREO_RIGHT_SUFFIX
#define R_STAMP_CAMERALENS
#define IMG_SIZE_FALLBACK
@ USER_TIMECODE_SMPTE_FULL
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint * textures
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
ListBase GPU_material_textures(GPUMaterial *material)
struct GPUTexture GPUTexture
void GPU_texture_free(GPUTexture *tex)
@ COLOR_ROLE_DEFAULT_FLOAT
@ COLOR_ROLE_DEFAULT_BYTE
bool IMB_colormanagement_space_name_is_data(const char *name)
const char * IMB_colormanagement_colorspace_get_name(const struct ColorSpace *colorspace)
void IMB_colormanagement_assign_rect_colorspace(struct ImBuf *ibuf, const char *name)
const char * IMB_colormanagement_role_colorspace_name_get(int role)
void IMB_colormanagement_check_is_data(struct ImBuf *ibuf, const char *name)
struct ColorManagedDisplay * IMB_colormanagement_display_get_named(const char *name)
struct ImBuf * IMB_makeSingleUser(struct ImBuf *ibuf)
bool IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
void IMB_free_anim(struct anim *anim)
struct ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
void imb_freerectImBuf(struct ImBuf *ibuf)
void IMB_refImBuf(struct ImBuf *ibuf)
struct anim * IMB_open_anim(const char *name, int ib_flags, int streamindex, char colorspace[IM_MAX_SPACE])
void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, const float col[4], struct ColorManagedDisplay *display, int x1, int y1, int x2, int y2)
void IMB_ImBufFromStereo3d(const struct Stereo3dFormat *s3d, struct ImBuf *ibuf_stereo, struct ImBuf **r_ibuf_left, struct ImBuf **r_ibuf_right)
struct ImBuf * IMB_loadiffname(const char *filepath, int flags, char colorspace[IM_MAX_SPACE])
struct ImBuf * IMB_ibImageFromMemory(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE], const char *descr)
struct ImBuf * IMB_anim_absolute(struct anim *anim, int position, IMB_Timecode_Type tc, IMB_Proxy_Size preview_size)
bool IMB_saveiff(struct ImBuf *ibuf, const char *filepath, int flags)
int IMB_anim_get_duration(struct anim *anim, IMB_Timecode_Type tc)
Contains defines and structs used throughout the imbuf module.
@ IB_DISPLAY_BUFFER_INVALID
const char * imb_ext_movie[]
#define IMB_MIPMAP_LEVELS
@ IB_alphamode_channel_packed
struct MovieCache * IMB_moviecache_create(const char *name, int keysize, GHashHashFP hashfp, GHashCmpFP cmpfp)
struct ImBuf * IMB_moviecache_get(struct MovieCache *cache, void *userkey, bool *r_is_cached_empty)
void IMB_moviecache_set_getdata_callback(struct MovieCache *cache, MovieCacheGetKeyDataFP getdatafp)
void IMB_moviecacheIter_free(struct MovieCacheIter *iter)
void IMB_moviecache_remove(struct MovieCache *cache, void *userkey)
void IMB_moviecache_cleanup(struct MovieCache *cache, bool(cleanup_check_cb)(struct ImBuf *ibuf, void *userkey, void *userdata), void *userdata)
struct MovieCacheIter * IMB_moviecacheIter_new(struct MovieCache *cache)
void IMB_moviecache_put(struct MovieCache *cache, void *userkey, struct ImBuf *ibuf)
void IMB_moviecache_free(struct MovieCache *cache)
bool IMB_moviecacheIter_done(struct MovieCacheIter *iter)
void IMB_moviecacheIter_step(struct MovieCacheIter *iter)
void * IMB_moviecacheIter_getUserKey(struct MovieCacheIter *iter)
struct ImBuf * IMB_moviecacheIter_getImBuf(struct MovieCacheIter *iter)
bool IMB_exr_has_multilayer(void *handle)
void IMB_exr_close(void *handle)
Read Guarded memory(de)allocation.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between camera
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block TEX_IMAGE
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block SH_NODE_TEX_IMAGE
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
Platform independent time functions.
int pad[32 - sizeof(int)]
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
struct MovieCache * cache
struct ListBase packedfiles
struct PreviewImage * preview
ColorManagedColorspaceSettings colorspace_settings
struct GPUTexture * gputexture[3][2]
struct Stereo3dFormat * stereo3d_format
CCL_NAMESPACE_BEGIN struct Options options
const Depsgraph * depsgraph
DEGForeachIDComponentCallback callback
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img image(1, GPU_R32F, Qualifier::WRITE, ImageType::FLOAT_2D_ARRAY, "out_weight_img") .image(3
#define pf(_x, _i)
Prefetch 64.
void IMB_freeImBuf(ImBuf *UNUSED(ibuf))
ccl_gpu_kernel_postfix ccl_global KernelWorkTile * tiles
ccl_global const KernelWorkTile * tile
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
size_t(* MEM_allocN_len)(const void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
static struct PartialUpdateUser * wrap(PartialUpdateUserImpl *user)
static void area(int d1, int d2, int e1, int e2, float weights[2])
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
RenderResult * RE_AcquireResultRead(Render *re)
void RE_ReleaseResultImage(Render *re)
Render * RE_GetSceneRender(const Scene *scene)
void RE_AcquireResultImage(Render *re, RenderResult *rr, const int view_id)
void RE_ClearResult(Render *re)
void RE_SwapResult(Render *re, RenderResult **rr)
void RE_FreeRenderResult(RenderResult *rr)
void RE_ReleaseResult(Render *re)
RenderResult * RE_MultilayerConvert(void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
RenderStats * RE_GetStats(Render *re)
bool RE_RenderResult_is_stereo(const RenderResult *rr)
bool RE_HasCombinedLayer(const RenderResult *rr)
void BKE_imbuf_stamp_info(const RenderResult *rr, ImBuf *ibuf)
static void image_blend_read_lib(BlendLibReader *UNUSED(reader), ID *id)
int BKE_image_get_tile_from_pos(Image *ima, const float uv[2], float r_uv[2], float r_ofs[2])
static void image_init_color_management(Image *ima)
ImBuf * BKE_image_get_first_ibuf(Image *image)
static void image_free_tile(Image *ima, ImageTile *tile)
static RenderPass * image_render_pass_get(RenderLayer *rl, const int pass, const int view, int *r_passindex)
bool BKE_image_is_multilayer(const Image *ima)
ImageTile * BKE_image_get_tile_from_iuser(Image *ima, const ImageUser *iuser)
bool BKE_image_has_alpha(Image *image)
void BKE_image_ensure_viewer_views(const RenderData *rd, Image *ima, ImageUser *iuser)
static void image_walk_ntree_all_users(bNodeTree *ntree, ID *id, void *customdata, void callback(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata))
void BKE_image_user_frame_calc(Image *ima, ImageUser *iuser, int cfra)
RenderSlot * BKE_image_get_renderslot(Image *ima, int index)
void BKE_image_reassign_tile(struct Image *ima, ImageTile *tile, int new_tile_number)
static int image_num_viewfiles(Image *ima)
BLI_INLINE bool image_quick_test(Image *ima, const ImageUser *iuser)
void BKE_stamp_info_from_imbuf(RenderResult *rr, ImBuf *ibuf)
void BKE_image_alpha_mode_from_extension(Image *image)
static void image_viewer_create_views(const RenderData *rd, Image *ima)
void BKE_image_sort_tiles(struct Image *ima)
void BKE_image_get_size_fl(Image *image, ImageUser *iuser, float r_size[2])
void BKE_image_free_buffers_ex(Image *ima, bool do_lock)
static void stampdata(const Scene *scene, Object *camera, StampData *stamp_data, int do_prefix, bool use_dynamic)
bool BKE_image_user_id_has_animation(ID *id)
bool BKE_image_has_filepath(const Image *ima)
void BKE_image_set_filepath_from_tile_number(char *filepath, const char *pattern, eUDIM_TILE_FORMAT tile_format, int tile_number)
static ImBuf * image_load_sequence_multilayer(Image *ima, ImageUser *iuser, int entry, int frame)
ImageTile * BKE_image_get_tile(Image *ima, int tile_number)
void BKE_image_get_aspect(Image *image, float *r_aspx, float *r_aspy)
bool BKE_image_fill_tile(struct Image *ima, ImageTile *tile, int width, int height, const float color[4], int gen_type, int planes, bool is_float)
static void imagecache_keydata(void *userkey, int *framenr, int *proxy, int *render_flags)
static void metadata_copy_custom_fields(const char *field, const char *value, void *rr_v)
static void metadata_get_field(void *data, const char *propname, char *propvalue, int len)
bool BKE_image_has_multiple_ibufs(Image *image)
static int tile_sort_cb(const void *a, const void *b)
static void image_remove_ibuf(Image *ima, int index, int entry)
void BKE_image_release_renderresult(Scene *scene, Image *ima)
static void image_get_entry_and_index(Image *ima, ImageUser *iuser, int *r_entry, int *r_index)
static void image_init_data(ID *id)
static ImBuf * add_ibuf_size(unsigned int width, unsigned int height, const char *name, int depth, int floatbuf, short gen_type, const float color[4], ColorManagedColorspaceSettings *colorspace_settings)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
void BKE_image_free_data(Image *ima)
static bool imagecache_check_free_anim(ImBuf *ibuf, void *UNUSED(userkey), void *userdata)
static unsigned int imagecache_hashhash(const void *key_v)
static uintptr_t image_mem_size(Image *image)
static void image_tag_reload(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata)
void BKE_image_user_file_path(const ImageUser *iuser, const Image *ima, char *filepath)
static ImBuf * image_get_cached_ibuf_for_index_entry(Image *ima, int index, int entry, bool *r_is_cached_empty)
void BKE_image_tag_time(Image *ima)
static void image_init_multilayer_multiview(Image *ima, RenderResult *rr)
void BKE_image_merge(Main *bmain, Image *dest, Image *source)
static void image_user_id_has_animation(Image *ima, ID *UNUSED(iuser_id), ImageUser *UNUSED(iuser), void *customdata)
bool BKE_image_memorypack(Image *ima)
void BKE_image_packfiles(ReportList *reports, Image *ima, const char *basepath)
#define IMA_MAKE_INDEX(entry, index)
Image * BKE_image_load(Main *bmain, const char *filepath)
void BKE_image_packfiles_from_mem(ReportList *reports, Image *ima, char *data, const size_t data_len)
static ImBuf * image_load_image_file(Image *ima, ImageUser *iuser, int entry, int cfra, bool is_sequence)
bool BKE_image_remove_tile(struct Image *ima, ImageTile *tile)
bool BKE_image_is_dirty(Image *image)
static const char * stamp_metadata_fields[]
void BKE_stamp_data_free(StampData *stamp_data)
struct StampData * BKE_stamp_info_from_scene_static(const Scene *scene)
void BKE_image_free_anim_ibufs(Image *ima, int except_frame)
Image * BKE_image_add_from_imbuf(Main *bmain, ImBuf *ibuf, const char *name)
void BKE_image_pool_free(ImagePool *pool)
int BKE_image_user_frame_get(const ImageUser *iuser, int cfra, bool *r_is_in_range)
static void image_tag_frame_recalc(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata)
static void image_foreach_path(ID *id, BPathForeachPathData *bpath_data)
static void stampdata_from_template(StampData *stamp_data, const Scene *scene, const StampData *stamp_data_template, bool do_prefix)
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
ImagePool * BKE_image_pool_new(void)
#define CALL(member, value_str)
static void image_user_id_eval_animation(Image *ima, ID *UNUSED(iduser_id), ImageUser *iuser, void *customdata)
struct anim * openanim_noload(const char *name, int flags, int streamindex, char colorspace[IMA_MAX_SPACE])
Image * BKE_image_load_exists(Main *bmain, const char *filepath)
static void image_editors_update_frame(Image *ima, ID *UNUSED(iuser_id), ImageUser *iuser, void *customdata)
static ImBuf * image_get_cached_ibuf(Image *ima, ImageUser *iuser, int *r_entry, int *r_index, bool *r_is_cached_empty)
void BKE_image_free_packedfiles(Image *ima)
static void image_walk_id_all_users(ID *id, bool skip_nested_nodes, void *customdata, void callback(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata))
void BKE_image_free_buffers(Image *ima)
void BKE_image_stamp_buf(Scene *scene, Object *camera, const StampData *stamp_data_template, unsigned char *rect, float *rectf, int width, int height, int channels)
static void image_foreach_cache(ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data)
void BKE_image_backup_render(Scene *scene, Image *ima, bool free_current_slot)
float * BKE_image_get_float_pixels_for_frame(struct Image *image, int frame, int tile)
void BKE_image_user_file_path_ex(const Main *bmain, const ImageUser *iuser, const Image *ima, char *filepath, const bool resolve_udim, const bool resolve_multiview)
bool BKE_image_get_tile_number_from_filepath(const char *filepath, const char *pattern, eUDIM_TILE_FORMAT tile_format, int *r_tile_number)
StampData * BKE_stamp_data_copy(const StampData *stamp_data)
bool BKE_image_has_opengl_texture(Image *ima)
static ImBuf * image_get_ibuf_multilayer(Image *ima, ImageUser *iuser)
static void image_free_anims(Image *ima)
bool BKE_image_scale(Image *image, int width, int height)
BLI_INLINE ImBuf * image_pool_find_item(ImagePool *pool, Image *image, int entry, int index, bool *found)
void BKE_image_get_tile_uv(const Image *ima, const int tile_number, float r_uv[2])
int BKE_imbuf_write(ImBuf *ibuf, const char *name, const ImageFormatData *imf)
struct anim * openanim(const char *name, int flags, int streamindex, char colorspace[IMA_MAX_SPACE])
bool BKE_imbuf_alpha_test(ImBuf *ibuf)
static void image_assign_ibuf(Image *ima, ImBuf *ibuf, int index, int entry)
static void image_walk_gpu_materials(ID *id, ListBase *gpu_materials, void *customdata, void callback(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata))
static int image_get_tile_number_from_iuser(const Image *ima, const ImageUser *iuser)
void BKE_imageuser_default(ImageUser *iuser)
bool BKE_image_has_anim(Image *ima)
#define TEXT_SIZE_CHECK(str, w, h)
RenderSlot * BKE_image_add_renderslot(Image *ima, const char *name)
static ImBuf * image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
void BKE_image_free_all_textures(Main *bmain)
ImBuf * BKE_image_get_ibuf_with_name(Image *image, const char *name)
void BKE_image_get_tile_label(Image *ima, ImageTile *tile, char *label, int len_label)
static int imbuf_alpha_flags_for_image(Image *ima)
void BKE_image_ensure_tile_token(char *filename)
Image * BKE_image_load_exists_ex(Main *bmain, const char *filepath, bool *r_exists)
int BKE_image_sequence_guess_offset(Image *image)
bool BKE_image_is_stereo(const Image *ima)
static ImBuf * image_get_render_result(Image *ima, ImageUser *iuser, void **r_lock)
bool BKE_image_is_multiview(const Image *ima)
void BKE_stamp_info_callback(void *data, struct StampData *stamp_data, StampCallback callback, bool noskip)
void BKE_image_get_size(Image *image, ImageUser *iuser, int *r_width, int *r_height)
static void imagecache_put(Image *image, int index, ImBuf *ibuf)
void BKE_render_result_stamp_info(Scene *scene, Object *camera, struct RenderResult *rr, bool allocate_only)
static void image_free_data(ID *id)
static bool image_memorypack_imbuf(Image *ima, ImBuf *ibuf, int view, int tile_number, const char *filepath)
static void image_runtime_reset(struct Image *image)
static void image_update_views_format(Image *ima, ImageUser *iuser)
bool BKE_image_get_tile_info(char *filepath, ListBase *tiles, int *r_tile_start, int *r_tile_range)
bool BKE_image_is_openexr(struct Image *ima)
static void image_free_packedfiles(Image *ima)
static void image_init_after_load(Image *ima, ImageUser *iuser, ImBuf *UNUSED(ibuf))
char BKE_image_alpha_mode_from_extension_ex(const char *filepath)
void BKE_image_free_views(Image *image)
void BKE_image_all_free_anim_ibufs(Main *bmain, int cfra)
void BKE_image_walk_all_users(const Main *mainp, void *customdata, void callback(Image *ima, ID *iuser_id, ImageUser *iuser, void *customdata))
RenderResult * BKE_image_acquire_renderresult(Scene *scene, Image *ima)
bool BKE_image_remove_renderslot(Image *ima, ImageUser *iuser, int slot)
void BKE_image_signal(Main *bmain, Image *ima, ImageUser *iuser, int signal)
static void image_colorspace_from_imbuf(Image *image, const ImBuf *ibuf)
void BKE_render_result_stamp_data(RenderResult *rr, const char *key, const char *value)
static bool imagecache_check_dirty(ImBuf *ibuf, void *UNUSED(userkey), void *UNUSED(userdata))
static void image_blend_read_data(BlendDataReader *reader, ID *id)
int BKE_imbuf_write_stamp(const Scene *scene, const struct RenderResult *rr, ImBuf *ibuf, const char *name, const struct ImageFormatData *imf)
bool BKE_image_is_animated(Image *image)
bool BKE_stamp_is_known_field(const char *field_name)
bool BKE_image_clear_renderslot(Image *ima, ImageUser *iuser, int slot)
bool BKE_image_is_filename_tokenized(char *filepath)
int BKE_image_find_nearest_tile_with_offset(const Image *image, const float co[2], float r_uv_offset[2])
RenderPass * BKE_image_multilayer_index(RenderResult *rr, ImageUser *iuser)
static bool imagecache_hashcmp(const void *a_v, const void *b_v)
static ImBuf * image_load_movie_file(Image *ima, ImageUser *iuser, int frame)
static void imagecache_remove(Image *image, int index)
void BKE_image_user_id_eval_animation(Depsgraph *depsgraph, ID *id)
static void metadata_set_field(void *data, const char *propname, char *propvalue, int UNUSED(len))
char * BKE_image_get_tile_strformat(const char *filepath, eUDIM_TILE_FORMAT *r_tile_format)
void BKE_image_mark_dirty(Image *UNUSED(image), ImBuf *ibuf)
void BKE_image_editors_update_frame(const Main *bmain, int cfra)
void BKE_image_replace_imbuf(Image *image, ImBuf *ibuf)
void BKE_image_init_imageuser(Image *ima, ImageUser *iuser)
void BKE_image_pool_release_ibuf(Image *ima, ImBuf *ibuf, ImagePool *pool)
#define IMA_INDEX_ENTRY(index)
#define TEXT_SIZE_CHECK_WORD_WRAP(str, w, h)
static void image_buf_fill_isolated(void *usersata_v)
static struct ImBuf * imagecache_get(Image *image, int index, bool *r_is_cached_empty)
constexpr IDTypeInfo get_type_info()
unsigned char * BKE_image_get_pixels_for_frame(struct Image *image, int frame, int tile)
static void image_blend_write(BlendWriter *writer, ID *id, const void *id_address)
static Image * image_alloc(Main *bmain, const char *name, short source, short type)
Image * BKE_image_add_generated(Main *bmain, unsigned int width, unsigned int height, const char *name, int depth, int floatbuf, short gen_type, const float color[4], const bool stereo3d, const bool is_data, const bool tiled)
static void image_free_cached_frames(Image *image)
static void copy_image_packedfiles(ListBase *lb_dst, const ListBase *lb_src)
int BKE_imbuf_write_as(ImBuf *ibuf, const char *name, const ImageFormatData *imf, const bool save_copy)
void BKE_image_file_format_set(Image *image, int ftype, const ImbFormatOptions *options)
static void image_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int flag)
static void image_runtime_free_data(struct Image *image)
ImageTile * BKE_image_add_tile(struct Image *ima, int tile_number, const char *label)
static int image_get_multiview_index(Image *ima, ImageUser *iuser)
ImBuf * BKE_image_pool_acquire_ibuf(Image *ima, ImageUser *iuser, ImagePool *pool)
static void image_add_view(Image *ima, const char *viewname, const char *filepath)
bool BKE_image_has_ibuf(Image *ima, ImageUser *iuser)
bool BKE_image_has_packedfile(const Image *ima)
static ImBuf * load_image_single(Image *ima, ImageUser *iuser, int cfra, const int view_id, const bool has_packed, const bool is_sequence, bool *r_cache_ibuf)
void BKE_image_multiview_index(const Image *ima, ImageUser *iuser)
bool BKE_image_has_loaded_ibuf(Image *image)
static void image_runtime_reset_on_copy(struct Image *image)
int BKE_image_find_nearest_tile(const struct Image *image, const float co[2])
bool BKE_image_tile_filepath_exists(const char *filepath)
static ImBuf * load_movie_single(Image *ima, ImageUser *iuser, int frame, const int view_id)
void BKE_image_print_memlist(Main *bmain)
bool BKE_image_is_dirty_writable(Image *image, bool *r_is_writable)
static void image_init(Image *ima, short source, short type)
Image * BKE_image_ensure_viewer(Main *bmain, int type, const char *name)
bool BKE_image_buffer_format_writable(ImBuf *ibuf)
_W64 unsigned int uintptr_t
struct ListBase bg_images
unsigned int id_session_uuid
struct IDProperty * metadata
struct ImBuf * mipmap[IMB_MIPMAP_LEVELS]
struct ColorSpace * rect_colorspace
ImbFormatOptions foptions
unsigned char * encodedbuffer
char name[IMB_FILENAME_SIZE]
struct ColorSpace * float_colorspace
struct PackedFile * packedfile
struct ImagePackedFile * next
struct ImagePoolItem * prev
struct ImagePoolItem * next
BLI_mempool * memory_pool
struct PartialUpdateUser * partial_update_user
Partial update user for GPUTextures stored inside the Image.
struct PartialUpdateRegister * partial_update_register
Register containing partial updates.
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct RenderLayer * next
struct StampData * stamp_data
struct RenderResult * render
struct SceneRenderView * next
struct bNodeTree * nodetree
ColorManagedDisplaySettings display_settings
struct bNodeTree * nodetree
struct StampDataCustomField * prev
struct StampDataCustomField * next
char memory[STAMP_NAME_SIZE]
char strip[STAMP_NAME_SIZE]
char rendertime[STAMP_NAME_SIZE]
char camera[STAMP_NAME_SIZE]
char cameralens[STAMP_NAME_SIZE]
char scene[STAMP_NAME_SIZE]
struct bNodeTree * nodetree
struct bNodeTree * nodetree
long int PIL_check_seconds_timer_i(void)
const Sequence * SEQ_get_topmost_sequence(const Scene *scene, int frame)