diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-03-22 02:54:42 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-03-22 03:30:19 +0300 |
commit | 8bccc7d8611a7379adc8d981bca18938ab0a5c27 (patch) | |
tree | 2e58f0f4d183ecf67ef2fa38f1b22d939818dfae /source/blender/imbuf/IMB_openexr.h | |
parent | 9cf40eee4bd1859ac0968e3988ed0c252eab446e (diff) |
Cleanup: add proper IMB_openexr.h instead of including file from intern/
Diffstat (limited to 'source/blender/imbuf/IMB_openexr.h')
-rw-r--r-- | source/blender/imbuf/IMB_openexr.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/source/blender/imbuf/IMB_openexr.h b/source/blender/imbuf/IMB_openexr.h new file mode 100644 index 00000000000..a41053b99bf --- /dev/null +++ b/source/blender/imbuf/IMB_openexr.h @@ -0,0 +1,110 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2006 Blender Foundation. All rights reserved. */ + +/** \file + * \ingroup imbuf + */ + +#pragma once + +/* API for reading and writing multilayer EXR files. */ + +/* XXX layer+pass name max 64? */ +/* This api also supports max 8 channels per pass now. easy to fix! */ +#define EXR_LAY_MAXNAME 64 +#define EXR_PASS_MAXNAME 64 +#define EXR_VIEW_MAXNAME 64 +#define EXR_TOT_MAXNAME 64 +#define EXR_PASS_MAXCHAN 24 + +#ifdef __cplusplus +extern "C" { +#endif + +struct StampData; + +void *IMB_exr_get_handle(void); +void *IMB_exr_get_handle_name(const char *name); + +/** + * Adds flattened #ExrChannel's + * `xstride`, `ystride` and `rect` can be done in set_channel too, for tile writing. + * \param passname: Does not include view. + */ +void IMB_exr_add_channel(void *handle, + const char *layname, + const char *passname, + const char *view, + int xstride, + int ystride, + float *rect, + bool use_half_float); + +/** + * Read from file. + */ +bool IMB_exr_begin_read( + void *handle, const char *filename, int *width, int *height, bool parse_channels); +/** + * Used for output files (from #RenderResult) (single and multi-layer, single and multi-view). + */ +bool IMB_exr_begin_write(void *handle, + const char *filename, + int width, + int height, + int compress, + const struct StampData *stamp); +/** + * Only used for writing temp. render results (not image files) + * (FSA and Save Buffers). + */ +void IMB_exrtile_begin_write( + void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley); + +/** + * Still clumsy name handling, layers/channels can be ordered as list in list later. + * + * \param passname: Here is the raw channel name without the layer. + */ +void IMB_exr_set_channel(void *handle, + const char *layname, + const char *passname, + int xstride, + int ystride, + float *rect); +float *IMB_exr_channel_rect(void *handle, + const char *layname, + const char *passname, + const char *view); + +void IMB_exr_read_channels(void *handle); +void IMB_exr_write_channels(void *handle); +/** + * Temporary function, used for FSA and Save Buffers. + * called once per `tile * view`. + */ +void IMB_exrtile_write_channels( + void *handle, int partx, int party, int level, const char *viewname, bool empty); +void IMB_exr_clear_channels(void *handle); + +void IMB_exr_multilayer_convert(void *handle, + void *base, + void *(*addview)(void *base, const char *str), + void *(*addlayer)(void *base, const char *str), + void (*addpass)(void *base, + void *lay, + const char *str, + float *rect, + int totchan, + const char *chan_id, + const char *view)); + +void IMB_exr_close(void *handle); + +void IMB_exr_add_view(void *handle, const char *name); + +bool IMB_exr_has_multilayer(void *handle); + +#ifdef __cplusplus +} /* extern "C" */ +#endif |