315 lines
7.8 KiB
C
315 lines
7.8 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
/** \file
|
|
* \ingroup DNA
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "DNA_ID.h"
|
|
#include "DNA_color_types.h" /* for color management */
|
|
#include "DNA_defs.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct GPUTexture;
|
|
struct MovieCache;
|
|
struct PackedFile;
|
|
struct RenderResult;
|
|
struct Scene;
|
|
struct anim;
|
|
|
|
/* ImageUser is in Texture, in Nodes, Background Image, Image Window, .... */
|
|
/* should be used in conjunction with an ID * to Image. */
|
|
typedef struct ImageUser {
|
|
/** To retrieve render result. */
|
|
struct Scene *scene;
|
|
|
|
/** Movies, sequences: current to display. */
|
|
int framenr;
|
|
/** Total amount of frames to use. */
|
|
int frames;
|
|
/** Offset within movie, start frame in global time. */
|
|
int offset, sfra;
|
|
/** Cyclic flag. */
|
|
char cycl;
|
|
|
|
/** Multiview current eye - for internal use of drawing routines. */
|
|
char multiview_eye;
|
|
short pass;
|
|
|
|
int tile;
|
|
|
|
/** Listbase indices, for menu browsing or retrieve buffer. */
|
|
short multi_index, view, layer;
|
|
short flag;
|
|
} ImageUser;
|
|
|
|
typedef struct ImageAnim {
|
|
struct ImageAnim *next, *prev;
|
|
struct anim *anim;
|
|
} ImageAnim;
|
|
|
|
typedef struct ImageView {
|
|
struct ImageView *next, *prev;
|
|
/** MAX_NAME. */
|
|
char name[64];
|
|
/** 1024 = FILE_MAX. */
|
|
char filepath[1024];
|
|
} ImageView;
|
|
|
|
typedef struct ImagePackedFile {
|
|
struct ImagePackedFile *next, *prev;
|
|
struct PackedFile *packedfile;
|
|
/** 1024 = FILE_MAX. */
|
|
char filepath[1024];
|
|
} ImagePackedFile;
|
|
|
|
typedef struct RenderSlot {
|
|
struct RenderSlot *next, *prev;
|
|
/** 64 = MAX_NAME. */
|
|
char name[64];
|
|
struct RenderResult *render;
|
|
} RenderSlot;
|
|
|
|
typedef struct ImageTile_RuntimeTextureSlot {
|
|
int tilearray_layer;
|
|
int _pad;
|
|
int tilearray_offset[2];
|
|
int tilearray_size[2];
|
|
} ImageTile_RuntimeTextureSlot;
|
|
|
|
typedef struct ImageTile_Runtime {
|
|
/* Data per `eImageTextureResolution`.
|
|
* Should match `IMA_TEXTURE_RESOLUTION_LEN` */
|
|
ImageTile_RuntimeTextureSlot slots[2];
|
|
} ImageTile_Runtime;
|
|
|
|
typedef struct ImageTile {
|
|
struct ImageTile *next, *prev;
|
|
|
|
struct ImageTile_Runtime runtime;
|
|
|
|
char _pad[4];
|
|
int tile_number;
|
|
char label[64];
|
|
} ImageTile;
|
|
|
|
/* iuser->flag */
|
|
#define IMA_ANIM_ALWAYS (1 << 0)
|
|
/* #define IMA_UNUSED_1 (1 << 1) */
|
|
/* #define IMA_UNUSED_2 (1 << 2) */
|
|
#define IMA_NEED_FRAME_RECALC (1 << 3)
|
|
#define IMA_SHOW_STEREO (1 << 4)
|
|
/* Do not limit the resolution by the limit texture size option in the user preferences.
|
|
* Images in the image editor or used as a backdrop are always shown using the maximum
|
|
* possible resolution. */
|
|
#define IMA_SHOW_MAX_RESOLUTION (1 << 5)
|
|
|
|
/* Used to get the correct gpu texture from an Image datablock. */
|
|
typedef enum eGPUTextureTarget {
|
|
TEXTARGET_2D = 0,
|
|
TEXTARGET_2D_ARRAY,
|
|
TEXTARGET_TILE_MAPPING,
|
|
TEXTARGET_COUNT,
|
|
} eGPUTextureTarget;
|
|
|
|
/* Resolution variations that can be cached for an image. */
|
|
typedef enum eImageTextureResolution {
|
|
IMA_TEXTURE_RESOLUTION_FULL = 0,
|
|
IMA_TEXTURE_RESOLUTION_LIMITED,
|
|
|
|
/* Not an option, but holds the number of options defined for this struct. */
|
|
IMA_TEXTURE_RESOLUTION_LEN
|
|
} eImageTextureResolution;
|
|
|
|
/* Defined in BKE_image.h. */
|
|
struct PartialUpdateRegister;
|
|
struct PartialUpdateUser;
|
|
|
|
typedef struct Image_Runtime {
|
|
/* Mutex used to guarantee thread-safe access to the cached ImBuf of the corresponding image ID.
|
|
*/
|
|
void *cache_mutex;
|
|
|
|
/** \brief Register containing partial updates. */
|
|
struct PartialUpdateRegister *partial_update_register;
|
|
/** \brief Partial update user for GPUTextures stored inside the Image. */
|
|
struct PartialUpdateUser *partial_update_user;
|
|
|
|
} Image_Runtime;
|
|
|
|
typedef struct Image {
|
|
ID id;
|
|
|
|
/** File path, 1024 = FILE_MAX. */
|
|
char filepath[1024];
|
|
|
|
/** Not written in file. */
|
|
struct MovieCache *cache;
|
|
/** Not written in file 3 = TEXTARGET_COUNT, 2 = stereo eyes, 2 = IMA_TEXTURE_RESOLUTION_LEN. */
|
|
struct GPUTexture *gputexture[3][2][2];
|
|
|
|
/* sources from: */
|
|
ListBase anims;
|
|
struct RenderResult *rr;
|
|
|
|
ListBase renderslots;
|
|
short render_slot, last_render_slot;
|
|
|
|
int flag;
|
|
short source, type;
|
|
int lastframe;
|
|
|
|
/* GPU texture flag. */
|
|
int gpuframenr;
|
|
short gpuflag;
|
|
short gpu_pass;
|
|
short gpu_layer;
|
|
short gpu_view;
|
|
char _pad2[4];
|
|
|
|
/** Deprecated. */
|
|
struct PackedFile *packedfile DNA_DEPRECATED;
|
|
struct ListBase packedfiles;
|
|
struct PreviewImage *preview;
|
|
|
|
int lastused;
|
|
|
|
/* for generated images */
|
|
int gen_x, gen_y;
|
|
char gen_type, gen_flag;
|
|
short gen_depth;
|
|
float gen_color[4];
|
|
|
|
/* display aspect - for UV editing images resized for faster openGL display */
|
|
float aspx, aspy;
|
|
|
|
/* color management */
|
|
ColorManagedColorspaceSettings colorspace_settings;
|
|
char alpha_mode;
|
|
|
|
char _pad;
|
|
|
|
/* Multiview */
|
|
/** For viewer node stereoscopy. */
|
|
char eye;
|
|
char views_format;
|
|
|
|
/* ImageTile list for UDIMs. */
|
|
int active_tile_index;
|
|
ListBase tiles;
|
|
|
|
/** ImageView. */
|
|
ListBase views;
|
|
struct Stereo3dFormat *stereo3d_format;
|
|
|
|
Image_Runtime runtime;
|
|
} Image;
|
|
|
|
/* **************** IMAGE ********************* */
|
|
|
|
/* Image.flag */
|
|
enum {
|
|
IMA_HIGH_BITDEPTH = (1 << 0),
|
|
IMA_FLAG_UNUSED_1 = (1 << 1), /* cleared */
|
|
#ifdef DNA_DEPRECATED_ALLOW
|
|
IMA_DO_PREMUL = (1 << 2),
|
|
#endif
|
|
IMA_FLAG_UNUSED_4 = (1 << 4), /* cleared */
|
|
IMA_NOCOLLECT = (1 << 5),
|
|
IMA_FLAG_UNUSED_6 = (1 << 6), /* cleared */
|
|
IMA_OLD_PREMUL = (1 << 7),
|
|
IMA_FLAG_UNUSED_8 = (1 << 8), /* cleared */
|
|
IMA_USED_FOR_RENDER = (1 << 9),
|
|
/** For image user, but these flags are mixed. */
|
|
IMA_USER_FRAME_IN_RANGE = (1 << 10),
|
|
IMA_VIEW_AS_RENDER = (1 << 11),
|
|
IMA_FLAG_UNUSED_12 = (1 << 12), /* cleared */
|
|
IMA_DEINTERLACE = (1 << 13),
|
|
IMA_USE_VIEWS = (1 << 14),
|
|
IMA_FLAG_UNUSED_15 = (1 << 15), /* cleared */
|
|
IMA_FLAG_UNUSED_16 = (1 << 16), /* cleared */
|
|
};
|
|
|
|
/* Image.gpuflag */
|
|
enum {
|
|
/** GPU texture needs to be refreshed. */
|
|
IMA_GPU_REFRESH = (1 << 0),
|
|
/** All mipmap levels in OpenGL texture set? */
|
|
IMA_GPU_MIPMAP_COMPLETE = (1 << 1),
|
|
/* Reuse the max resolution textures as they fit in the limited scale. */
|
|
IMA_GPU_REUSE_MAX_RESOLUTION = (1 << 2),
|
|
/* Has any limited scale textures been allocated.
|
|
* Adds additional checks to reuse max resolution images when they fit inside limited scale. */
|
|
IMA_GPU_HAS_LIMITED_SCALE_TEXTURES = (1 << 3),
|
|
};
|
|
|
|
/* Image.source, where the image comes from */
|
|
typedef enum eImageSource {
|
|
/* IMA_SRC_CHECK = 0, */ /* UNUSED */
|
|
IMA_SRC_FILE = 1,
|
|
IMA_SRC_SEQUENCE = 2,
|
|
IMA_SRC_MOVIE = 3,
|
|
IMA_SRC_GENERATED = 4,
|
|
IMA_SRC_VIEWER = 5,
|
|
IMA_SRC_TILED = 6,
|
|
} eImageSource;
|
|
|
|
/* Image.type, how to handle or generate the image */
|
|
typedef enum eImageType {
|
|
IMA_TYPE_IMAGE = 0,
|
|
IMA_TYPE_MULTILAYER = 1,
|
|
/* generated */
|
|
IMA_TYPE_UV_TEST = 2,
|
|
/* viewers */
|
|
IMA_TYPE_R_RESULT = 4,
|
|
IMA_TYPE_COMPOSITE = 5,
|
|
} eImageType;
|
|
|
|
/* Image.gen_type */
|
|
enum {
|
|
IMA_GENTYPE_BLANK = 0,
|
|
IMA_GENTYPE_GRID = 1,
|
|
IMA_GENTYPE_GRID_COLOR = 2,
|
|
};
|
|
|
|
/* render */
|
|
#define IMA_MAX_RENDER_TEXT (1 << 9)
|
|
|
|
/* Image.gen_flag */
|
|
enum {
|
|
IMA_GEN_FLOAT = 1,
|
|
};
|
|
|
|
/* Image.alpha_mode */
|
|
enum {
|
|
IMA_ALPHA_STRAIGHT = 0,
|
|
IMA_ALPHA_PREMUL = 1,
|
|
IMA_ALPHA_CHANNEL_PACKED = 2,
|
|
IMA_ALPHA_IGNORE = 3,
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|