Fix build error when WITH_OPENEXR=OFF, after recent refactor

This commit is contained in:
Brecht Van Lommel 2022-03-22 00:59:36 +01:00
parent fab14f7854
commit 9cf40eee4b
5 changed files with 47 additions and 43 deletions

View File

@ -510,7 +510,7 @@ bool BKE_image_render_write_exr(ReportList *reports,
const char *chan_id = "RGBA";
if (multi_layer) {
IMB_exr_channel_name(passname, nullptr, "Combined", nullptr, chan_id, a);
RE_render_result_full_channel_name(passname, nullptr, "Combined", nullptr, chan_id, a);
BLI_strncpy(layname, "Composite", sizeof(layname));
}
else {
@ -568,7 +568,7 @@ bool BKE_image_render_write_exr(ReportList *reports,
char layname[EXR_PASS_MAXNAME];
if (multi_layer) {
IMB_exr_channel_name(passname, nullptr, rp->name, nullptr, rp->chan_id, a);
RE_render_result_full_channel_name(passname, nullptr, rp->name, nullptr, rp->chan_id, a);
BLI_strncpy(layname, rl->name, sizeof(layname));
}
else {

View File

@ -1492,35 +1492,6 @@ static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *pa
return 1;
}
void IMB_exr_channel_name(char *fullname,
const char *layname,
const char *passname,
const char *viewname,
const char *chan_id,
const int channel)
{
const char *strings[4];
int strings_len = 0;
if (layname && layname[0]) {
strings[strings_len++] = layname;
}
if (passname && passname[0]) {
strings[strings_len++] = passname;
}
if (viewname && viewname[0]) {
strings[strings_len++] = viewname;
}
char token[2];
if (channel >= 0) {
ARRAY_SET_ITEMS(token, chan_id[channel], '\0');
strings[strings_len++] = token;
}
BLI_string_join_array_by_sep_char(fullname, EXR_PASS_MAXNAME, '.', strings, strings_len);
}
static ExrLayer *imb_exr_get_layer(ListBase *lb, char *layname)
{
ExrLayer *lay = (ExrLayer *)BLI_findstring(lb, layname, offsetof(ExrLayer, name));

View File

@ -105,13 +105,6 @@ void IMB_exr_add_view(void *handle, const char *name);
bool IMB_exr_has_multilayer(void *handle);
void IMB_exr_channel_name(char *fullname,
const char *layname,
const char *passname,
const char *viewname,
const char *chan_id,
const int channel);
#ifdef __cplusplus
} /* extern "C" */
#endif

View File

@ -242,6 +242,13 @@ void RE_AcquiredResultGet32(struct Render *re,
unsigned int *rect,
int view_id);
void RE_render_result_full_channel_name(char *fullname,
const char *layname,
const char *passname,
const char *viewname,
const char *chan_id,
const int channel);
struct ImBuf *RE_render_result_rect_to_ibuf(struct RenderResult *rr,
const struct ImageFormatData *imf,
const float dither,

View File

@ -208,13 +208,14 @@ RenderPass *render_layer_add_pass(RenderResult *rr,
BLI_strncpy(rpass->name, name, sizeof(rpass->name));
BLI_strncpy(rpass->chan_id, chan_id, sizeof(rpass->chan_id));
BLI_strncpy(rpass->view, viewname, sizeof(rpass->view));
IMB_exr_channel_name(rpass->fullname, NULL, rpass->name, rpass->view, rpass->chan_id, -1);
RE_render_result_full_channel_name(
rpass->fullname, NULL, rpass->name, rpass->view, rpass->chan_id, -1);
if (rl->exrhandle) {
int a;
for (a = 0; a < channels; a++) {
char passname[EXR_PASS_MAXNAME];
IMB_exr_channel_name(passname, NULL, rpass->name, NULL, rpass->chan_id, a);
RE_render_result_full_channel_name(passname, NULL, rpass->name, NULL, rpass->chan_id, a);
IMB_exr_add_channel(rl->exrhandle, rl->name, passname, viewname, 0, 0, NULL, false);
}
}
@ -508,6 +509,36 @@ void RE_create_render_pass(RenderResult *rr,
}
}
void RE_render_result_full_channel_name(char *fullname,
const char *layname,
const char *passname,
const char *viewname,
const char *chan_id,
const int channel)
{
/* OpenEXR compatible full channel name. */
const char *strings[4];
int strings_len = 0;
if (layname && layname[0]) {
strings[strings_len++] = layname;
}
if (passname && passname[0]) {
strings[strings_len++] = passname;
}
if (viewname && viewname[0]) {
strings[strings_len++] = viewname;
}
char token[2];
if (channel >= 0) {
ARRAY_SET_ITEMS(token, chan_id[channel], '\0');
strings[strings_len++] = token;
}
BLI_string_join_array_by_sep_char(fullname, EXR_PASS_MAXNAME, '.', strings, strings_len);
}
static int passtype_from_name(const char *name)
{
const char delim[] = {'.', '\0'};
@ -584,7 +615,7 @@ static void ml_addpass_cb(void *base,
rpass->rect = rect;
BLI_strncpy(rpass->name, name, EXR_PASS_MAXNAME);
BLI_strncpy(rpass->view, view, sizeof(rpass->view));
IMB_exr_channel_name(rpass->fullname, NULL, name, view, rpass->chan_id, -1);
RE_render_result_full_channel_name(rpass->fullname, NULL, name, view, rpass->chan_id, -1);
if (view[0] != '\0') {
rpass->view_id = BLI_findstringindex(&rr->views, view, offsetof(RenderView, name));
@ -899,12 +930,14 @@ int render_result_exr_file_read_path(RenderResult *rr,
char fullname[EXR_PASS_MAXNAME];
for (a = 0; a < xstride; a++) {
IMB_exr_channel_name(fullname, NULL, rpass->name, rpass->view, rpass->chan_id, a);
RE_render_result_full_channel_name(
fullname, NULL, rpass->name, rpass->view, rpass->chan_id, a);
IMB_exr_set_channel(
exrhandle, rl->name, fullname, xstride, xstride * rectx, rpass->rect + a);
}
IMB_exr_channel_name(rpass->fullname, NULL, rpass->name, rpass->view, rpass->chan_id, -1);
RE_render_result_full_channel_name(
rpass->fullname, NULL, rpass->name, rpass->view, rpass->chan_id, -1);
}
}