Fixed a stupid bug when exporting meshes with empty material slots.
[blender.git] / intern / opennl / extern / ONL_opennl.h
1 /*
2  *  $Id$
3  *
4  *  OpenNL: Numerical Library
5  *  Copyright (C) 2004 Bruno Levy
6  *
7  *  This program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  *  If you modify this software, you should include a notice giving the
22  *  name of the person performing the modification, the date of modification,
23  *  and the reason for such modification.
24  *
25  *  Contact: Bruno Levy
26  *
27  *     levy@loria.fr
28  *
29  *     ISA Project
30  *     LORIA, INRIA Lorraine, 
31  *     Campus Scientifique, BP 239
32  *     54506 VANDOEUVRE LES NANCY CEDEX 
33  *     FRANCE
34  *
35  *  Note that the GNU General Public License does not permit incorporating
36  *  the Software into proprietary programs. 
37  */
38
39 /*
40 #define NL_DEBUG
41 #define NL_PARANOID
42 */
43
44 #define NL_USE_SUPERLU
45
46 #ifndef nlOPENNL_H
47 #define nlOPENNL_H
48
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52
53 #define NL_VERSION_0_0 1
54
55 /* Datatypes */
56
57 typedef unsigned int    NLenum;
58 typedef unsigned char   NLboolean;
59 typedef unsigned int    NLbitfield;
60 typedef void                    NLvoid;
61 typedef signed char             NLbyte;         /* 1-byte signed */
62 typedef short                   NLshort;        /* 2-byte signed */
63 typedef int                             NLint;          /* 4-byte signed */
64 typedef unsigned char   NLubyte;        /* 1-byte unsigned */
65 typedef unsigned short  NLushort;       /* 2-byte unsigned */
66 typedef unsigned int    NLuint;         /* 4-byte unsigned */
67 typedef int                             NLsizei;        /* 4-byte signed */
68 typedef float                   NLfloat;        /* single precision float */
69 typedef double                  NLdouble;       /* double precision float */
70
71 typedef void* NLContext;
72
73 /* Constants */
74
75 #define NL_FALSE   0x0
76 #define NL_TRUE    0x1
77
78 /* Primitives */
79
80 #define NL_SYSTEM  0x0
81 #define NL_MATRIX  0x1
82 #define NL_ROW     0x2
83
84 /* Solver Parameters */
85
86 #define NL_SOLVER           0x100
87 #define NL_NB_VARIABLES     0x101
88 #define NL_LEAST_SQUARES    0x102
89 #define NL_SYMMETRIC        0x106
90 #define NL_ERROR            0x108
91
92 /* Enable / Disable */
93
94 #define NL_NORMALIZE_ROWS  0x400
95
96 /* Row parameters */
97
98 #define NL_RIGHT_HAND_SIDE 0x500
99 #define NL_ROW_SCALING     0x501
100
101 /* Contexts */
102
103 NLContext nlNewContext(void);
104 void nlDeleteContext(NLContext context);
105 void nlMakeCurrent(NLContext context);
106 NLContext nlGetCurrent(void);
107
108 /* State get/set */
109
110 void nlSolverParameterf(NLenum pname, NLfloat param);
111 void nlSolverParameteri(NLenum pname, NLint param);
112
113 void nlRowParameterf(NLenum pname, NLfloat param);
114 void nlRowParameteri(NLenum pname, NLint param);
115
116 void nlGetBooleanv(NLenum pname, NLboolean* params);
117 void nlGetFloatv(NLenum pname, NLfloat* params);
118 void nlGetIntergerv(NLenum pname, NLint* params);
119
120 void nlEnable(NLenum pname);
121 void nlDisable(NLenum pname);
122 NLboolean nlIsEnabled(NLenum pname);
123
124 /* Variables */
125
126 void nlSetVariable(NLuint index, NLfloat value);
127 NLfloat nlGetVariable(NLuint index);
128 void nlLockVariable(NLuint index);
129 void nlUnlockVariable(NLuint index);
130 NLboolean nlVariableIsLocked(NLuint index);
131
132 /* Begin/End */
133
134 void nlBegin(NLenum primitive);
135 void nlEnd(NLenum primitive);
136 void nlCoefficient(NLuint index, NLfloat value);
137
138 /* Setting random elements matrix/vector - not for least squares! */
139
140 void nlMatrixAdd(NLuint row, NLuint col, NLfloat value);
141 void nlRightHandSideAdd(NLuint index, NLfloat value);
142
143 /* Solve */
144
145 NLboolean nlSolve(void);
146
147 #ifdef __cplusplus
148 }
149 #endif
150
151 #endif
152