|
Blender
V2.59
|
00001 /* 00002 * $Id: renderdatabase.h 35233 2011-02-27 19:31:27Z jesterking $ 00003 * 00004 * ***** BEGIN GPL LICENSE BLOCK ***** 00005 * 00006 * This program is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License 00008 * as published by the Free Software Foundation; either version 2 00009 * of the License, or (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software Foundation, 00018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00019 * 00020 * The Original Code is Copyright (C) 2006 Blender Foundation. 00021 * All rights reserved. 00022 * 00023 * The Original Code is: all of this file. 00024 * 00025 * Contributor(s): none yet. 00026 * 00027 * ***** END GPL LICENSE BLOCK ***** 00028 */ 00029 00035 #ifndef RENDERDATABASE_H 00036 #define RENDERDATABASE_H 00037 00038 struct Object; 00039 struct VlakRen; 00040 struct VertRen; 00041 struct HaloRen; 00042 struct Main; 00043 struct Material; 00044 struct Render; 00045 struct MCol; 00046 struct MTFace; 00047 struct CustomData; 00048 struct StrandBuffer; 00049 struct StrandRen; 00050 struct ObjectInstanceRen; 00051 struct RadFace; 00052 00053 #define RE_QUAD_MASK 0x7FFFFFF 00054 #define RE_QUAD_OFFS 0x8000000 00055 00056 /* render allocates totvert/256 of these nodes, for lookup and quick alloc */ 00057 typedef struct VertTableNode { 00058 struct VertRen *vert; 00059 float *rad; 00060 float *sticky; 00061 float *strand; 00062 float *tangent; 00063 float *stress; 00064 float *winspeed; 00065 } VertTableNode; 00066 00067 typedef struct VlakTableNode { 00068 struct VlakRen *vlak; 00069 struct MTFace *mtface; 00070 struct MCol *mcol; 00071 int totmtface, totmcol; 00072 float *surfnor; 00073 float *tangent; 00074 struct RadFace **radface; 00075 } VlakTableNode; 00076 00077 typedef struct StrandTableNode { 00078 struct StrandRen *strand; 00079 float *winspeed; 00080 float *surfnor; 00081 float *simplify; 00082 int *face; 00083 struct MCol *mcol; 00084 float *uv; 00085 int totuv, totmcol; 00086 } StrandTableNode; 00087 00088 /* renderdatabase.c */ 00089 void free_renderdata_tables(struct Render *re); 00090 void free_renderdata_vertnodes(struct VertTableNode *vertnodes); 00091 void free_renderdata_vlaknodes(struct VlakTableNode *vlaknodes); 00092 00093 void set_normalflags(struct Render *re, struct ObjectRen *obr); 00094 void project_renderdata(struct Render *re, void (*projectfunc)(float *, float mat[][4], float *), int do_pano, float xoffs, int do_buckets); 00095 int clip_render_object(float boundbox[][3], float *bounds, float mat[][4]); 00096 00097 /* functions are not exported... so wrong names */ 00098 00099 struct VlakRen *RE_findOrAddVlak(struct ObjectRen *obr, int nr); 00100 struct VertRen *RE_findOrAddVert(struct ObjectRen *obr, int nr); 00101 struct StrandRen *RE_findOrAddStrand(struct ObjectRen *obr, int nr); 00102 struct HaloRen *RE_findOrAddHalo(struct ObjectRen *obr, int nr); 00103 struct HaloRen *RE_inithalo(struct Render *re, struct ObjectRen *obr, struct Material *ma, float *vec, float *vec1, float *orco, float hasize, float vectsize, int seed); 00104 struct HaloRen *RE_inithalo_particle(struct Render *re, struct ObjectRen *obr, struct DerivedMesh *dm, struct Material *ma, float *vec, float *vec1, float *orco, float *uvco, float hasize, float vectsize, int seed, float *pa_co); 00105 struct StrandBuffer *RE_addStrandBuffer(struct ObjectRen *obr, int totvert); 00106 00107 struct ObjectRen *RE_addRenderObject(struct Render *re, struct Object *ob, struct Object *par, int index, int psysindex, int lay); 00108 struct ObjectInstanceRen *RE_addRenderInstance(struct Render *re, struct ObjectRen *obr, struct Object *ob, struct Object *par, int index, int psysindex, float mat[][4], int lay); 00109 void RE_makeRenderInstances(struct Render *re); 00110 void RE_instanceTransformNormal(struct ObjectInstanceRen *obi, float *nor, float *tnor); 00111 00112 float *RE_vertren_get_sticky(struct ObjectRen *obr, struct VertRen *ver, int verify); 00113 float *RE_vertren_get_stress(struct ObjectRen *obr, struct VertRen *ver, int verify); 00114 float *RE_vertren_get_rad(struct ObjectRen *obr, struct VertRen *ver, int verify); 00115 float *RE_vertren_get_strand(struct ObjectRen *obr, struct VertRen *ver, int verify); 00116 float *RE_vertren_get_tangent(struct ObjectRen *obr, struct VertRen *ver, int verify); 00117 float *RE_vertren_get_winspeed(struct ObjectInstanceRen *obi, struct VertRen *ver, int verify); 00118 00119 struct MTFace *RE_vlakren_get_tface(struct ObjectRen *obr, VlakRen *ren, int n, char **name, int verify); 00120 struct MCol *RE_vlakren_get_mcol(struct ObjectRen *obr, VlakRen *ren, int n, char **name, int verify); 00121 float *RE_vlakren_get_surfnor(struct ObjectRen *obr, VlakRen *ren, int verify); 00122 float *RE_vlakren_get_nmap_tangent(struct ObjectRen *obr, VlakRen *ren, int verify); 00123 RadFace **RE_vlakren_get_radface(struct ObjectRen *obr, VlakRen *ren, int verify); 00124 void RE_vlakren_get_normal(struct Render *re, struct ObjectInstanceRen *obi, struct VlakRen *vlr, float *nor); 00125 00126 float *RE_strandren_get_surfnor(struct ObjectRen *obr, struct StrandRen *strand, int verify); 00127 float *RE_strandren_get_uv(struct ObjectRen *obr, struct StrandRen *strand, int n, char **name, int verify); 00128 struct MCol *RE_strandren_get_mcol(struct ObjectRen *obr, struct StrandRen *strand, int n, char **name, int verify); 00129 float *RE_strandren_get_simplify(struct ObjectRen *obr, struct StrandRen *strand, int verify); 00130 int *RE_strandren_get_face(struct ObjectRen *obr, struct StrandRen *strand, int verify); 00131 float *RE_strandren_get_winspeed(struct ObjectInstanceRen *obi, struct StrandRen *strand, int verify); 00132 00133 struct VertRen *RE_vertren_copy(struct ObjectRen *obr, struct VertRen *ver); 00134 struct VlakRen *RE_vlakren_copy(struct ObjectRen *obr, struct VlakRen *vlr); 00135 00136 void RE_set_customdata_names(struct ObjectRen *obr, struct CustomData *data); 00137 00138 /* haloren->type: flags */ 00139 #define HA_ONLYSKY 1 00140 #define HA_VECT 2 00141 #define HA_XALPHA 4 00142 #define HA_FLARECIRC 8 00143 00144 /* convertblender.c */ 00145 void init_render_world(Render *re); 00146 void RE_Database_FromScene_Vectors(Render *re, struct Main *bmain, struct Scene *sce, unsigned int lay); 00147 00148 00149 #endif /* RENDERDATABASE_H */ 00150