Revert "GPU: Create and use new GPU_texture_read_rect utility."
[blender.git] / source / blender / makesdna / DNA_genfile.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  * \brief blenloader genfile private function prototypes
23  */
24
25 #ifndef __DNA_GENFILE_H__
26 #define __DNA_GENFILE_H__
27
28 #include "intern/dna_utils.h"
29
30 struct SDNA;
31
32 /**
33  * DNAstr contains the prebuilt SDNA structure defining the layouts of the types
34  * used by this version of Blender. It is defined in a file dna.c, which is
35  * generated by the makesdna program during the build process (see makesdna.c).
36  */
37 extern const unsigned char DNAstr[];
38 /** Length of DNAstr. */
39 extern const int DNAlen;
40
41 /**
42  * Primitive (non-struct, non-pointer/function/array) types,
43  * \warning Don't change these values!
44  * Currently changes here here will work on native endianness,
45  * however #DNA_struct_switch_endian currently checks these
46  * hard-coded values against those from old files.
47  */
48 typedef enum eSDNA_Type {
49   SDNA_TYPE_CHAR = 0,
50   SDNA_TYPE_UCHAR = 1,
51   SDNA_TYPE_SHORT = 2,
52   SDNA_TYPE_USHORT = 3,
53   SDNA_TYPE_INT = 4,
54   /* SDNA_TYPE_LONG     = 5, */ /* deprecated (use as int) */
55   /* SDNA_TYPE_ULONG    = 6, */ /* deprecated (use as int) */
56   SDNA_TYPE_FLOAT = 7,
57   SDNA_TYPE_DOUBLE = 8,
58 /* ,SDNA_TYPE_VOID = 9 */
59 /* define so switch statements don't complain */
60 #define SDNA_TYPE_VOID 9
61   SDNA_TYPE_INT64 = 10,
62   SDNA_TYPE_UINT64 = 11,
63 } eSDNA_Type;
64
65 /**
66  * For use with #DNA_struct_reconstruct & #DNA_struct_get_compareflags
67  */
68 enum eSDNA_StructCompare {
69   /* Struct has disappeared
70    * (values of this struct type will not be loaded by the current Blender) */
71   SDNA_CMP_REMOVED = 0,
72   /* Struct is the same
73    * (can be loaded with straight memory copy after any necessary endian conversion) */
74   SDNA_CMP_EQUAL = 1,
75   /* Struct is different in some way
76    * (needs to be copied/converted field by field) */
77   SDNA_CMP_NOT_EQUAL = 2,
78 };
79
80 struct SDNA *DNA_sdna_from_data(const void *data,
81                                 const int data_len,
82                                 bool do_endian_swap,
83                                 bool data_alloc,
84                                 const char **r_error_message);
85 void DNA_sdna_free(struct SDNA *sdna);
86
87 /* Access for current Blender versions SDNA*/
88 void DNA_sdna_current_init(void);
89 /* borrowed reference */
90 const struct SDNA *DNA_sdna_current_get(void);
91 void DNA_sdna_current_free(void);
92
93 int DNA_struct_find_nr_ex(const struct SDNA *sdna, const char *str, unsigned int *index_last);
94 int DNA_struct_find_nr(const struct SDNA *sdna, const char *str);
95 void DNA_struct_switch_endian(const struct SDNA *oldsdna, int oldSDNAnr, char *data);
96 const char *DNA_struct_get_compareflags(const struct SDNA *sdna, const struct SDNA *newsdna);
97 void *DNA_struct_reconstruct(const struct SDNA *newsdna,
98                              const struct SDNA *oldsdna,
99                              const char *compflags,
100                              int oldSDNAnr,
101                              int blocks,
102                              const void *data);
103
104 int DNA_elem_offset(struct SDNA *sdna, const char *stype, const char *vartype, const char *name);
105
106 bool DNA_struct_find(const struct SDNA *sdna, const char *stype);
107 bool DNA_struct_elem_find(const struct SDNA *sdna,
108                           const char *stype,
109                           const char *vartype,
110                           const char *name);
111
112 int DNA_elem_type_size(const eSDNA_Type elem_nr);
113
114 bool DNA_sdna_patch_struct(struct SDNA *sdna,
115                            const char *struct_name_old,
116                            const char *struct_name_new);
117 bool DNA_sdna_patch_struct_member(struct SDNA *sdna,
118                                   const char *struct_name,
119                                   const char *elem_old,
120                                   const char *elem_new);
121
122 void DNA_sdna_alias_data_ensure(struct SDNA *sdna);
123
124 /* Alias lookups (using runtime struct member names). */
125 int DNA_struct_alias_find_nr_ex(const struct SDNA *sdna,
126                                 const char *str,
127                                 unsigned int *index_last);
128 int DNA_struct_alias_find_nr(const struct SDNA *sdna, const char *str);
129 bool DNA_struct_alias_elem_find(const struct SDNA *sdna,
130                                 const char *stype,
131                                 const char *vartype,
132                                 const char *name);
133 void DNA_sdna_alias_data_ensure_structs_map(struct SDNA *sdna);
134
135 #endif /* __DNA_GENFILE_H__ */