diff options
Diffstat (limited to 'source/blender/render/extern/include/render_types.h')
-rw-r--r-- | source/blender/render/extern/include/render_types.h | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/source/blender/render/extern/include/render_types.h b/source/blender/render/extern/include/render_types.h new file mode 100644 index 00000000000..6ed2eafba21 --- /dev/null +++ b/source/blender/render/extern/include/render_types.h @@ -0,0 +1,256 @@ +/** + * $Id$ + * + * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * + * 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. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** + */ + +#ifndef RENDER_TYPES_H +#define RENDER_TYPES_H "$Id$" + +#include "DNA_scene_types.h" +#include "DNA_world_types.h" +/* ------------------------------------------------------------------------- */ + +/* Definitely weird: this equals 1<<21... so wtf?*/ +#define MAXVERT (2<<20) +#define MAXVLAK (2<<20) + + +/* This is needed to not let VC choke on near and far... old + * proprietary MS extensions... */ +#ifdef WIN32 +#undef near +#undef far +#define near clipsta +#define far clipend +#endif + +/* ------------------------------------------------------------------------- */ + +typedef struct RE_Render +{ + float co[3]; + float lo[3], gl[3], uv[3], ref[3], orn[3], winco[3], sticky[3], vcol[3]; + float itot, i, ic, rgb, norm; + float vn[3], view[3], *vno, refcol[4]; + + float grvec[3], inprz, inprh; + float imat[3][3]; + + float viewmat[4][4], viewinv[4][4]; + float persmat[4][4], persinv[4][4]; + float winmat[4][4]; + + short flag, osatex, osa, rt; + /** + * Screen sizes and positions, in pixels + */ + short xstart, xend, ystart, yend, afmx, afmy; + short rectx; /* Picture width - 1, normally xend - xstart. */ + short recty; /* picture height - 1, normally yend - ystart. */ + + /** + * Distances and sizes in world coordinates nearvar, farvar were + * near and far, but VC in cpp mode chokes on it :( */ + float near; /* near clip distance */ + float far; /* far clip distance */ + float ycor, zcor, pixsize, viewfac; + + + /* These three need to be 'handlerized'. Not an easy task... */ +/* RE_RenderDataHandle r; */ + RenderData r; + World wrld; + ListBase parts; + + int totvlak, totvert, tothalo, totlamp; + + /* internal: these two are a sort of cache for the render pipe */ + struct VlakRen *vlr; + int vlaknr; + + /* external */ + struct Material *mat, *matren; + /* internal, fortunately */ + struct LampRen **la; + struct VlakRen **blovl; + struct VertRen **blove; + struct HaloRen **bloha; + + unsigned int *rectaccu; + unsigned int *rectz; /* z buffer: distance buffer */ + unsigned int *rectf1, *rectf2; + unsigned int *rectot; /* z buffer: face index buffer, recycled as colour buffer! */ + unsigned int *rectspare; /* */ + /* for 8 byte systems! */ + long *rectdaps; + + short win, winpos, winx, winy, winxof, winyof; + short winpop, displaymode, sparex, sparey; + + /* Not sure what these do... But they're pointers, so good for handlerization */ + struct Image *backbuf, *frontbuf; + /* backbuf is an image that drawn as background */ + +} RE_Render; + +/* ------------------------------------------------------------------------- */ + +/** + * Part as in part-rendering. An image rendered in parts is rendered + * to a list of parts, with x,y size, and a pointer to the render + * output stored per part. Internal! + */ +typedef struct Part +{ + struct Part *next, *prev; + unsigned int *rect; + short x, y; +} Part; + +typedef struct ShadBuf { + short samp, shadhalostep; + float persmat[4][4]; + float viewmat[4][4]; + float winmat[4][4]; + float *jit; + float d,far,pixsize,soft; + int co[3]; + int size,bias; + unsigned long *zbuf; + char *cbuf; +} ShadBuf; + +/* ------------------------------------------------------------------------- */ + +typedef struct VertRen +{ + float co[3]; + float n[3]; + float ho[4]; + float *orco; + float *sticky; + void *svert; /* smooth vert, only used during initrender */ + short clip, texofs; /* texofs= flag */ +} VertRen; + +/* ------------------------------------------------------------------------- */ + +struct halosort { + struct HaloRen *har; + unsigned int z; +}; + +/* ------------------------------------------------------------------------- */ +struct Material; +struct MFace; +struct TFace; + +typedef struct VlakRen +{ + struct VertRen *v1, *v2, *v3, *v4; + float n[3], len; + struct Material *mat; + struct MFace *mface; + struct TFace *tface; + unsigned int *vcol; + char snproj, puno; + char flag, ec; + unsigned int lay; +} VlakRen; + + +typedef struct HaloRen +{ + float alfa, xs, ys, rad, radsq, sin, cos, co[3], no[3]; + unsigned int zs, zd; + unsigned int zBufDist;/* depth in the z-buffer coordinate system */ + short miny, maxy; + short hard, b, g, r; + char starpoints, add, type, tex; + char linec, ringc, seed; + short flarec; /* used to be a char. why ?*/ + float hasize; + int pixels; + unsigned int lay; + struct Material *mat; +} HaloRen; + +struct LampRen; +struct MTex; + +/** + * For each lamp in a scene, a LampRen is created. It determines the + * properties of a lightsource. + */ +typedef struct LampRen +{ + float xs, ys, dist; + float co[3]; + short type, mode; + float r, g, b; + float energy, haint; + int lay; + float spotsi,spotbl; + float vec[3]; + float xsp, ysp, distkw, inpr; + float halokw, halo; + float ld1,ld2; + + /* copied from Lamp, to decouple more rendering stuff */ + /** Size of the shadowbuffer */ + short bufsize; + /** Number of samples for the shadows */ + short samp; + /** Softness factor for shadow */ + float soft; + /** shadow plus halo: detail level */ + short shadhalostep; + /** Near clip of the lamp */ + float clipsta; + /** Far clip of the lamp */ + float clipend; + /** A small depth offset to prevent self-shadowing. */ + float bias; + + /** If the lamp casts shadows, one of these is filled. For the old + * renderer, shb is used, for the new pipeline the shadowBufOb, + * which should be a shadowbuffer handle. */ + struct ShadBuf *shb; + void* shadowBufOb; + + float imat[3][3]; + float spottexfac; + float sh_invcampos[3], sh_zfac; /* sh_= spothalo */ + + struct LampRen *org; + struct MTex *mtex[8]; +} LampRen; + +#endif /* RENDER_TYPES_H */ |