Serious-Engine/Sources/LWSkaExporter/SDK/lwrender.h
2016-03-11 15:57:17 +02:00

446 lines
15 KiB
C

/*
* LWSDK Header File
* Copyright 1999, NewTek, Inc.
*
* LWRENDER.H -- LightWave Rendering State
*
* This header contains the basic declarations need to define the
* simplest LightWave plug-in server.
*/
#ifndef LWSDK_RENDER_H
#define LWSDK_RENDER_H
#include <lwtypes.h>
#include <lwhandler.h>
#include <lwenvel.h>
#include <lwmeshes.h>
typedef void * LWItemID;
#define LWITEM_NULL ((LWItemID) 0)
typedef int LWItemType;
#define LWI_OBJECT 0
#define LWI_LIGHT 1
#define LWI_CAMERA 2
#define LWI_BONE 3
typedef int LWItemParam;
#define LWIP_POSITION 1
#define LWIP_RIGHT 2
#define LWIP_UP 3
#define LWIP_FORWARD 4
#define LWIP_ROTATION 5
#define LWIP_SCALING 6
#define LWIP_PIVOT 7
#define LWIP_W_POSITION 8
#define LWIP_W_RIGHT 9
#define LWIP_W_UP 10
#define LWIP_W_FORWARD 11
#define LWIP_PIVOT_ROT 12
typedef double LWRayCastFunc (const LWDVector position,
const LWDVector direction);
typedef double LWRayTraceFunc (const LWDVector position,
const LWDVector direction,
LWDVector color);
typedef double LWRayShadeFunc (const LWDVector position,
const LWDVector direction,
struct st_LWShaderAccess *);
typedef int LWIlluminateFunc (LWItemID light, const LWDVector position,
LWDVector direction, LWDVector color);
#define LWITEM_RADIOSITY ((LWItemID) 0x21000000)
#define LWITEM_CAUSTICS ((LWItemID) 0x22000000)
/*
* Animation item handler extensions.
*/
typedef struct st_LWItemFuncs {
const LWItemID * (*useItems) (LWInstance);
void (*changeID) (LWInstance, const LWItemID *);
} LWItemFuncs;
typedef struct st_LWItemHandler {
LWInstanceFuncs *inst;
LWItemFuncs *item;
} LWItemHandler;
#define LWITEM_ALL ((LWItemID) ~0)
/*
* Render handler extensions.
*/
typedef struct st_LWRenderFuncs {
LWError (*init) (LWInstance, int);
void (*cleanup) (LWInstance);
LWError (*newTime) (LWInstance, LWFrame, LWTime);
} LWRenderFuncs;
#define LWINIT_PREVIEW 0
#define LWINIT_RENDER 1
typedef struct st_LWRenderHandler {
LWInstanceFuncs *inst;
LWItemFuncs *item;
LWRenderFuncs *rend;
} LWRenderHandler;
/*
* Globals.
*/
#define LWITEMINFO_GLOBAL "LW Item Info 3"
typedef struct st_LWItemInfo {
LWItemID (*first) (LWItemType, LWItemID);
LWItemID (*next) (LWItemID);
LWItemID (*firstChild) (LWItemID parent);
LWItemID (*nextChild) (LWItemID parent, LWItemID prevChild);
LWItemID (*parent) (LWItemID);
LWItemID (*target) (LWItemID);
LWItemID (*goal) (LWItemID);
LWItemType (*type) (LWItemID);
const char * (*name) (LWItemID);
void (*param) (LWItemID, LWItemParam, LWTime,
LWDVector);
unsigned int (*limits) (LWItemID, LWItemParam,
LWDVector min, LWDVector max);
const char * (*getTag) (LWItemID, int);
void (*setTag) (LWItemID, int, const char *);
LWChanGroupID (*chanGroup) (LWItemID);
const char * (*server) (LWItemID, const char *, int);
unsigned int (*serverFlags) (LWItemID, const char *, int);
void (*controller) (LWItemID, LWItemParam, int type[3]);
unsigned int (*flags) (LWItemID);
LWTime (*lookAhead) (LWItemID);
double (*goalStrength) (LWItemID);
void (*stiffness) (LWItemID, LWItemParam, LWDVector);
} LWItemInfo;
#define LWVECF_0 (1<<0)
#define LWVECF_1 (1<<1)
#define LWVECF_2 (1<<2)
#define LWSRVF_DISABLED (1<<0)
#define LWSRVF_HIDDEN (1<<1)
#define LWMOTCTL_KEYFRAMES 0
#define LWMOTCTL_TARGETING 1
#define LWMOTCTL_ALIGN_TO_PATH 2
#define LWMOTCTL_IK 3
#define LWITEMF_ACTIVE (1<<0)
#define LWITEMF_UNAFFECT_BY_IK (1<<1)
#define LWITEMF_FULLTIME_IK (1<<2)
#define LWITEMF_GOAL_ORIENT (1<<3)
#define LWITEMF_REACH_GOAL (1<<4)
#define LWOBJECTINFO_GLOBAL "LW Object Info 4"
typedef struct st_LWObjectInfo {
const char * (*filename) (LWItemID);
int (*numPoints) (LWItemID);
int (*numPolygons) (LWItemID);
unsigned int (*shadowOpts) (LWItemID);
double (*dissolve) (LWItemID, LWTime);
LWMeshInfoID (*meshInfo) (LWItemID, int frozen);
unsigned int (*flags) (LWItemID);
double (*fog) (LWItemID, LWTime);
LWTextureID (*dispMap) (LWItemID);
LWTextureID (*clipMap) (LWItemID);
void (*patchLevel) (LWItemID, int *display, int *render);
void (*metaballRes) (LWItemID, double *display, double *render);
LWItemID (*boneSource) (LWItemID);
LWItemID (*morphTarget) (LWItemID);
double (*morphAmount) (LWItemID, LWTime);
unsigned int (*edgeOpts) (LWItemID);
void (*edgeColor) (LWItemID, LWTime, LWDVector color);
int (*subdivOrder) (LWItemID);
double (*polygonSize) (LWItemID, LWTime);
int (*excluded) (LWItemID object, LWItemID light);
} LWObjectInfo;
#define LWOSHAD_SELF (1<<0)
#define LWOSHAD_CAST (1<<1)
#define LWOSHAD_RECEIVE (1<<2)
#define LWOBJF_UNSEEN_BY_CAMERA (1<<0)
#define LWOBJF_UNSEEN_BY_RAYS (1<<1)
#define LWOBJF_UNAFFECT_BY_FOG (1<<2)
#define LWOBJF_MORPH_MTSE (1<<3)
#define LWOBJF_MORPH_SURFACES (1<<4)
#define LWEDGEF_SILHOUETTE (1<<0)
#define LWEDGEF_UNSHARED (1<<1)
#define LWEDGEF_CREASE (1<<2)
#define LWEDGEF_SURFACE (1<<3)
#define LWEDGEF_OTHER (1<<4)
#define LWEDGEF_SHRINK_DIST (1<<8)
#define LWBONEINFO_GLOBAL "LW Bone Info 3"
typedef struct st_LWBoneInfo {
unsigned int (*flags) (LWItemID);
void (*restParam) (LWItemID, LWItemParam, LWDVector);
double (*restLength) (LWItemID);
void (*limits) (LWItemID, double *inner, double *outer);
const char * (*weightMap) (LWItemID);
double (*strength) (LWItemID);
int (*falloff) (LWItemID);
void (*jointComp) (LWItemID, double *self, double *parent);
void (*muscleFlex) (LWItemID, double *self, double *parent);
} LWBoneInfo;
#define LWBONEF_ACTIVE (1<<0)
#define LWBONEF_LIMITED_RANGE (1<<1)
#define LWBONEF_SCALE_STRENGTH (1<<2)
#define LWBONEF_WEIGHT_MAP_ONLY (1<<3)
#define LWBONEF_WEIGHT_NORM (1<<4)
#define LWBONEF_JOINT_COMP (1<<5)
#define LWBONEF_JOINT_COMP_PAR (1<<6)
#define LWBONEF_MUSCLE_FLEX (1<<7)
#define LWBONEF_MUSCLE_FLEX_PAR (1<<8)
#define LWLIGHTINFO_GLOBAL "LW Light Info 3"
typedef struct st_LWLightInfo {
void (*ambient) (LWTime, LWDVector color);
int (*type) (LWItemID);
void (*color) (LWItemID, LWTime, LWDVector color);
int (*shadowType) (LWItemID);
void (*coneAngles) (LWItemID, LWTime, double *radius, double *edge);
unsigned int (*flags) (LWItemID);
double (*range) (LWItemID, LWTime);
int (*falloff) (LWItemID);
LWImageID (*projImage) (LWItemID);
int (*shadMapSize) (LWItemID);
double (*shadMapAngle) (LWItemID, LWTime);
double (*shadMapFuzz) (LWItemID, LWTime);
int (*quality) (LWItemID);
void (*rawColor) (LWItemID, LWTime, LWDVector color);
double (*intensity) (LWItemID, LWTime);
} LWLightInfo;
#define LWLIGHT_DISTANT 0
#define LWLIGHT_POINT 1
#define LWLIGHT_SPOT 2
#define LWLIGHT_LINEAR 3
#define LWLIGHT_AREA 4
#define LWLSHAD_OFF 0
#define LWLSHAD_RAYTRACE 1
#define LWLSHAD_MAP 2
#define LWLFL_LIMITED_RANGE (1<<0)
#define LWLFL_NO_DIFFUSE (1<<1)
#define LWLFL_NO_SPECULAR (1<<2)
#define LWLFL_NO_CAUSTICS (1<<3)
#define LWLFL_LENS_FLARE (1<<4)
#define LWLFL_VOLUMETRIC (1<<5)
#define LWLFL_NO_OPENGL (1<<6)
#define LWLFL_FIT_CONE (1<<7)
#define LWLFL_CACHE_SHAD_MAP (1<<8)
#define LWLFALL_OFF 0
#define LWLFALL_LINEAR 1
#define LWLFALL_INV_DIST 2
#define LWLFALL_INV_DIST_2 3
#define LWCAMERAINFO_GLOBAL "LW Camera Info 2"
typedef struct st_LWCameraInfo {
double (*zoomFactor) (LWItemID, LWTime);
double (*focalLength) (LWItemID, LWTime);
double (*focalDistance) (LWItemID, LWTime);
double (*fStop) (LWItemID, LWTime);
double (*blurLength) (LWItemID, LWTime);
void (*fovAngles) (LWItemID, LWTime, double *horizontal,
double *vertical);
unsigned int (*flags) (LWItemID);
void (*resolution) (LWItemID, int *width, int *height);
double (*pixelAspect) (LWItemID, LWTime);
double (*separation) (LWItemID, LWTime);
void (*regionLimits) (LWItemID, int *x0, int *y0, int *x1, int *y1);
void (*maskLimits) (LWItemID, int *x0, int *y0, int *x1, int *y1);
void (*maskColor) (LWItemID, LWDVector color);
} LWCameraInfo;
#define LWCAMF_STEREO (1<<0)
#define LWCAMF_LIMITED_REGION (1<<1)
#define LWCAMF_MASK (1<<2)
#define LWSCENEINFO_GLOBAL "LW Scene Info 3"
typedef struct st_LWSceneInfo {
const char *name;
const char *filename;
int numPoints;
int numPolygons;
int renderType;
int renderOpts;
LWFrame frameStart;
LWFrame frameEnd;
LWFrame frameStep;
double framesPerSecond;
int frameWidth;
int frameHeight;
double pixelAspect;
int minSamplesPerPixel;
int maxSamplesPerPixel;
int limitedRegion[4]; /* x0, y0, x1, y1 */
int recursionDepth;
LWItemID (*renderCamera) (LWTime);
int numThreads;
} LWSceneInfo;
#define LWRTYPE_WIRE 0
#define LWRTYPE_QUICK 1
#define LWRTYPE_REALISTIC 2
#define LWROPT_SHADOWTRACE (1<<0)
#define LWROPT_REFLECTTRACE (1<<1)
#define LWROPT_REFRACTTRACE (1<<2)
#define LWROPT_FIELDS (1<<3)
#define LWROPT_EVENFIELDS (1<<4)
#define LWROPT_MOTIONBLUR (1<<5)
#define LWROPT_DEPTHOFFIELD (1<<6)
#define LWROPT_LIMITEDREGION (1<<7)
#define LWROPT_PARTICLEBLUR (1<<8)
#define LWTIMEINFO_GLOBAL "LW Time Info"
typedef struct st_LWTimeInfo {
LWTime time;
LWFrame frame;
} LWTimeInfo;
#define LWCOMPINFO_GLOBAL "LW Compositing Info"
typedef struct st_LWCompInfo {
LWImageID bg;
LWImageID fg;
LWImageID fgAlpha;
} LWCompInfo;
#define LWBACKDROPINFO_GLOBAL "LW Backdrop Info 2"
typedef struct st_LWBackdropInfo {
void (*backdrop) (LWTime, const double ray[3], double color[3]);
int type;
void (*color) (LWTime, double zenith[3], double sky[3], double ground[3], double nadir[3]);
void (*squeeze) (LWTime, double *sky, double *ground);
} LWBackdropInfo;
#define LWBACK_SOLID 0
#define LWBACK_GRADIENT 1
#define LWFOGINFO_GLOBAL "LW Fog Info"
typedef struct st_LWFogInfo {
int type;
unsigned int flags;
double (*minDist) (LWTime);
double (*maxDist) (LWTime);
double (*minAmt) (LWTime);
double (*maxAmt) (LWTime);
void (*color) (LWTime, double col[3]);
} LWFogInfo;
#define LWFOG_NONE 0
#define LWFOG_LINEAR 1
#define LWFOG_NONLINEAR1 2
#define LWFOG_NONLINEAR2 3
#define LWFOGF_BACKGROUND (1<<0)
#define LWINTERFACEINFO_GLOBAL "LW Interface Info 3"
typedef struct st_LWInterfaceInfo {
LWTime curTime;
const LWItemID *selItems;
unsigned int (*itemFlags) (LWItemID);
LWFrame previewStart;
LWFrame previewEnd;
LWFrame previewStep;
int dynaUpdate;
void (*schemaPos) (LWItemID, double *x, double *y);
int (*itemVis) (LWItemID);
unsigned int displayFlags;
unsigned int generalFlags;
int boxThreshold;
int (*itemColor) (LWItemID);
int alertLevel;
} LWInterfaceInfo;
#define LWITEMF_SELECTED (1<<0)
#define LWITEMF_SHOWCHILDREN (1<<1)
#define LWITEMF_SHOWCHANNELS (1<<2)
#define LWITEMF_LOCKED (1<<3)
#define LWDYNUP_OFF 0
#define LWDYNUP_DELAYED 1
#define LWDYNUP_INTERACTIVE 2
#define LWIVIS_HIDDEN 0
#define LWIVIS_VISIBLE 1
#define LWOVIS_HIDDEN 0
#define LWOVIS_BOUNDINGBOX 1
#define LWOVIS_VERTICES 2
#define LWOVIS_WIREFRAME 3
#define LWOVIS_FFWIREFRAME 4
#define LWOVIS_SHADED 5
#define LWOVIS_TEXTURED 6
#define LWDISPF_MOTIONPATHS (1<<0)
#define LWDISPF_HANDLES (1<<1)
#define LWDISPF_IKCHAINS (1<<2)
#define LWDISPF_CAGES (1<<3)
#define LWDISPF_SAFEAREAS (1<<4)
#define LWDISPF_FIELDCHART (1<<5)
#define LWGENF_HIDETOOLBAR (1<<0)
#define LWGENF_RIGHTTOOLBAR (1<<1)
#define LWGENF_PARENTINPLACE (1<<2)
#define LWGENF_FRACTIONALFRAME (1<<3)
#define LWGENF_KEYSINSLIDER (1<<4)
#define LWGENF_PLAYEXACTRATE (1<<5)
#define LWALERT_BEGINNER 0
#define LWALERT_INTERMEDIATE 1
#define LWALERT_EXPERT 2
#define LWGLOBALPOOL_RENDER_GLOBAL "Global Render Memory"
#define LWGLOBALPOOL_GLOBAL "Global Memory"
typedef void * LWMemChunk;
typedef struct st_LWGlobalPool {
LWMemChunk (*first) (void);
LWMemChunk (*next) (LWMemChunk);
const char * (*ID) (LWMemChunk);
int (*size) (LWMemChunk);
LWMemChunk (*find) (const char *ID);
LWMemChunk (*create) (const char *ID, int size);
} LWGlobalPool;
#endif