home *** CD-ROM | disk | FTP | other *** search
/ Video Toaster 4.2 / Video Toaster v4.2.iso / programs / documentation / lightwave / sdk / include / lwran.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-19  |  11.0 KB  |  347 lines

  1. /*
  2.  * LWSDK Header File
  3.  * Copyright 1995  NewTek, Inc.
  4.  */
  5. #ifndef LW_RAN_H
  6. #define LW_RAN_H
  7.  
  8. #include <lwbase.h>
  9.  
  10. typedef unsigned char     BufferValue;
  11. typedef void *           LWItemID;
  12. #define LWITEM_NULL      ((LWItemID) 0)
  13. typedef int              LWItemType;
  14. #define LWI_OBJECT       0
  15. #define LWI_LIGHT        1
  16. #define LWI_CAMERA       2
  17. #define LWI_BONE         3
  18. typedef int              LWItemParam;
  19. #define LWIP_POSITION    1
  20. #define LWIP_RIGHT       2
  21. #define LWIP_UP          3
  22. #define LWIP_FORWARD     4
  23. #define LWIP_ROTATION    5
  24. #define LWIP_SCALING     6
  25. #define LWIP_PIVOT       7
  26. #define LWIP_W_POSITION  8
  27. typedef int              LWFrame;
  28. typedef double           LWTime;
  29. typedef const char *     LWError;
  30. typedef void *           LWInstance;
  31. #define LWIO_OBJECT      0
  32. #define LWIO_SCENE       1
  33. typedef struct st_LWLoadState {
  34.     int               ioMode;
  35.     void             *readData;
  36.     int             (*read) (void *readData, char *buf,
  37.                  int len);
  38. } LWLoadState;
  39.  
  40. typedef struct st_LWSaveState {
  41.     int               ioMode;
  42.     void             *writeData;
  43.     void            (*write) (void *writeData, char *buf,
  44.                   int len);
  45. } LWSaveState;
  46. typedef struct LWInstHandler {
  47.     LWInstance      (*create) (LWError *);
  48.     void            (*destroy) (LWInstance);
  49.     LWError         (*copy) (LWInstance from, LWInstance to);
  50.     LWError         (*load) (LWInstance, const LWLoadState *);
  51.     LWError         (*save) (LWInstance, const LWSaveState *);
  52. } LWInstHandler;
  53. #define LWVECF_0        (1<<0)
  54. #define LWVECF_1        (1<<1)
  55. #define LWVECF_2        (1<<2)
  56. #define LWOSHAD_SELF     (1<<0)
  57. #define LWOSHAD_CAST     (1<<1)
  58. #define LWOSHAD_RECEIVE  (1<<2)
  59. #define LWBONEF_ACTIVE          (1<<0)
  60. #define LWBONEF_LIMITEDRANGE    (1<<1)
  61. #define LWLIGHT_DISTANT  0
  62. #define LWLIGHT_POINT    1
  63. #define LWLIGHT_SPOT     2
  64. #define LWLSHAD_OFF      0
  65. #define LWLSHAD_RAYTRACE 1
  66. #define LWLSHAD_MAP      2
  67. #define LWRTYPE_WIRE            0
  68. #define LWRTYPE_QUICK           1
  69. #define LWRTYPE_REALISTIC       2
  70. typedef void *           LWImageID;
  71. typedef void *          MemChunk;
  72. #define LWBUF_SPECIAL    0
  73.  
  74. #define LWBUF_LUMINOUS   1
  75. #define LWBUF_DIFFUSE    2
  76. #define LWBUF_SPECULAR   3
  77. #define LWBUF_MIRROR     4
  78. #define LWBUF_TRANS      5
  79. #define LWBUF_RAW_RED    6
  80. #define LWBUF_RAW_GREEN  7
  81. #define LWBUF_RAW_BLUE   8
  82.  
  83. #define LWBUF_SHADING    9
  84. #define LWBUF_SHADOW     10
  85. #define LWBUF_GEOMETRY   11
  86. #define LWBUF_DEPTH      12
  87.  
  88. #define LWBUF_RED        32
  89. #define LWBUF_GREEN      33
  90. #define LWBUF_BLUE       34
  91. #define LWBUF_ALPHA      35
  92. typedef struct st_FilterAccess {
  93.     int               width, height;
  94.     LWFrame           frame;
  95.     LWTime            start, end;
  96.     BufferValue *   (*bufLine) (int type, int y);
  97.     float *         (*fltLine) (int type, int y);
  98.     void            (*setRGB)   (int x, int y, BufferValue[3]);
  99.     void            (*setAlpha) (int x, int y, BufferValue);
  100.     #ifndef LW_PRERELEASE
  101.     Monitor          *monitor;
  102.     #endif
  103. } FilterAccess;
  104. typedef struct st_ImageFilterHandler {
  105.     LWInstHandler     inst;
  106.     void            (*process) (LWInstance, const FilterAccess *);
  107.     unsigned int    (*flags) (LWInstance);
  108. } ImageFilterHandler;
  109. typedef struct st_ShaderAccess {
  110.         int              sx, sy;
  111.         double           oPos[3], wPos[3];
  112.         double           gNorm[3];
  113.         double           spotSize;
  114.         double           raySource[3];
  115.         double           rayLength;
  116.         double           cosine;
  117.         double           oXfrm[9],  wXfrm[9];
  118.         LWItemID         objID;
  119.     #ifndef LW_PRERELEASE
  120.         int              polNum;
  121.     #endif
  122.     double           wNorm[3];
  123.     double           color[3];
  124.     double           luminous;
  125.     double           diffuse;
  126.     double           specular;
  127.     double           mirror;
  128.     double           transparency;
  129.     double           eta;
  130.     double           roughness;
  131.     int            (*illuminate) (LWItemID light,
  132.                       const double position[3],
  133.                       double direction[3],
  134.                       double color[3]);
  135.     double         (*rayTrace) (const double position[3],
  136.                     const double direction[3],
  137.                     double color[3]);
  138. } ShaderAccess;
  139. #define LWSHF_NORMAL    (1<<0)
  140. #define LWSHF_COLOR     (1<<1)
  141. #define LWSHF_LUMINOUS  (1<<2)
  142. #define LWSHF_DIFFUSE   (1<<3)
  143. #define LWSHF_SPECULAR  (1<<4)
  144. #define LWSHF_MIRROR    (1<<5)
  145. #define LWSHF_TRANSP    (1<<6)
  146. #define LWSHF_ETA       (1<<7)
  147. #define LWSHF_ROUGH     (1<<8)
  148. #define LWSHF_RAYTRACE  (1<<10)
  149. typedef struct st_ShaderHandler {
  150.     LWInstHandler     inst;
  151.     LWError         (*init) (LWInstance);
  152.     void            (*cleanup) (LWInstance);
  153.     LWError         (*newTime) (LWInstance, LWFrame, LWTime);
  154.     void            (*evaluate) (LWInstance, ShaderAccess *);
  155.     unsigned int    (*flags) (LWInstance);
  156. } ShaderHandler;
  157. typedef struct st_DisplacementAccess {
  158.     double           oPos[3];
  159.     double           source[3];
  160. } DisplacementAccess;
  161. typedef struct st_DisplacementHandler {
  162.     LWInstHandler     inst;
  163.     LWError         (*newTime) (LWInstance, LWItemID,
  164.                     LWFrame, LWTime);
  165.     void            (*evaluate) (LWInstance,
  166.                      DisplacementAccess *);
  167.     unsigned int    (*flags) (LWInstance);
  168. } DisplacementHandler;
  169.  
  170. #define LWDMF_WORLD     (1<<0)
  171. typedef struct st_ItemMotionAccess {
  172.     LWItemID          item;
  173.     LWFrame           frame;
  174.     LWTime            time;
  175.     void            (*getParam) (LWItemParam, LWTime,
  176.                      double vector[3]);
  177.     void            (*setParam) (LWItemParam,
  178.                      const double vector[3]);
  179. } ItemMotionAccess;
  180. typedef struct st_ItemMotionHandler {
  181.     LWInstHandler     inst;
  182.     void            (*evaluate) (LWInstance,
  183.                      const ItemMotionAccess *);
  184. } ItemMotionHandler;
  185. #define OBJREP_NONE      0
  186. #define OBJREP_PREVIEW   1
  187. #define OBJREP_RENDER    2
  188. typedef struct st_ObjReplacementAccess {
  189.     LWItemID         objectID;
  190.     LWFrame          curFrame, newFrame;
  191.     LWTime           curTime,  newTime;
  192.     int              curType,  newType;
  193.     const char      *curFilename;
  194.     const char      *newFilename;
  195. } ObjReplacementAccess;
  196. typedef struct st_ObjReplacementHandler {
  197.     LWInstHandler     inst;
  198.     void            (*evaluate) (LWInstance,
  199.                      ObjReplacementAccess *);
  200. } ObjReplacementHandler;
  201. typedef struct st_FrameBufferHandler {
  202.     LWInstHandler     inst;
  203.     LWError         (*open) (LWInstance, int w, int h);
  204.     void            (*close) (LWInstance);
  205.     LWError         (*begin) (LWInstance);
  206.     LWError         (*write) (LWInstance,
  207.                   const BufferValue *R,
  208.                   const BufferValue *G,
  209.                   const BufferValue *B,
  210.                   const BufferValue *alpha);
  211.     void            (*pause) (LWInstance);
  212. } FrameBufferHandler;
  213. typedef struct st_AnimSaverHandler {
  214.     LWInstHandler     inst;
  215.     LWError         (*open) (LWInstance, int w, int h,
  216.                  const char *filename);
  217.     void            (*close) (LWInstance);
  218.     LWError         (*begin) (LWInstance);
  219.     LWError         (*write) (LWInstance,
  220.                   const BufferValue *R,
  221.                   const BufferValue *G,
  222.                   const BufferValue *B,
  223.                   const BufferValue *alpha);
  224. } AnimSaverHandler;
  225. typedef struct st_SceneConverter {
  226.     const char       *filename;
  227.     LWError           readFailure;
  228.     const char       *tmpScene;
  229.     void            (*deleteTmp) (const char *tmpScene);
  230. } SceneConverter;
  231. typedef struct st_LWItemInfo {
  232.     LWItemID        (*first)  (LWItemType, LWItemID);
  233.     LWItemID        (*next)   (LWItemID);
  234.     LWItemID        (*firstChild) (LWItemID parent);
  235.     LWItemID        (*nextChild) (LWItemID parent, LWItemID prevChild);
  236.     LWItemID        (*parent) (LWItemID);
  237.     LWItemID        (*target) (LWItemID);
  238.     LWItemID        (*goal)   (LWItemID);
  239.     LWItemType      (*type)   (LWItemID);
  240.     const char *    (*name)   (LWItemID);
  241.     void            (*param)  (LWItemID, LWItemParam, LWTime,
  242.                    double vector[3]);
  243.     unsigned int    (*limits) (LWItemID, LWItemParam,
  244.                    double min[3], double max[3]);
  245. } LWItemInfo;
  246. typedef struct st_LWObjectInfo {
  247.     const char *    (*filename) (LWItemID);
  248.     int             (*numPoints) (LWItemID);
  249.     int             (*numPolygons) (LWItemID);
  250.     unsigned int    (*shadowOpts) (LWItemID);
  251.     double          (*dissolve) (LWItemID, LWTime);
  252. } LWObjectInfo;
  253. typedef struct st_LWBoneInfo {
  254.     unsigned int    (*flags) (LWItemID);
  255.     void            (*restParam) (LWItemID, LWItemParam,
  256.                       double vector[3]);
  257.     double          (*restLength) (LWItemID);
  258.     void            (*limits) (LWItemID, double *inner,
  259.                    double *outer);
  260. } LWBoneInfo;
  261. typedef struct st_LWLightInfo {
  262.     void            (*ambient) (LWTime, double color[3]);
  263.     int             (*type) (LWItemID);
  264.     void            (*color) (LWItemID, LWTime, double color[3]);
  265.     int             (*shadowType) (LWItemID);
  266.     void            (*coneAngles) (LWItemID, double *radius,
  267.                        double *edge);
  268. } LWLightInfo;
  269. typedef struct st_LWCameraInfo {
  270.     double          (*zoomFactor) (LWItemID, LWTime);
  271.     double          (*focalLength) (LWItemID, LWTime);
  272.     double          (*focalDistance) (LWItemID, LWTime);
  273.     double          (*fStop) (LWItemID, LWTime);
  274.     double          (*blurLength) (LWItemID, LWTime);
  275.     void            (*fovAngles) (LWItemID, LWTime,
  276.                       double *horizontal,
  277.                       double *vertical);
  278. } LWCameraInfo;
  279. #define LWROPT_SHADOWTRACE      (1<<0)
  280. #define LWROPT_REFLECTTRACE     (1<<1)
  281. #define LWROPT_REFRACTTRACE     (1<<2)
  282. #define LWROPT_FIELDS           (1<<3)
  283. #define LWROPT_EVENFIELDS       (1<<4)
  284. #define LWROPT_MOTIONBLUR       (1<<5)
  285. #define LWROPT_DEPTHOFFIELD     (1<<6)
  286. #define LWROPT_LIMITEDREGION    (1<<7)
  287. typedef struct st_LWSceneInfo {
  288.     const char      *name;
  289.     const char      *filename;
  290.     int              numPoints;
  291.     int              numPolygons;
  292.     int              renderType;
  293.     int              renderOpts;
  294.     LWFrame          frameStart;
  295.     LWFrame          frameEnd;
  296.     LWFrame          frameStep;
  297.     double           framesPerSecond;
  298.     int              frameWidth;
  299.     int              frameHeight;
  300.     double           pixelAspect;
  301.     int              minSamplesPerPixel;
  302.     int              maxSamplesPerPixel;
  303.     int              limitedRegion[4];      /* x0, y0, x1, y1 */
  304. } LWSceneInfo;
  305. typedef struct st_LWImageList {
  306.     LWImageID       (*first) (void);
  307.     LWImageID       (*next) (LWImageID);
  308.     LWImageID       (*load) (const char *);
  309.     const char *    (*name) (LWImageID);
  310.     #ifndef LW_PRERELEASE
  311.     const char *    (*filename) (LWImageID, LWFrame);
  312.     #else
  313.     const char *    (*filename) (LWImageID);
  314.     #endif
  315.     int             (*isColor) (LWImageID);
  316.     void            (*needAA) (LWImageID);
  317.     void            (*size) (LWImageID, int *w, int *h);
  318.     BufferValue     (*luma) (LWImageID, int x, int y);
  319.     void            (*RGB)  (LWImageID, int x, int y,
  320.                  BufferValue[3]);
  321.     double          (*lumaSpot) (LWImageID, double x, double y,
  322.                      double spotSize, int blend);
  323.     void            (*RGBSpot)  (LWImageID, double x, double y,
  324.                      double spotSize, int blend,
  325.                      double[3]);
  326.     #ifndef LW_PRERELEASE
  327.     void            (*clear) (LWImageID);
  328.     #endif
  329. } LWImageList;
  330. #ifndef LW_PRERELEASE
  331. typedef struct st_LWCompInfo {
  332.     LWImageID        bg;
  333.     LWImageID        fg;
  334.     LWImageID        fgAlpha;
  335. } LWCompInfo;
  336. #endif
  337. typedef struct st_GlobalPool {
  338.     MemChunk        (*first) (void);
  339.     MemChunk        (*next) (MemChunk);
  340.     const char *    (*ID)   (MemChunk);
  341.     int             (*size) (MemChunk);
  342.     MemChunk        (*find)   (const char *ID);
  343.     MemChunk        (*create) (const char *ID, int size);
  344. } GlobalPool;
  345.  
  346. #endif
  347.