#ifndef __nsi_h #define __nsi_h #include #ifdef _WIN32 #define DL_INTERFACE __declspec(dllimport) #else #define DL_INTERFACE #endif #ifdef __cplusplus extern "C" { #endif typedef int NSIContext_t; typedef const char* NSIHandle_t; #define NSI_BAD_CONTEXT ((NSIContext_t)0) #define NSI_SCENE_ROOT ".root" #define NSI_SCENE_GLOBAL ".global" #define NSI_ALL_NODES ".all" #define NSI_ALL_ATTRIBUTES ".all" #define NSI_VERSION 2 /* Type values for NSIParam_t.type */ enum NSIType_t { NSITypeInvalid = 0, NSITypeFloat = 1, NSITypeDouble = NSITypeFloat | 0x10, NSITypeInteger = 2, NSITypeString = 3, NSITypeColor = 4, NSITypePoint = 5, NSITypeVector = 6, NSITypeNormal = 7, NSITypeMatrix = 8, NSITypeDoubleMatrix = NSITypeMatrix | 0x10, NSITypePointer = 9 }; static inline size_t NSITypeSizeOf(unsigned t) { static const unsigned char sizes[] = { 0, sizeof(float), sizeof(int), sizeof(char*), 3*sizeof(float), 3*sizeof(float), 3*sizeof(float), 3*sizeof(float), 16*sizeof(float), sizeof(void*), 0, 0, 0, 0, 0, 0, 0, sizeof(double), 0, 0, 0, 0, 0, 0, 16*sizeof(double) }; return t <= 24 ? sizes[t] : 0; } /* Flag values for NSIParam_t.flags */ enum { NSIParamIsArray = 1, NSIParamPerFace = 2, NSIParamPerVertex = 4, NSIParamInterpolateLinear = 8 }; /* Structure for optional parameters. */ struct NSIParam_t { const char *name; const void *data; int type; int arraylength; size_t count; int flags; }; /* Values for second parameter of NSIRenderStopped_t */ enum NSIStoppingStatus { NSIRenderCompleted = 0, NSIRenderAborted = 1, NSIRenderSynchronized = 2, NSIRenderRestarted = 3 }; /* Error levels for the error callback. */ enum NSIErrorLevel { NSIErrMessage = 0, NSIErrInfo = 1, NSIErrWarning = 2, NSIErrError = 3 }; /* Error handler callback type. */ typedef void (*NSIErrorHandler_t)( void *userdata, int level, int code, const char *message ); /* Stopped callback type. */ typedef void (*NSIRenderStopped_t)( void *userdata, NSIContext_t ctx, int status ); DL_INTERFACE NSIContext_t NSIBegin( int nparams, const struct NSIParam_t *params ); DL_INTERFACE void NSIEnd( NSIContext_t ctx ); DL_INTERFACE void NSICreate( NSIContext_t ctx, NSIHandle_t handle, const char *type, int nparams, const struct NSIParam_t *params ); DL_INTERFACE void NSIDelete( NSIContext_t ctx, NSIHandle_t handle, int nparams, const struct NSIParam_t *params ); DL_INTERFACE void NSISetAttribute( NSIContext_t ctx, NSIHandle_t object, int nparams, const struct NSIParam_t *params ); DL_INTERFACE void NSISetAttributeAtTime( NSIContext_t ctx, NSIHandle_t object, double time, int nparams, const struct NSIParam_t *params ); DL_INTERFACE void NSIDeleteAttribute( NSIContext_t ctx, NSIHandle_t object, const char *name ); DL_INTERFACE void NSIConnect( NSIContext_t ctx, NSIHandle_t from, const char *from_attr, NSIHandle_t to, const char *to_attr, int nparams, const struct NSIParam_t *params ); DL_INTERFACE void NSIDisconnect( NSIContext_t ctx, NSIHandle_t from, const char *from_attr, NSIHandle_t to, const char *to_attr ); DL_INTERFACE void NSIEvaluate( NSIContext_t ctx, int nparams, const struct NSIParam_t *params ); DL_INTERFACE void NSIRenderControl( NSIContext_t ctx, int nparams, const struct NSIParam_t *params ); #ifdef __cplusplus } #endif #endif