Serious-Engine/Sources/LWSkaExporter/SDK/lwtexture.h

85 lines
3.4 KiB
C
Raw Permalink Normal View History

2016-03-11 14:57:17 +01:00
/*
* LWSDK Header File
* Copyright 1999, NewTek, Inc.
*
* LWTEXTURE.H -- LightWave Procedural Textures
*
* This header defines the procedural texture render handler. These
* are the building blocks of texture channel layers.
*/
#ifndef LWSDK_TEXTURE_H
#define LWSDK_TEXTURE_H
#include <lwrender.h>
#define LWTEXTURE_HCLASS "TextureHandler"
#define LWTEXTURE_ICLASS "TextureInterface"
#define LWTEXTURE_VERSION 5
/*
wPos: coordinates in world space, these are the raw coordinates unaffected by any transformation.
tPos: coordinates in texture space. This is the coordinates that will most likeley be used
by the server, the result from the transformation set by the user (scale, position, etc.)
size: scale of the texture in the 3 directions. This is sometimes usefull for antialiasing.
amp: amplitude of the texture. This information can also be used for antialiasing.
spotSize: for antialiasing.
txGrad: this is a return vector in case the server knows how to compute the gradient itself. This
value will only be used if the server returns the LWTEXF_GRAD flag.
axis: which dimensions are being evaluated. Usually it will be AXIS_X | AXIS_Y | AXIS_Z, though it
might change in some situations if the texture is evaluated for example in a 2D or 1D context.
octaves: this is the number of octaves in the fractal texture required by HV. This is how HV
maintains a constant level of detail based on the distance from the viewer. This should be discarded
for non fractal textures.
txRGBA: this is the return color and alpha value in case the texture outputs its own color.
Note: when returning a gradient or a color, the texture should also return the texture value at that
point. This value can be thought of as the altitude of the texture at that point.
*/
typedef struct st_LWTextureAccess {
double wPos[3],tPos[3],size[3],amp; // input
double spotSize; // input
double txGrad[3]; // output
int axis,flags; // input
double octaves; // input
double txRGBA[4]; // output
} LWTextureAccess;
typedef struct st_LWTextureHandler {
LWInstanceFuncs *inst;
LWItemFuncs *item;
LWRenderFuncs *rend;
double (*evaluate) (LWInstance, LWTextureAccess *);
unsigned int (*flags) (LWInstance);
} LWTextureHandler;
/*
These are the server flags
*/
#define LWTEXF_GRAD (1<<0) /* texture returns its own gradient */
#define LWTEXF_SLOWPREVIEW (1<<1) /* texture editor preview will be delayed */
#define LWTEXF_AXIS (1<<2) /* texture needs an axis control */
#define LWTEXF_AALIAS (1<<3) /* texture is naturally antialiased */
#define LWTEXF_DISPLACE (1<<4) /* texture is available for displacement */
#define LWTEXF_HV_SRF (1<<5) /* texture is available for HV surfaces */
#define LWTEXF_HV_VOL (1<<6) /* texture is available for HV volumes */
#define LWTEXF_SELF_COLOR (1<<7) /* texture returns its own color */
/*
These are the evaluation flags passed in the TextureAccess
*/
#define LWTXEF_VECTOR (1<<0) /* vector (=bump) evaluation context */
#define LWTXEF_AXISX (1<<1)
#define LWTXEF_AXISY (1<<2)
#define LWTXEF_AXISZ (1<<3)
#define LWTXEF_DISPLACE (1<<4) /* displacement evaluation context */
#define LWTXEF_COLOR (1<<5) /* color evaluation context */
#endif