Blender  V2.59
renderdatabase.h
Go to the documentation of this file.
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